Programowanie logiczne Pracownia 5

Transkrypt

Programowanie logiczne Pracownia 5
Programowanie logiczne
Pracownia 5
Zajęcia 12,13
Sprawdzaczka powinna pojawić się w poniedziałek
W zadaniach z tej listy wskazane jest użycie więzów.
Zadanie 1.(1+2+0pkt) Napisz program rozwiązujący problem N hetmanów.
Zadanie 2. (2+1+2pkt) Napisz program rozwiązujący zagadki kryptoarytmetyczne. Zagadki
podawane są w postaci: atom1 + atom2 = atom3, każdy atom składa się z literek (oznaczających zmienne). Predykat aryt(Zagadka,Rozwiazanie) w pierwszym argumencie powienien oczekiwać zagadki (na przykład send+more=money, w drugim powinien zwracać listę par (litera,
jej-wartość-w-rozwiązaniu).
Rozwiązanie zagadki to przypisanie literom cyfr od 0 do 9, przy czym pierwsza litera w słowie
nie może być równa 0, a dwie różne litery nie moga mieć przypisanej tej samej cyfry, aby powstały
trzy liczby dziesiętne, spełniające stanowiące treść zagadki równanie.
Zadanie 3.(14 = (6+6+2)pkt) Napisz rozwiazanie
problemu obrazków logicznych. W łami,
główce tej zaczerniamy pewne kratki na kartce o danym wymiarze. Każdy rząd oraz każda kolumna
kartki opisana jest listą liczb, które opisują wielkości ciągłych bloków zbudowanych z czarnych
kwadracików. Przykładowo ciąg [1,2,3] opisuje następujące rozstawienia bloków:
...#..##..###.
#.##.###......
......#.##.###
a nie opisuje poniższych
...###.....###
..##.#.###....
Napisz predykat nono(OpisRzędów,OpisKolumn,B), gdzie OpisRzędów oraz OpisKolumn są listami
liczb przedstawiającymi dopuszczalne ustawienia we wszystkich rzędach i kolumnach, B natomiast
powinna się zunifikować z listą list, których elementami są zera i jedynki. Kolejne listy w B opisują
kolejne wiersze rozwiązania, 0 oznacza pole puste, 1 — zaczernione.
Uwaga! W tym zadaniu punkt za poprawność przyznaje prowadzący, aby program był zaliczony
wszystkie testy powinny być wykonane poprawnie (co będzie łatwe do zaobserwowania).
Zadanie 4.(10=3+3+4pkt) Rozwiąż zadanie o wieżowcach wykorzystując więzy. W tym wariancie będą inne dane testowe, dodatkowy warunek: zadanie jest niezaliczone, jeżeli za efektywność
przyznane jest mniej niż połowa możliwych punktów.
Czyli mamy dwa zadania, o tej samej treści. Wymagamy, by w jednym z rozwiązań NIE BYŁO
więzów. W drugim (z tej listy) mogą być, dane testowe będą tak dobrane, że najprawdopodobniej nie
da się ich przejść nie używając więzów..
Poniższe zadania zostaną jedynie zaanonsowane, a będą sprawdzane na 15 zajęciach. Są z nimi
związane konkursy.
Zadanie 5.(14pkt) Napisz program, (w wybranym dialekcie Prologa, być może z więzami), który
zapełnia tradycyjną szachownicę (8 × 8) figurami szachowymi, zgodnie z następującymi zasadami:
i) Na szachownicy znajduje się 8 hetmanów, 8 wież, 14 gońców, co najmniej 20 króloskoczków
oraz pewna liczba pionów.
ii) Na każdym polu znajduje się dokładnie jedna figura.
iii) Króloskoczek to albo król, albo skoczek.
iv) Gdyby usunąć wszystkie figury prócz hetmanów, to żaden hetman nie może zaatakować innego
hetmana. Podobnie dla wież, gońców, skoczków, króli oraz pionów.
v) Program powinien skończyć swoje działanie w ciągu piętnastu minut.
Gdyby się okazało, że takie ustawienie nie istnieje, należy znaleźć ustawienie zgodne z tymi zasadami,
które zawiera jak najwięcej figur, przy czym figury należy rozstawiać zgodnie z kolejnością w jakiej
wymieniane są w zadaniu. Przykładowo rozwiązanie, w którym rozmieszczone jest 8 hetmanów, 7
wież, 14 gońców jest warte jest mniej, co rozwiązanie rozmieszczające 8 hetmanów i 8 wież.
Zadanie 6.(14pkt) Kółko i krzyżyk z ciążeniem jest grą rozgrywaną na planszy o wysokości 6 i
szerokości 7. Gracze na zmianę umieszczają swoje piony na planszy, wygrywa ten, który jako pierwszy umieści na planszy 4 sąsiednie piony w rzędzie, kolumnie lub po przekątnej. Piony umieszcza się
w kolumnach w ten sposób, że pomiędzy pionem ostatnio umieszczonym w tej kolumnie a pionem
właśnie umieszczanym nie ma wolnego miejsca. Pierwszy pion w dane kolumnie należy umieścić w
najniższym rzędzie.
Napisz program grający w tę grę, który wykorzystuje algorytm minimaksowy z obcięciami typu
α − β.
Konkursy
Konkursy przeprowadzone zostaną wspólnie, dla wszystkich grup. Zwycięzcy konkursów nagradzani
są dodatkowymi punktami. Zdobywca drugiego miejsca otrzymuje połowę punktów za zwycięstwo.
W przypadku pierwszego (lub drugiego miejsca ex-equo) punkty dzielone są między zawodników o
równej pozycji1 .
1. Szachownica: wygrywa osoba, której program uzyska najbardziej wartościowe ustawienie. Dodatkowo, w stosunku do zadania, będziemy odróżniać króle i skoczki: wśród ustawień o tej
samej liczbie hetmanów, wież, gońców i króloskoczków, za lepsze uznamy to, w którym jest
więcej skoczków.
Jeżeli więcej zawodników uzyska takie same ustawienie wówczas przeprowadzana jest dogrywka: limit czasowy pozostaje bez zmian, zmieniamy planszę na 20x20, oczywiście wież
i hetmanów ma być po 20, gońców 38. Pozostałe zasady bez zmian. Jeżeli i ta runda nie
przyniesie rozstrzygnięcia, wówczas decyduje czas (mierzony na tym samym komputerze). 2
czasy różniące się o mniej niż 20% mniejszego z nich nazwiemy elementarnie równoważnymi.
Dla danego zbioru czasów definiujemy relację równoważności jako przechodnie domknięcie
elementarnej równoważności.
Zawodnicy, którzy osiągnęli równoważne czasy traktowani są tak samo.
Punkty za pierwsze, drugie i trzecie miejsce są równe (16,8,4)
2. Kółko i krzyżyk. Obowiązują następujące zasady:
(a) Pojedynek między dwoma programami składa się z dwóch rund: w pierwszej zaczyna
program A, w drugiej program B.
(b) Aby program stanął do konkursu, musi on zostać zaakceptowany przez sprawdzaczkę, na
wybranym przez zawodnika komputerze.
(c) Pojedynek wygrywa ten program, który wygra więcej rund.
(d) Jak nikt nie wygra to jest remis.
W przypadku większej niż 4 liczby zawodników turniej będzie miał część eliminacyjną oraz
finał. Eliminacje przeprowadzane są metodą pucharową (lub inną ustaloną podczas zajęć), w
finale programy grają każdy z każdym, zdobywając 1 punkt za remis i 3 punkty za zwycięstwo.
Punkty za pierwsze, drugie i trzecie miejsce są równe (16,8,4)
1 Jeżeli
2 zawodników zdobędzie pierwsze miejsce to oczywiście dzielą się punktami za pierwsze i drugie miejsce
2