Komentarz. Pieniądze wielkie pieniądze



Podobne dokumenty
PRÓBNY EGZAMIN MATURALNY Z INFORMATYKI STYCZEŃ POZIOM ROZSZERZONY Część I

Komentarz. W poszukiwaniu zaginionego wzorca

WHILE (wyrażenie) instrukcja;

Programowanie w Baltie klasa VII

WHILE (wyrażenie) instrukcja;

Programowanie dynamiczne

Wykład z Podstaw Informatyki dla I roku BO. Piotr Mika

Programowanie od pierwszoklasisty do maturzysty. Grażyna Koba

Algorytm. a programowanie -

OSTASZEWSKI Paweł (55566) PAWLICKI Piotr (55567) Algorytmy i Struktury Danych PIŁA

PRÓBNY EGZAMIN MATURALNY Z INFORMATYKI

SYLABUS DOTYCZY CYKLU KSZTAŁCENIA Realizacja w roku akademickim 2016/17

Od programowania wizualnego do tekstowego

Algorytm poprawny jednoznaczny szczegółowy uniwersalny skończoność efektywność (sprawność) zmiennych liniowy warunkowy iteracyjny

INFORMATYKA POZIOM ROZSZERZONY

INFORMATYKA POZIOM ROZSZERZONY

Testy jednostkowe Wybrane problemy testowania metod rekurencyjnych

Jarosław Kuchta Dokumentacja i Jakość Oprogramowania. Wymagania jakości w Agile Programming

Największy wspólny dzielnik Algorytm Euklidesa (także rozszerzony) WZAiP1: Chińskie twierdzenie o resztach

MIĘDZYSZKOLNA LIGA PRZEDMIOTOWA MATEMATYKA klasa IV PŁOCK 2014

Piotr Chrząstowski-Wachtel Uniwersytet Warszawski. Al Chwarizmi i trzy algorytmy Euklidesa

Zdolności arytmetyczne

EGZAMIN MATURALNY Z INFORMATYKI WYBRANE: ... (system operacyjny) ... (program użytkowy) ... (środowisko programistyczne)

PRÓBNY EGZAMIN MATURALNY Z INFORMATYKI

Programowanie dynamiczne

Efekt kształcenia. Ma uporządkowaną, podbudowaną teoretycznie wiedzę ogólną w zakresie algorytmów i ich złożoności obliczeniowej.

Klasa 2 INFORMATYKA. dla szkół ponadgimnazjalnych zakres rozszerzony. Założone osiągnięcia ucznia wymagania edukacyjne na. poszczególne oceny

Szkoła Podstawowa w Mycielinie. Język rosyjski. Klasy: 5 6

KARTA KURSU. Wstęp do programowania

B.B. 2. Sumowanie rozpoczynamy od ostatniej kolumny. Sumujemy cyfry w kolumnie zgodnie z podaną tabelką zapisując wynik pod kreską:

Inwestor musi wybrać następujące parametry: instrument bazowy, rodzaj opcji (kupna lub sprzedaży, kurs wykonania i termin wygaśnięcia.

Przedmiotowy system oceniania z języka angielskiego

Wykład VII. Programowanie III - semestr III Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej

Konkursy w województwie podkarpackim w roku szkolnym 2013/2014

Michał Olejnik. 22 grudnia 2009

SPRAWDZIAN DIAGNOZUJĄCY KLAS PIĄTYCH

SYLABUS DOTYCZY CYKLU KSZTAŁCENIA realizacja w roku akademickim 2016/17

PŁOCKA MIĘDZYSZKOLNA LIGA PRZEDMIOTOWA MATEMATYKA klasa IV szkoła podstawowa 2012

1WYMAGANIA EDUKACYJNE Z JĘZYKA HISZPAŃSKIEGO dla klasy I/II/III w I Liceum Ogólnokształcącym im. Tadeusza Kościuszki w Koninie 2016/17

EGZAMIN MATURALNY W ROKU SZKOLNYM 2017/2018 INFORMATYKA

Zapisywanie algorytmów w języku programowania

EGZAMIN MATURALNY Z INFORMATYKI

PROSKAR KREATYWNA INŻYNIERIA

EGZAMIN MATURALNY Z INFORMATYKI 17 MAJA 2016 POZIOM PODSTAWOWY. Godzina rozpoczęcia: 14:00 CZĘŚĆ I WYBRANE: Czas pracy: 75 minut

EGZAMIN MATURALNY Z INFORMATYKI. 10 maja 2017 POZIOM ROZSZERZONY. Godzina rozpoczęcia: 14:00 CZĘŚĆ I

Oceniane formy aktywności II. Kryteria i sposoby oceniania

MODELE CYKLU ŻYCIA OPROGRAMOWANIA (1) Model kaskadowy (często stosowany w praktyce do projektów o niewielkiej złożonoś

1940, 17 = K 4 = K 2 (1, 05)(1 + x 200 )3. Stąd, po wstawieniu K 2 dostaję:

Projektowanie systemów informatycznych. Roman Simiński programowanie.siminskionline.pl. Cykl życia systemu informatycznego

Waterfall model. (iteracyjny model kaskadowy) Marcin Wilk

METODY ROZWIĄZYWANIA RÓWNAŃ NIELINIOWYCH

Wstęp do programowania

Specyfikacja usług. 1. Zakup usług informatycznych dla realizacji dostępu do systemu dla obsługi relacji B2B.

SCENARIUSZ LEKCJI. TEMAT LEKCJI: Projektowanie rozwiązania prostych problemów w języku C++ obliczanie pola trójkąta

Podsumowanie wyników Egzaminu ze Statystyki 1 Semestr zimowy 2017/2018

INFORMATYKA POZIOM PODSTAWOWY

Część I. Uwaga: Akceptowane są wszystkie odpowiedzi merytorycznie poprawne i spełniające warunki zadania. Zadanie 1.1. (0 3)

PRZEWODNIK PO PRZEDMIOCIE

Wyszukiwanie binarne

Oceny ze sprawdzianów wystawiane są na podstawie skali procentowej:

SLA ORAZ ZASADY ŚWIADCZENIA WSPARCIA I HELPDESK. Wykonawca zobowiązuje się do świadczenia Usług Wsparcia i Helpdesk w odniesieniu do Systemu.

Schematy blokowe I. 1. Dostępne bloki: 2. Prosty program drukujący tekst.

MIĘDZYSZKOLNA LIGA PRZEDMIOTOWA EDUKACJA MATEMATYCZNA klasa II PŁOCK 2014

Lekcja : Tablice + pętle

Środowiska programistyczne dla szkoły podstawowej Jak zachęcić uczniów do startu w konkursach informatycznych

Budowa aplikacji webowej w oparciu o Maven2 oraz przykłady testów jednostkowych. Wykonał Marcin Gadamer

MIĘDZYSZKOLNA LIGA PRZEDMIOTOWA EDUKACJA MATEMATYCZNA klasa III PŁOCK 2014

Podstawy programowania. Wykład: 13. Rekurencja. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

PŁOCKA MIĘDZYSZKOLNA LIGA PRZEDMIOTOWA MATEMATYKA klasa III szkoła podstawowa marzec 2015

1 Powtórzenie wiadomości

EGZAMIN MATURALNY Z INFORMATYKI

EGZAMIN MATURALNY 2010 INFORMATYKA

Przedmiotowe Zasady Oceniania III LO w Łomży. Algorytmika. Klasy II-III

Algorytmy i struktury danych

Jak napisać program obliczający pola powierzchni różnych figur płaskich?

Temat: Arkusze kalkulacyjne. Program Microsoft Office Excel. Podstawy

Nadwyżki finansowe - lokować czy inwestować?

ROZWIĄZYWANIE RÓWNAŃ NIELINIOWYCH

TEORETYCZNE PODSTAWY INFORMATYKI

Nazwa Wydziału Nazwa jednostki prowadzącej moduł Nazwa modułu kształcenia Kod modułu Język kształcenia Efekty kształcenia dla modułu kształcenia

Złożoność obliczeniowa zadania, zestaw 2

Odkrywanie algorytmów kwantowych za pomocą programowania genetycznego

ALGORYTMY Algorytm poprawny jednoznaczny szczegółowy uniwersalny skończoność efektywność (sprawność) zmiennych liniowy warunkowy iteracyjny

SYLABUS DOTYCZY CYKLU KSZTAŁCENIA Realizacja w roku akademickim 2016/17

Aplikacje w środowisku Java

SYLABUS DOTYCZY CYKLU KSZTAŁCENIA realizacja w roku akademickim 2016/17

Rozkład materiału do nauczania informatyki w liceum ogólnokształcącym Wersja I

Zał nr 4 do ZW. Dla grupy kursów zaznaczyć kurs końcowy. Liczba punktów ECTS charakterze praktycznym (P)

NAJLEPSZE STRATEGIE SKUTECZNYCH PROGRAMISTÓW. TECHNIKI PRACY Z KODEM KOD: NSKOD

Wprowadzenie do algorytmiki

Rozkład materiału do nauczania informatyki w liceum ogólnokształcącym Wersja II

Metody numeryczne Technika obliczeniowa i symulacyjna Sem. 2, EiT, 2014/2015

Struktury Danych i Złożoność Obliczeniowa

Efekty kształcenia dla kierunku studiów INFORMATYKA, Absolwent studiów I stopnia kierunku Informatyka WIEDZA

Algorytm - pojęcie algorytmu, sposób zapisu, poziom szczegółowości, czynności proste i strukturalne. Pojęcie procedury i funkcji.

EGZAMIN MATURALNY Z INFORMATYKI 11 MAJA 2018 POZIOM ROZSZERZONY. Godzina rozpoczęcia: 14:00 CZĘŚĆ I WYBRANE: Czas pracy: 90 minut

1 Równania nieliniowe

Wybrane wyniki w zakresie umiejętności matematycznych

Analiza i projektowanie obiektowe 2017/2018. Wykład 3: Model wiedzy dziedzinowej

Transkrypt:

Komentarz Pieniądze wielkie pieniądze

Pieniądze wielkie pieniądze Jak donosi prasa branżowa, w pierwszym dniu po wdrożeniu nowego systemu bankomatów, akcje Kupakasi Bank na nowojorskiej giełdzie zyskały 30%. Problemy z dotychczasowym oprogramowaniem powodowały spory odpływ klientów, zaś utracona przez wszystkich wiara w terminowe i bezawaryjne wdrożenie podkopała zaufanie do Banku jeszcze bardziej. Ku zaskoczeniu wszystkich, system zadziałał bezbłędnie, zaś najbardziej ryzykowny element obliczający jakimi nominałami bankomat ma wypłacić żądaną kwotę przeszedł szybko testy akceptacyjne i działa z powodzeniem w warunkach produkcyjnych. Kupakasi Bank z optymizmem patrzy w przyszłość, zarząd jest wniebowzięty a prezes Tukosi-Takasa za otrzymaną premię już zamówił dwutygodniowe wczasy na Bora-Bora. Co było do zrobienia W literaturze informatycznej znany jest problem wydawania reszty. W klasycznym ujęciu polega on na obliczeniu, jak wydać resztę przy użyciu jak najmniejszej liczby monet przy danych nominałach, jakimi dysponuje sprzedawca. Nasz problem, jest pokrewny, jednak nieco się różni. Oprócz różnic czysto kosmetycznych, takich jak wypłata banknotów a nie monet przez bankomat a nie sprzedawcę nieco zmodyfikowaliśmy oryginalny problem. Nie nałożyliśmy ograniczenia na optymalizację liczby banknotów, jednak oprócz nominałów, dostaliście również informację o liczbie banknotów z każdego nominału, jakimi dysponuje bankomat. Zadaniem Waszym było napisanie kodu do jasno sprecyzowanego API, który realizuje problem wypłaty gotówki z bankomatu i obliczania w jakich banknotach należy wypłacić żądaną kwotę. Dodatkowym wyzwaniem, było należyte obsłużenie sytuacji, gdy wypłata nie jest możliwa i zasugerowanie mniejszej jak i większej kwoty, przy której pieniądze będzie można wypłacić.

Rozwiązanie Przy rozwiązaniu zadania można skorzystać ze znanych sposobów rozwiązania problemu wydawania reszty. Jednym z nich jest algorytm zachłanny. Jego praca jest iteracyjna, zaś każda iteracja polega na odejmowaniu od żądanej kwoty wypłaty największego dostępnego nominału mniejszego od pozostałej kwoty (po odjęciu we wcześniejszych iteracjach). Odejmowana kwota reprezentuje wypłacany nominał. Iteracje powtarza się do momentu uzyskania wyniku 0 lub stwierdzenia, że nie da się takiego uzyskać. Wadą tego algorytmu w opisanej postaci bywa nieskuteczność. Np. nie zadziała gdy mamy dostępne nominały 20 i 50 (pomijając dla uproszczenia zasoby bankomatu) zaś żądana kwota wypłaty to 110. Algorytm zaproponuje wypłatę 2 razy po 50 i gdy zostanie 10 stwierdzi, że dalsza wypłata jest niemożliwa. Tymczasem można jak najbardziej żądaną kwotę wypłacić w nominałach 20, 20, 20 i 50. Dlatego by uzyskać maksymalną skuteczność algorytmu, mówiąc kolokwialnie, po dojściu do wniosku, że wypłata jest niemożliwa, należałoby cofnąć ostatnią wypłatę i spróbować mniejszymi nominałami. I próbować w ten sposób do skutku. Pozostawiamy czytelnikom analizę innego podejścia opartego o programowanie dynamiczne, które naszym zdaniem jest rozwiązaniem bardziej preferowanym. Jak ocenialiśmy Poprawna implementacja ilości zwracanych banknotów do 150 punktów Poprawna implementacja sugerowanych kwot wypłaty, w przypadku braku możliwości zrealizowania pierwotnej wypłaty do 150 punktów EXTRA bonus za rzeczy które nas pozytywnie zaskoczą do 150 punktów, w tym o Testy jednostkowe ( do 50 punktów) o Osiągnięcie najniższej złożoności obliczeniowej wśród wszystkich uczestników (50 punktów) o Premia za wyjątkowo dobrą jakość kodu (do 50 punktów) Maksymalna ilość punktów do uzyskania w zadaniu: 450 pkt.

Jak poszło Liczyliśmy na to, że zadanie będzie momentem złapania oddechu przed finiszem i wielkim finałem. Lekka zabawa algorytmiczna, bez wygórowanych wymagań miała zapewnić dobrą zabawę. Jednak biorąc pod uwagę liczbę nadesłanych prac oraz pewne dostrzeżone problemy, odnieśliśmy wrażenie, że jednak zadanie nie było wcale takie proste. Bez wątpienia przyczynił się do tego również wielkanocny nastrój. Niestety harmonogram konkursu jest nieubłagany. Najmniej problemu sprawiło zwrócenie informacji o tym, że wypłata jest niemożliwa. Względnie dobrze oceniliśmy również zwrócenie informacji o nominałach wypłaty. Więcej problemów przysporzyło sugerowane kwoty wypłaty, przy czym znacznie lepiej radziliście sobie z zasugerowaniem kwot wypłaty, gdy wypłata była niemożliwa ze względu na brak odpowiednich nominałów w bankomacie, gorzej zaś, gdy wynikała ona z niedostatecznych zasobów bankomatu. Z nieukrywanym zadowoleniem odnotowujemy ogromny wzrost liczby prac, zawierających testy. Oczywiście tym razem zmotywowaliśmy Was do tego punktacją, mamy jednak nadzieję, że Wasze prace odniosły korzyść z ich napisania. Jesteśmy bardzo ciekawi, czy pokusiliście się o wykorzystywanie w swojej pracy również praktyk Test-Driven Development. W każdym razie gorąco do tego zachęcamy. Statystyki Nadesłanych odpowiedzi 12 Najwięcej uzyskanych punktów 410 Najmniej uzyskanych punktów 0 Suma punktów 3200 Średnia arytmetyczna 267 W zależności od języka programowania: Java 4 C++ 4 Najmniej uzyskanych punktów 4 W zależności od zawartości: Prace posiadające testy 11 Prace obliczające w pełni poprawnie kwotę wypłaty 7 Prace poprawnie informujące o braku możliwości wypłaty 9 Prace obliczające w pełni poprawnie sugestie wypłaty 4

Ciekawostki Znaleźliśmy prace, w których pomimo ewidentnych różnic implementacyjnych popełniono te same błędy przy sugerowaniu kwot wypłaty. Oględziny nie doprowadziły nas do wniosku, że to praca wspólna, jednak zbieżność toku myślenia zadziwia W API Javy został znaleziony przez uczestników niezamierzony błąd. Getter Nie wszyscy z Was odkryli możliwość stosowania tzw. mock objectów, jako bardzo pożytecznej techniki pozwalającej na efektywne pisanie testów jednostkowych klas posiadających zależności.