Udowodniono, że następujące 13 kwadratowych kafelków Wanga zawsze układa aperiodycznie płytkę . Oznacza to, że gdy kwadraty są ułożone w siatkę ze wszystkimi sąsiadującymi bokami tego samego koloru, tłumaczenie wzoru nigdy nie będzie pasować do siebie.
Każdą płytkę będziemy reprezentować tekstowo siatką 3 × 3 wypełnioną spacjami w środku i rogach, a liczby od 1 do 5 zamiast kolorów czerwonego, zielonego, niebieskiego, żółtego, szarego, na krawędziach:
2 2 2 1 1 1 4 3 2 2 4 3 2
1 2 1 3 2 3 2 1 3 1 3 2 4 4 4 4 4 5 4 5 5 5 5 5 5 4
3 2 3 2 3 2 1 2 1 4 1 2 2
Cel
Twoim zadaniem jest napisanie programu, który przyjmie szerokość i wysokość i wyświetli prawidłową siatkę płytek Wanga o tych wymiarach. Prawidłowe płytki to takie, w których wszystkie sąsiadujące krawędzie płytek mają ten sam kolor (lub numer). Najmniejszy program w bajtach wygrywa.
Dane wejściowe powinny pochodzić z argumentów stdin lub wiersza poleceń, a dane wyjściowe powinny przejść do stdout. Dokładny format wejściowy może być dowolny, w miarę oczywisty, jak >>> wangtiler 3 2
. Szerokość i wysokość są zawsze dodatnimi liczbami całkowitymi.
Przykład (szerokość = 3, wysokość = 2)
Zauważ, że kiedy układamy kafelki tekstowe, sąsiednie krawędzie tworzą niezbędne zbędne pary cyfr:
1 2 1
2 11 22 1
2 3 2
2 3 2
4 55 55 4
1 2 2
(To NIE jest właściwy format wyjściowy.)
Możemy skompresować je poziomo i pionowo, aby uzyskać:
1 2 1
2 1 2 1
2 3 2
4 5 5 4
1 2 2
Ten skompresowany format jest właściwym formatem wyjściowym, którego musisz użyć. Linie nieparzyste muszą zawierać spację końcową.
Premia graficzna
Zamiast wyświetlać tekst, program może wyświetlać obraz siatki sąsiadująco. Płytki graficzne muszą składać się z czterech trójkątów 45-45-90 ułożonych w kwadrat i używać pięciu łatwo rozpoznawalnych kolorów, takich jak płytki powyżej. Czarne obramowania nie są wymagane. Płytki graficzne muszą mieć rozmiar co najmniej 32 x 32 piksele. Nie stosuje się do nich „kompresji”.
Przykładowy obraz bonusowy: (ta sama siatka jak w powyższym przykładzie)
Bonus jest wart minus 150 bajtów.
Notatki
- Musisz użyć tego zestawu 13 płytek.
- Płytek nie można obracać.
- Kafelki mogą pojawiać się dowolną liczbę razy (w tym żadną).
- Możesz założyć, że prawidłowe kafelki o dowolnych wymiarach są możliwe.
źródło
Odpowiedzi:
GolfScript, 200 znaków
Wersja ASCII bez grafiki. Podaj dane wejściowe STDIN - spróbuj tutaj . Kod wykorzystuje proste podejście do cofania i wypełnia spację linia po linii.
Przykłady:
Premia graficzna, wynik 122, 272 znaków - premia 150
Ten sam podstawowy kod z innym formatowaniem wyjściowym. Dane wyjściowe to obraz w formacie PPM (tzn. Po prostu przekieruj dane wyjściowe do pliku
image.ppm
). Kolory są nieco inne niż płytki w pytaniu, ale wyraźnie można je odróżnić (1-> niebieski, 2-> zielony, 3-> cyjan, 4-> czerwony, 5-> magenta).Przykład 16x12:
źródło
Python (565-150 = 415)
Przy okazji ... wydaje się, że nie możemy naiwnie decydować o kolejnym kafelku po lewej i górnej płytce. Istnieje pewna kombinacja płytek, które będą do siebie pasować.
To rozwiązanie wypełnia lewe> prawe, górne> dolne brutalne siły poprzez wszystkie możliwe kombinacje i ścieżki powrotne, jeśli płytka nie może się zmieścić.
Więcej informacji na temat 13 kafelków: aperiodyczny zestaw 13 kafelków Wanga
Szerokość i wysokość są określone przez
W
iH
Czerwony, zielony, niebieski, żółty i Noir określony przez
R
,G
,B
,Y
iN
Wydajność. Nie faktyczna kolorystyka ... bo zbyt rażąca. Może to spowodować kilka ciekawych wzorów wystroju wnętrz ...:
źródło
Haskell, 208 bajtów
Żadnych poszukiwań, tylko matematyka. Przykładowy przebieg: podany
(8,5)
na stdin, wyjściaUruchom online w Ideone
źródło