Chcę tutaj wypróbować nową formę golfa kodowego. Podobnie jak w przypadku bonusów, nie wszystkie części wyzwania muszą zostać ukończone, ale każda odpowiedź musi implementować podzbiór o określonej wielkości (i istnieje rdzeń, który każda odpowiedź musi wdrożyć). Tak więc oprócz gry w golfa wyzwanie polega również na wybraniu zestawu funkcji, które dobrze do siebie pasują.
Zasady
Kingdom Builder to gra planszowa, rozgrywana na siatce heksów (spiczastych). Plansza składa się z czterech (losowych) ćwiartek, z których każda ma 10x10 komórek heksadecymalnych (więc pełna plansza będzie miała wymiary 20 x 20). Na potrzeby tego wyzwania każda komórka heksadecymalna zawiera albo wodę ( W
), albo górę ( M
) miasto (T
), zamek ( C
) lub jest pusta ( .
). Tak mógłby wyglądać kwadrant
. . W . . . . . . .
. M W W . . . . . .
. M . . W . . . T .
M M . W . . . . . .
. . M . W W . . . .
. . . . . W W W W W
. T . . . . . . . .
. . W . . C . . . .
. . W W . . . . M .
. . . . . . . M M .
Drugi rząd będzie zawsze przesunięty w prawo od pierwszego rzędu. Gracze1
do 4
można umieścić do 40 osiedli każdy na pustych komórek (po pewnych zasad, które będziemy ignorować do tego wyzwania). Możliwa plansza na końcu gry jest następująca:
3 3 W . . . 4 . 4 . . 2 W . 4 . . 4 . 4
3 M W W . 1 1 . . 4 2 W . 3 C 4 4 . . 4
3 M 2 2 W 1 1 1 T 3 2 W 4 3 . 1 4 . 4 .
M M . W 2 2 . . . 2 2 W 3 . 1 1 1 . . .
. 4 M . W W 2 2 2 2 W W 3 . 1 4 . T . .
. . . . . W W W W W . 3 C 1 . . 2 2 2 2
. T 1 1 1 1 . . 2 . . 4 . . . 2 2 M M M
4 . W 4 . C 4 4 . . . . . . 2 M M M M M
. 4 W W . . . 4 M . . W . W . 2 2 2 M M
. . . . . . . M M . . W W . . . . 2 M .
. . . 3 3 3 3 3 3 3 3 3 3 3 3 3 3 2 . 1
M 3 3 . . . . . . . . 4 . T 2 . 2 4 1 .
M M . C . 4 . 4 . . . . . 1 2 4 2 1 1 .
M . . 1 . 4 . . . . M M 1 2 . . 2 1 . .
. . . W 1 1 4 1 1 . . . 1 2 . . 2 W W W
. . 1 1 W 1 T . 1 1 1 1 T . . 2 W . 4 .
. 1 1 W . 3 3 . . . . . . . . 2 W 4 C 3
C 1 3 3 3 . 3 . 4 . 4 . 4 . . 2 W 1 1 M
4 3 3 4 . M 4 3 . . . . . . . 2 W . . .
. . . 4 . M M 3 . . 4 4 . 4 . 2 W W . .
Będziemy nazywać ćwiartki jak
1 2
3 4
Twoim zadaniem będzie zdobycie takiej tablicy. Jest jeden wynik podstawowy, który jest zawsze używany, i 8 wyników opcjonalnych, z których 3 są wybierane dla każdej gry. † Poniżej opiszę wszystkie 9 wyników i wykorzystam powyższą konfigurację jako przykład, ile punktów zdobędzie każdy gracz.
† W tej grze jest 10 punktów, ale pominę dwa, ponieważ nikt nie chce grać w golfa.
Podstawowy wynik. Gracz otrzymuje 3 punkty za każdy C
astle, obok którego znajduje się osada.Przykładowe wyniki: 18, 0, 15, 12.
Opcjonalne wyniki.
Gracz otrzymuje 1 punkt za każdy poziomy rząd, w którym ma co najmniej jedną osadę.
Przykładowe wyniki: 14, 20, 12, 16.
Dla każdego gracza znajdź poziomy rząd, w którym znajduje się większość jego osiedli (wybierz dowolny w przypadku remisu). Gracz otrzymuje 2 punkty za każdą osadę w tym rzędzie.
Przykładowe wyniki: 14 (wiersz 16), 8 (wiersz 4, 5 lub 6), 28 (wiersz 11), 10 (wiersz 1).
Gracz otrzymuje 1 punkt za każdą osadę budowaną obok
W
.Przykładowe wyniki: 13, 21, 10, 5.
Gracz otrzymuje 1 punkt za każdą osadę obok
M
góry.Przykładowe wyniki: 4, 12, 8, 4.
Policz osadę każdego gracza w każdej ćwiartce. Na kwadrant gracze z największą liczbą osad otrzymują po 12 punktów , gracze z drugą co do wielkości liczbą osad otrzymują po 6 punktów .
Przykładowe wyniki: 18 (6 + 0 + 6 + 6), 36 (12 + 12 + 0 + 12), 12 (0 + 0 + 12 + 0), 18 (12 + 6 + 0 + 0).
Dla każdego gracza określ kwadrant, w którym mają najmniejszą liczbę osad. Gracz otrzymuje 3 punkty za każdą osadę w tej ćwiartce.
Przykładowe wyniki: 18 (kwadrant 2), 0 (kwadrant 3), 15 (kwadrant 1 lub 2), 27 (kwadrant 3).
Gracz otrzymuje 1 punkt za każdą połączoną grupę osad.
Przykładowe wyniki: 7, 5, 6, 29.
Gracz otrzymuje 1 punkt za każde 2 osady w największej grupie połączonych osad.
Przykładowe wyniki: 4, 10, 8, 2.
Wyzwanie
Podobnie jak w grze , wybierzesz 3 opcjonalne wyniki i zdobędziesz planszę na podstawie wyniku podstawowego i tych trzech wyników. Twój kod powinien wygenerować listę 4 wyników. Istnieje jedno ograniczenie wyboru: pogrupowałem wyniki na 3 grupy, a ty musisz wdrożyć po jednej z każdej grupy:
- Zaimplementuj jeden z 1 i 2 .
- Zaimplementuj jeden z 3, 4, 5 i 6 .
- Zaimplementuj jeden z 7 i 8 .
Możesz napisać program lub funkcję, przyjmując dane wejściowe przez STDIN, argument wiersza poleceń, monit lub parametr funkcji. Możesz zwrócić wynik lub wydrukować go do STDOUT.
Możesz wybrać dowolny dogodny format listy / łańcucha 1D lub 2D dla danych wejściowych. Być może nie używać wykres z pełną informacją przylegania. Oto kilka dobrych lektur na siatkach heksadecymalnych, jeśli potrzebujesz inspiracji.
Dane wyjściowe mogą być również w dowolnym wygodnym, jednoznacznym formacie listy lub ciągu.
To jest kod golfowy, więc wygrywa najkrótsza odpowiedź (w bajtach).
Dalsze założenia
Możesz założyć, że ...
- ... każdy gracz ma co najmniej 1 osadę i nie ma więcej niż 40 osad każdego gracza.
- ... każdy kwadrant zawiera albo jedno miasto i dwa zamki, albo dwa miasta i jeden zamek.
- ... miasta i zamki są wystarczająco daleko od siebie, tak że żadna osada nie może przylegać do dwóch z nich.
Przypadki testowe
Nadal korzystając z powyższej planszy, oto poszczególne wyniki dla wszystkich możliwych wyborów mechanizmów oceniania:
Chosen Scores Total Player Scores
1 3 7 52 46 43 62
1 3 8 49 51 45 35
1 4 7 43 37 41 61
1 4 8 40 42 43 34
1 5 7 57 61 45 75
1 5 8 54 66 47 48
1 6 7 57 25 48 84
1 6 8 54 30 50 57
2 3 7 52 34 59 56
2 3 8 49 39 61 29
2 4 7 43 25 57 55
2 4 8 40 30 59 28
2 5 7 57 49 61 69
2 5 8 54 54 63 42
2 6 7 57 13 64 78
2 6 8 54 18 66 51