Ćwiczenia
MasterMind to gra planszowa dla dwóch osób. Gracze mają do dyspozycji pionki w sześciu kolorach. Pierwszy gra układa z pionków
kod czteroelementowy,
kolory w kodzie mogą się powtarzać. Zadaniem drugiego gracza jest
odgadnięcie kodu wybranego przez pierwszego gracza.
Drugi gracz ma parzystą liczbę prób (zwykle 10). W każdej próbie gracz podejmuje próbę
odgadnięcia
kodu wybranego przez przeciwnika. Pierwszy gracz ocenia próbę drugiego
gracza za pomocą białych i czarnych pionków. Za każdy pionek we
właściwym kolorze i na właściwej pozycji przyznaje czarny pionek. Za
każdy pionek we właściwy kolorze, ale na niewłaściwej pozycji przyznaje
biały pionek. Następnie drugi gracz ma prawo podjąć kolejną próbę.
Zadanie: zaimplementować jeden krok
algorytmu grającego w MasterMind. Zaimplementujemy algorytm, który trzyma zbiór możliwych jeszcze
układów.
Zgadywanie polega na wybraniu ze wszystkich możliwych jeszcze układów takiego, który
najlepiej dzieli ten zbiór (generuje podział minimalizujący wielkość
największego zbioru możliwych układów po zapytaniu). Przy parametrach standardowego
MasterMinda
taki algorytm radzi sobie bez problemu.
Laboratorium
- Uruchom programy Zagadka.java i Zagadka2.java.
Wyjaśnij, dlaczego programy tak się zachowują. Co trzeba zmienić, żeby
programy zachowywały się zgodnie z oczekiwaniami autora?
- Anagramy to słowa, które składają się z tych samych liter, ale w różnej
kolejności. Napisz program, który dla danej listy słów wypisze wszystkie
grupy anagramów pojawiające się na tej liście.
- Napisz własną implementację listy wraz z iteratorem. Twoja lista powinna mieć nastepujące operacje:
- dodawanie nowego elementu,
- rozmiar,
- test niepustości,
- iterowanie przy pomocy pętli foreach.
Wskazówki:
- Pętlą foreach można iterować po obiektach implementujących interfejs Iterable.
- Do implementacji iteratora trzeba użyć klas wewnętrznych (ang. inner classes). Klasa wewnętrzna ma dostęp do prywatnych składowych otaczającego obiektu.
- Warto przeczytać rozdział o klasach wewnętrznych z tutorialu na stronie Oracle.
- Ściągawkę, jak napisać własny iterator można znaleźć w klasie java.util.AbstractList. W Eclipse trzeba mieć podpięte źródła Javy.
Praca domowa nr 11 (dodatkowa)
Do wyboru: zadanie 2 lub zadanie 3.