Wprowadzenie
Nine Mens's Morris (zwany także Mills) to gra planszowa dla dwóch graczy, w którą gra się na następującej planszy (zdjęcie pochodzi z połączonej strony Wikipedii):
Każdy gracz ma 9 mężczyzn w kolorze czarno-białym. Konkretne zasady nie są ważne dla tego wyzwania, ale jeśli jesteś zainteresowany , odwiedź stronę Wikipedii .
Wyzwanie
Biorąc pod uwagę siatkę jako dane wejściowe, która reprezentuje określony stan płyty, wypisz całkowitą liczbę frezów za m
pomocą 0<=m<=8
.
Trzej mężczyźni tego samego koloru tworzą młyn, gdy znajdują się w prostym rzędzie połączonych punktów. b2
aby f2
nie jest młyn, ponieważ ludzie są w innym kolorze. Również d2
do d5
nie tworzą młyn ponieważ trzy punkty muszą być podłączone.
Tablica na powyższym obrazku zawiera na przykład dwa młyny. Jeden od f2
do f6
i jeden od e3
doe5
.
Wkład
Tablica jest reprezentowana jako siatka 2D z 24 punktami, które są połączone, jak pokazano na powyższym przykładzie. W przykładzie użyto liter oda-g
dla kolumn i liczby od 1-7
dla wierszy, ale można wybrać dowolny rozsądny format wejściowy, pod warunkiem, że odwzoruje on 24 unikalne współrzędne do jednego z następujących stanów:
- Pusty
- Podjęte przez czerń
- Podjęte przez biały
Konkretne przedstawienie zależy od ciebie. Nie jesteś ograniczony do „b” lub „w” dla kolorów.
Poza tym Twoje dane wejściowe mogą nie zawierać żadnych dodatkowych informacji.
Dodatkowe uwagi
- Nie musisz mapować punktów według jakichkolwiek wartości. Jeśli chcesz wziąć dane wejściowe jako tablicę 2D, to też dobrze. Należy jednak pamiętać, że nie wszystkie punkty są wykorzystywane i należy wziąć pod uwagę połączenia między nimi.
- Dane wejściowe mogą być puste, w takim przypadku musisz podać zero (pusta tablica -> brak młynów).
- Ponieważ każdy gracz ma 9 mężczyzn, wkład nigdy nie będzie zawierał więcej niż 18 zdobytych punktów.
- Możesz pominąć puste punkty na wejściu, a zatem tylko te, które są zajęte.
- Dane wejściowe można zamówić w dowolny sposób. Nie możesz polegać na konkretnym zamówieniu.
- Możesz założyć, że dane wejściowe zawsze będą prawidłowe. Oznacza to, że nie będzie więcej niż 9 mężczyzn w każdym kolorze i że każdy punkt będzie niepowtarzalny.
Zasady
- Wyjaśnij, jakiego formatu wejściowego używasz w swoim rozwiązaniu. Zaleca się podanie przykładowego przebiegu programu.
- Dozwolona funkcja lub pełny program.
- Domyślne reguły wejścia / wyjścia.
- Obowiązują standardowe luki .
- To jest golf golfowy , więc wygrywa najmniej bajtów. Tiebreaker to wcześniejsze zgłoszenie.
Przypadki testowe
Format wejściowy tutaj to lista krotek ze współrzędnymi jak w powyższym przykładzie jako pierwszym elementem i stanem drugiego elementu punktu. Punkt oznaczony kolorem białym jest oznaczony jako „w”, a punkt oznaczony kolorem czarnym jako „b”. Wszystkie pozostałe punkty są pomijane i są puste.
[(„a4”, „w”), („b2”, „b”), („b4”, „b”), („c4”, „b”), („d1”, „w”) , („d2”, „w”), („e3”, „w”), („e4”, „w”), („e5”, „w”), („f2”, „b”) , („f4”, „b”), („f6”, „b”), („g4”, „w”)] -> 2 [(„a1”, „b”), („a4”, „b”), („a7”, „b”), („b4”, „b”), („c4”, „b”) , („d3”, „w”), („d2”, „w”), („d1”, „w”)] -> 3 [] -> 0 [(„b4”, „b”), („a4”, b ”), („ c4 ”, w”)] -> 0 [(„b4”, „b”), („a4”, b ”), („ c4 ”, b”)] -> 1 [(„a1”, „b”), („a4”, „b”), („a7”, „b”), („b2”, „b”), („b4”, „b”) , („b6”, „b”), („c3”, „b”), („c4”, „b”), („c5”, „b”), („e3”, „w”) , („e4”, „w”), („e5”, „w”), („f2”, „w”), („f4”, „w”), („f6”, „w”) , („g1”, „w”), („g4”, „w”), („g7”, „w”)] -> 8
Happy Coding!
źródło
d3
id5
nie są połączone. Przepisy mówią:Three men of the same color form a mill when they are in a straight row of connected points.
. Dodałem kilka przykładów w tej sekcji, aby to wyjaśnić, dziękuję za komentarz!Odpowiedzi:
APL (Dyalog Classic) ,
2625 bajtów-1 dzięki FrownyFrog
Wypróbuj online!
Argumentem jest tablica 3x3x3
1
(czarna),¯1
(biała) i0
(pusta). Pierwszy wymiar znajduje się na głębokości zagnieżdżenia koncentrycznych kwadratów. Pozostałe dwa wymiary znajdują się wzdłuż osi pionowej i poziomej.Mamy młyn, ilekroć sumowanie wzdłuż dowolnej osi daje a
3
lub¯3
, z wyjątkiem tego, że musimy odrzucić cztery rogi podczas sumowania wzdłuż pierwszej osi.{}
jest funkcją z niejawnym argumentem⍵
↓⍵
jest podzielony - w naszym przypadku zamienia sześcian 3x3x3 w macierz 3x3 zagnieżdżonych wektorów o długości 3⍵⍪↓⍵
bierze oryginalny sześcian i przykleja macierz 3x3 3 wektorów poniżej, więc otrzymujemy mieszany układ skalarów i wektorów 4x3x3+/
sumy wzdłuż ostatniej osi; ma to połączony efekt sumowania oryginalnego sześcianu wzdłuż ostatniej osi (+/⍵
) i sumowania go wzdłuż środkowej osi ze względu na podział, który zrobiliśmy (+/↓⍵
)Teraz musimy zająć się specjalnym przypadkiem dla pierwszej osi.
+⌿⍵
sumuje wzdłuż pierwszej osi, zwracając macierz 3x34 2⍴
ale nie możemy liczyć narożników, dlatego przekształcamy go w macierz 4x2 w następujący sposób:teraz interesuje nas tylko ostatnia kolumna (
BDFH
), więc używamy idiomu⊢/
,
konkatenujeBDFH
z matrycą, którą uzyskaliśmy wcześniej dla 2. i 3. osi (BDFH
a zarówno matryca ma wiodący wymiar 4)∊
spłaszcza wszystko, co dotychczas uzyskaliśmy, w pojedynczy wektor|
przyjmuje wartości bezwzględne{ }∩≢
filtruje tylko trójki - długość (≢) wejścia wynosi zawsze 3≢
liczy jeźródło
≢{|∊(+/⍵⍪↓⍵),⊢/4 2⍴+⌿⍵}∩≢
jest o jeden krótszy :)JavaScript (ES6),
276228125117105 bajtów(powyższe zawiera niektóre niedrukowalne znaki ascii, które nie pojawią się tutaj, więc jest wersja bez tej,
btoa
którą można skopiować i uruchomić)Dzieli ciąg odniesienia na trójki literowe, które pasują do kluczy grupy młyna. Dane wejściowe mają postać obiektu, w którym kluczami są litery
a-x
, zaczynające się od lewego dolnego rogu i kończące się w prawym górnym rogu, przesuwając się najpierw od lewej do prawej. Wartości dotyczą1
bieli,-1
czerni i0
pustego miejsca.Przykład
Te przykłady pochodzą z przykładów OP, przekonwertowanych na klucz literowy i obiekt wartości liczbowych. Pierwszy pochodzi z przykładowego obrazu, a pozostałe z przykładowego zestawu.
źródło
atob
.btoa
. Znalazłem też kilka innych ulepszeń, które jeszcze bardziej go obniżają.Mathematica,
217131 bajtówChociaż jestem pewien, że nie jest to szczególnie konkurencyjne, oto wpis dla ciebie.
Przykład wprowadzania:
Umożliwianie nazw współrzędnych jednego znaku w trywialny sposób daje 51 znaków, dzięki czemu jest to rozwiązanie 166-bajtowe. Nazywanie graczy 1 i 2 zamiast „w” i „b” golfuje od 17 kolejnych postaci.
Więc rozumiemy
źródło
1
i2
. użyty przykładw
ib
jestem pewien, że nie jesteśmy do tego ograniczeni.APL (Dyalog Unicode) , 50 bajtów
„Rozwiązanie obiektów”
Chociaż jest dłuższy (29 znaków) niż rozwiązanie @ ngn , stosuje zupełnie inne podejście: Dane wejściowe mają taką samą ogólną strukturę jak to rozwiązanie, ale wszystkie gniazda są reprezentowane jako obiekty. Puste pola (w tym nieistniejąca środkowa kolumna) muszą być pustymi obiektami. podczas gdy wszyscy czarni mężczyźni muszą być odniesieniami do obiektu „czarnego człowieka”, a wszyscy biali mężczyźni muszą być odniesieniami do obiektu „białego człowieka”. Wszystkie obiekty mogą ewentualnie mieć piękny D WYŚWIETLACZ F orm s dla odczytu, a więc kolumna środkowa może być opcjonalnie wykonane niewidoczne.
Wypróbuj online!
+/
suma1=(
…)
Te w≢¨(
…)
Wysokość …,
zniszczony (spłaszczony)∪/
unikalne zestawy w poprzek,
połączony z∪⌿⍤2
unikalne ustawienia,(
…)
Połączony z⊢/
skrajna prawa kolumna4 2⍴
, przekształcony w cztery rzędy i dwie kolumny,∪⌿
unikalne zestawy kolumnoweSzczycie operator, jak dostarczane z AGL (
ä
) przyniesie długość do 27 znaków .źródło