Języki programowania cz. 3b –
Transkrypt
Języki programowania cz. 3b –
Języki programowania cz. 3b – Zadania projektowe nr. 2 – grupa A (2016/17) 1. Zaimplementuj predykat czy_graficzny( lista,odp ), stwierdzający, czy lista tworzy ciąg graficzny (7 pkt.). 2. W wariancie gry Nim mamy 3 stosy kamieni. Dwóch graczy na przemian zdejmuje kamienie ze stosów i ten który wykona ostatni ruch (po jego ruchu nie zostaną żadne kamienie, lub drugi gracz nie może wykonać dozwolonego ruchu) przegrywa. Zaimplementuj predykat czy_wygrywa( A,B,C ) stwierdzający, czy gracz, który wykonuje ruch dla odpowiednio A, B i C kamieni na stosach ma strategię wygrywającą. (8 pkt). Dozwolone ruchy dla graczy to (według numeru grupy projektowej): 1. zdjęcie jednego lub dwóch kamieni z dowolnego stosu, 2. zdjęcie dwóch lub trzech kamieni z dowolnego stosu, 3. zdjęcie jednego kamienia z dowolnego stosu lub dwóch kamieni z różnych stosów, 4. zdjęcie jednego kamienia z dowolnego stosu i jednego kamienia z pierwszego stosu lub dwóch kamieni z dowolnego stosu, 5. zdjęcie po jednym kamieniu z każdego stosu lub zdjęcie dwóch kamieni z dowolnego stosu, 6. zdjęcie dwóch kamieni z drugiego stosu lub jednego kamienia z dowolnego stosu, 7. zdjęcie jednego kamienia z dowolnego stosu i przełożenie jednego kamienia ze stosu pierwszego na drugi lub zdjęcie dwóch kamieni z dowolnego stosu, 8. zdjęcie jednego kamienia z dowolnego stosu i przełożenie dwóch kamieni ze stosu pierwszego na trzeci lub zdjęcie dwóch kamieni z dowolnego stosu, 9. przełożenie jednego kamienia z pierwszego stosu na drugi i zdjęcie po jednym kamieniu z każdego stosu lub zdjęcie dwóch kamieni z drugiego stosu, 10. zamiana miejscami stosów drugiego i trzeciego i zdjęcie jednego kamienia ze stosu pierwszego, lub zdjęcie jednego kamienia z dowolnego stosu i jednego ze stosu trzeciego. Gracz A ma strategię wygrywającą, gdy niezależnie od ruchów przeciwnika, odpowiednio wybierając posunięcia, zawsze wygra. Dla danego układu kamieni gracz A może przejść do takiego układu, że niezależnie od tego, jaki ruch wybierze gracz B, gracz A wygra. Sytuację taką można przedstawić w postaci drzewa (Si to kolejne stany gry). Gdy gracz A wykonuje ruch, wystarczy, że tylko jeden z nich prowadzi do wygranej (LUB). Gdy gracz B wykonuje ruch – wszystkie jego ruchy muszą prowadzić do wygranej A (AND; gdyby było inaczej, B mógłby przejść do stanu gry, w którym A nie wygrywa). Projekty realizowane są w grupach 2, 3 albo 4 osobowych grupach projektowych. Na zajęciach proszę się podzielić na grupy, którym zostaną losowo przydzielone numery. Każdy ze studentów przesyła swoją wersję rozwiązanych zadań na adres: [email protected] Proszę koniecznie zatytułować pocztę w następujący sposób: JP_Z2_GX_PY_INDEKS gdzie: GX – X - numer grupy dziekańskiej, przykładowo: 1 - grupa nr. 1 PY – Y numer części projektowej: 3 to Prolog, a 4 to Haskell. INDEKS – sześcioliterowy numer indeksu, przykładowo: 103057 Przykład poprawnie zatytułowanego maila: JP_Z2_G2_P3_103057 – drugie zadanie projektowe z Prologa, studenta z drugiej grupy dziekańskiej o numerze indeksu 103057.