Tak myślałem, że to pytanie będzie, zanim w pełni je przeczytam.
Grupa golfistów wkracza do The Nineteenth Bite Pizzeria i zamawia pizzę. Ma nieregularny kształt, składa się z kwadratów jednostkowych. Twoim zadaniem jest pomóc im pokroić na identyczne plastry. Oznacza to, że plastry muszą mieć dokładnie ten sam kształt i rozmiar; mogą być obracane, ale nie odwracane / dublowane. Na przykład, jeśli są to elementy Tetris, muszą być tego samego rodzaju, nie można użyć zarówno elementu L, jak i J.
Wejście
W pierwszym wierszu zostanie podana liczba osób w grupie (zawsze liczba całkowita od 2 do 10 włącznie), a następnie prostokątna matryca znaków „” (spacja) i „#” reprezentujących pizzę. Wszystkie znaki „#” są połączone krawędziami. Gwarantowana liczba znaków „#” jest wielokrotnością liczby osób.
Wynik
Powinieneś wydrukować tę samą matrycę, a każdy znak „#” zastąpić cyfrą od 0 do n-1 (n oznacza liczbę osób). Każda cyfra powinna oznaczać plasterek. Kształt plastra należy połączyć kwadratowymi krawędziami. Numeracja plasterków nie musi być w żadnej określonej kolejności. Jeśli istnieje wiele sposobów krojenia pizzy, każdy z nich jest dopuszczalny.
Jeśli nie można pokroić pizzy zgodnie z wymaganiami, należy wydrukować ciąg „Brak pizzy dla Ciebie!” zamiast.
Punktacja
To jest kod golfowy. Twój wynik będzie liczbą bajtów w programie. Znaki będą liczone według ich kodowania UTF-8. Najniższy wynik wygrywa.
Przykłady
Wejście:
3
#
###
####
#
Wynik:
0
100
1122
2
Wejście:
4
###
# #
###
Wynik:
001
2 1
233
Wejście:
2
# #
######
Wynik:
No pizza for you!
Wejście:
5
#
####
#####
#####
#####
####
#
Wynik:
0
1000
21110
32221
43332
4443
4
Wejście:
4
#
####
######
#####
####
Wynik:
0
1000
111203
12233
2233
Wymagania
- Powinieneś napisać pełny program, który odczytuje ze standardowego wejścia i zapisuje na standardowe wyjście.
- Program musi być uruchamiany w systemie Linux przy użyciu ogólnodostępnego oprogramowania.
- Twój program powinien zakończyć każdy z powyższych przykładów w mniej niż 1 minutę na nowoczesnym komputerze.
- Brak standardowych luk.
źródło
Odpowiedzi:
Kod PHP,
1808971 bajtówSzybka i brudna implementacja w PHP. Najpierw brutalna siła wszystkich możliwych kształtów plastra, następnie brutalna siła wszystkich pozycji i orientacji plastrów.
Stosowanie:
cat pizza.txt | php pizza.php
Edycja: zmniejszono rozmiar kodu o ponad 45% poprzez przewijanie algorytmu za pomocą rekurencji zamiast zagnieżdżonych pętli. To jednak zjada pamięć (i pizzę ;-)). Pizza większa niż 8x8 prawdopodobnie zabraknie pamięci. Wariant z zagnieżdżoną pętlą może z łatwością obsługiwać dowolny rozmiar, ale jest dwukrotnie większy niż kod.
Niegolfowany, udokumentowany kod
Poniżej znajduje się udokumentowany, oryginalny kod. Aby zachować zdrowie psychiczne, pracowałem z pełnym kodem źródłowym i napisałem prosty skrypt minizera, aby usunąć instrukcje, takie jak
assert()
ierror_reporting()
, usunąć niepotrzebne nawiasy, zmienić nazwy zmiennych, funkcji i stałych, aby wygenerować powyższy kod.źródło
define('_',98)
, czy nie jest to sprzecznefunction _
? Nie znam php, więc nie mogę powiedzieć ...