Fillomino to układanka, w której wypełniasz siatkę poliominoami . Każdy poliomino jest obszarem sąsiadujących komórek. Reprezentacja siatki pokazuje, jaki rozmiar poliomino pokrywa każdą komórkę. Na przykład pentomino (5) byłoby pokazane jak 5
w każdej z pięciu sąsiadujących komórek (patrz poniżej). Dwa poliomino o tym samym rozmiarze nie mogą mieć granicy, ale mogą graniczić po przekątnej.
Dla każdej układanki zaczynasz z kilkoma dawcami i musisz wypełnić pozostałe komórki. Prosta przykładowa łamigłówka i rozwiązanie:
Twoje zadanie: mając kwadratową łamigłówkę, rozwiąż ją i wyślij odpowiedź. Dane wejściowe mogą być przesyłane przez stdin, pojedynczy argument wiersza poleceń lub plik tekstowy. Dane wejściowe będą podawane jako liczby całkowite n
, po których będą następować n
wiersze n
cyfr. Puste komórki zostaną podane jako kropki ( .
). W powyższej przykładowej układance byłoby to:
5
3..66
5.4.6
.54.6
.1.6.
..312
Dane wyjściowe to rozwiązana łamigłówka podana w n
wierszach n
cyfr do konsoli lub pliku tekstowego:
33366
55446
55466
51462
33312
Jeśli układanka nie jest poprawna, wyjdź 0
. Układanka może być nieprawidłowa, jeśli dane wejściowe są zniekształcone lub nie ma rozwiązania. Jeśli istnieje wiele rozwiązań, możesz wypisać jedno lub wszystkie z nich.
Ponieważ każda komórka jest reprezentowana przez jedną cyfrę, wszystkie łamigłówki będą się składały z rozmiaru poliomino 9
i tylko poniżej. Jeśli nie można rozwiązać bez większych poliominoów, należy uznać go za nieważny.
Prawidłowe odpowiedzi rozwiążą każdą zagadkę, a nie tylko wypisują rozwiązania przypadków testowych. Brak zewnętrznych zasobów, czy to online, czy lokalnych. Jeśli zdarzy się, że istnieje język z wbudowaną funkcją rozwiązywania problemów fillomino, nie możesz go użyć. Krótko mówiąc, graj uczciwie .
Przypadek testowy:
Wejście:
9
..21.3..5
.5...5..5
.1.44.334
...53.4..
2.3.3..5.
1.15.5.15
..45..1..
.24.53.53
....2....
Wyjście (możliwe rozwiązanie):
322133315
355445555
315443334
235531444
233135551
141535515
344553155
324553553
321223133
Pamiętaj, że niektóre poliominy nie mają podanych liczb, a niektóre mają więcej niż jedną. Jest nie relacja jeden-do-jednego między liczbą Givens i liczby polyominoes.
Wynik to standardowy kod-golf, rozmiar programu w bajtach.
źródło
Odpowiedzi:
4882 znaków - Java
Niezbyt golfowe rozwiązanie (tzn. 4800 znaków to dużo lotttttttttt). Można by grać w golfa nieco więcej, ponieważ 1 lub 2 linie debugowania są nadal dostępne. Myślę, że mogę jeszcze trochę zredukować pod względem bezużytecznego / zoptymalizowanego kodu.
Nigdy wcześniej nie widziałem Polyominoes, czytam o tym, czym one są, i nie patrząc na rozwiązywanie alrogitmów, które właśnie stworzyłem (dość wolno).
Zasadniczo często korzysta z rekurencji ... Znajduje Polyomino, który jest niekompletny, próbuje go wykonać. Znajduje puste miejsce, Pętle 1-9 przez wszystkie kwadraty w kieszeni, ustawia tę kieszeń na tę wartość. Jeśli kieszeń jest kompletna, próbuje znaleźć inną kieszeń, a następnie powtarza się do końca. Nie mogłem zmusić go do pracy dla siatki o rozmiarze 9 ... Mam na myśli co najmniej jedną optymalizację, która mogłaby sprawić, że zadziała w rozsądnym czasie dla 9. Mogę spróbować to wkrótce wprowadzić.
źródło