Jak zapewne teraz, istnieje 2339 rozwiązań pentomino w siatce 6x10. Istnieją różne schematy znakowania dla 12 pentominoów, dwa z nich pokazano na poniższym obrazku:
Źródło zdjęcia: Wikipedia
Na potrzeby bieżącego zadania powiemy, że znormalizowane rozwiązanie pentomino to rozwiązanie, które wykorzystuje drugi schemat znakowania (Conwaya).
Przykład:
O O O O O S S S Z Z
P P R R S S W W Z V
P P P R R W W Z Z V
U U X R T W Y V V V
U X X X T Y Y Y Y Q
U U X T T T Q Q Q Q
Kawałek z 5 kwadratami z rzędu jest oznaczony literami O
, zgodnie ze schematem. To samo dotyczy wszystkich elementów.
Zadanie:
Biorąc pod uwagę rozwiązanie pentomino 6x10, w którym kawałki są oznaczone losowym sheem, znormalizuj je, aby wszystkie kawałki były oznaczone w schemacie znakowania Conwaya. Musisz rozpoznać elementy i oznaczyć każdy kwadrat danego elementu symbolem tego elementu.
Wejście:
Rozwiązanie, które należy znormalizować w dowolnym dogodnym dla Ciebie formacie, na przykład:
Ciąg wieloliniowy
Lista ciągów
Lista list znaków
i tak dalej
Wynik:
To samo rozwiązanie (wszystkie pozycje i orientacja sztuk zachowane), ale każda sztuka jest oznakowana zgodnie ze schematem znakowania Conwaya. Uwaga: Dane wyjściowe MUSZĄ BYĆ WYDRUKOWANE jako siatka znaków 6x10. Wiodące i końcowe znaki nowej linii i spacje są dozwolone. Możesz także wydrukować spację między znakami (ale nie puste linie), jak w powyższym przykładzie.
Przypadki testowe:
1. Wejście:
6623338888
6222344478
66A234BB70
1AAA94B770
11A99BB700
1199555550
Wynik:
UURTTTQQQQ
URRRTVVVSQ
UUXRTVZZSY
PXXXWVZSSY
PPXWWZZSYY
PPWWOOOOOY
2. Dane wejściowe:
45ookkkk00
455ooogk00
4a55gggdd0
4aaa3gnnd.
4am333ndd.
mmmm3nn...
Wynik:
OWSSQQQQPP
OWWSSSRQPP
OTWWRRRUUP
OTTTXRZZUV
OTYXXXZUUV
YYYYXZZVVV
Kryteria wygranej:
Najkrótsze rozwiązanie w bajtach w każdym języku wygrywa. Nie zniechęcaj się językami golfa. Wyjaśnienia algorytmów i implementacji są mile widziane.
źródło
Odpowiedzi:
APL (Dyalog Classic) ,
545350 bajtówWypróbuj online!
Oblicz niezmiennik dla każdego pentomina na wejściu: zmierz (∆x, ∆y) od każdego z jego kwadratów do środka ciężkości, weź abs (∆x) i abs (∆y), zsumuj składniki x i osobno y składniki i pomnóż dwie sumy. Daje to 12 wyraźnych wyników. Następnie znajdź indeks niezmiennika każdego pentomina w posortowanym zbiorze wszystkich niezmienników. Zamień 0 na
'O'
, 1 na'X'
, 2 na'R'
itp.źródło
Galaretka , 37 bajtów
Pełny program pobierający listę ciągów (ponieważ musimy wydrukować - w przeciwnym razie usuń końcowy
Y
ciąg, a masz monadę pobierającą listę liczb lub znaków, która zwraca listę list znaków).Wypróbuj online!
W jaki sposób?
Wierzę, że działa to przy użyciu tej samej kategoryzacji pentominos, co rozwiązanie APN ngn , choć w nieco inny sposób (również nie znam APL, więc nie jestem pewien, jak podobna jest metoda poza kategoryzacją).
(Pamiętaj, że
“æṂ⁾+’Œ?¤+78Ọ
to tylko jednobajtowe zapisywanie“XRPTZWUYSVQO”
!)źródło
Wolfram Language (Mathematica) , 103 bajty
Pobiera dane wejściowe jako listę list znaków.
Wypróbuj online!
Główną ideą jest to, że dla każdego znaku na wejściu znajdujemy współrzędne, w których występuje, bierzemy kurtozę i sumujemy jej współrzędne. To daje nam niezmienność dla każdego elementu.
(Kurtoza jest jakimś najczęściej nieistotnym operatorem w statystykach - kluczem jest to, że pod translacją jest niezmienna, podczas gdy odbicie i obrót mogą co najwyżej zmienić kolejność współrzędnych. Sumujemy współrzędne, więc niezmiennik nigdy się nie zmienia).
W każdym razie, oprócz dziwnego niezmiennika, to rozwiązanie jest podobne do pozostałych: sortujemy postacie i elementy według każdego niezmiennika, a następnie zastępujemy każdy znak odpowiadającym mu znakiem
"UPSWZVRTQXYO"
: elementów posortowanych według sumy kurtozy.Wreszcie
""<>Riffle[...,"\n"]
jest kod drukuj jako siatkę.źródło
Sort@Variance
miejsceTr@Kurtosis
i prawdopodobnie więcej osób słyszało o wariancji. AleTr@Variance
nie działa, ponieważ kilka pentomino (takich jak P i X) ma tę samą sumę wariancji x i wariancji y. Przeszukałem więc dokumentację Mathematiki w poszukiwaniu czegoś bardziej wymyślnego.Python 2 , 191 bajtów
Wypróbuj online!
Pobiera wielowierszowy ciąg z końcowym znakiem nowej linii i wykonuje sześć zagnieżdżonych list.
Wersja bez golfa
źródło