Uwaga: Historia opowiedziana w tym pytaniu jest całkowicie fikcyjna i wymyślona wyłącznie w celu wprowadzenia wstępu.
Mam przyjaciela, który jest architektem i po wyjaśnieniu mu koncepcji gry w golfa kodu i tej strony powiedział, że powinienem napisać coś naprawdę przydatnego do zmiany. Zapytałem go, co uzna za użyteczny, a jako architekt odpowiedział, że z przyjemnością skorzysta z planisty podłogi, która zapewni mu wszelkie możliwe aranżacje pomieszczeń o określonych rozmiarach w domu o określonej wielkości. Pomyślałem, że udowodnię, że kod-golf nie był bezużyteczny, i dam mu ten program w jak najmniejszej liczbie bajtów.
Twoje zadanie:
Napisz program lub funkcję, która otrzyma tablicę D zawierającą wymiary całego domu i drugą tablicę R zawierającą wymiary wewnętrznych pomieszczeń, wyprowadzoną jako grafika ASCII, wszystkie możliwe konfiguracje pokoi w domu.
Wszystkie pokoje i ściany zewnętrzne domu powinny być uformowane jako standardowe skrzynki ASCII, przy użyciu | symbol pionowych ścian, symbol - jako poziome ściany oraz symbol + dla narożników. Na przykład dom o wymiarach [4,4] będzie wyglądał następująco:
+----+
| |
| |
| |
| |
+----+
Jak widać, narożniki nie liczą się jako część zestawu wymiarów. Liczba - lub | znaki tworzące bok powinny być równe liczbie podanej w wymiarach. Pokoje mogą dzielić ściany lub ściany z domem. Pokój nie może zawierać w sobie mniejszych pomieszczeń.
Na przykład konfiguracja
+--+---+-+
| | | |
| | | |
+--+---+ |
| |
| |
+--------+
obowiązuje dla D = [5,8] i R = [[2,2], [2,3]].
Wejście:
Dwie tablice, z których jedna zawiera dwie liczby całkowite, wymiary dla domu, a druga zawiera szereg tablic zawierających wymiary dla pokoi.
Wynik:
Albo tablica wszystkich możliwych domów jako ciągi, albo ciąg zawierający wszystkie możliwe domy, rozdzielone w jakiś spójny sposób. Pamiętaj, że obroty dokładnie tej samej konfiguracji należy policzyć tylko raz.
Przypadki testowe:
D R -> Output
[4,3] [[2,1],[4,1]] -> +-+-+ +-+-+ +-+-+ Note that though there is an option to switch which side the [2,1] room and the [4,1] room are on, doing so would merely be rotating the house by 180 degrees, and therefore these possibilities do not count.
| | | +-+ | | | |
+-+ | | | | | | |
| | | | | | +-+ |
| | | +-+ | | | |
+-+-+ +-+-+ +-+-+
[4,7] [[3,1],[4,2],[2,2] -> +----+--+ +----+--+ +----+--+ +----+--+ There are some more possiblities I didn't feel like adding, but it's the same four again, just with the [4,2] and the [2,2] room switched.
| | | | | | | | | | | |
| | | | | | | | | | | |
+---++--+ +--+-+-++ +-+--++-+ ++---+--+
| | | | | || | | | | || | |
+---+---+ +--+---++ +-+---+-+ ++---+--+
Punktacja:
To jest golf golfowy , najniższy wynik w bajtach wygrywa!
D = [4,2]
, ale twój dom jest[4,3]
, prawda?Odpowiedzi:
Python 2 ,
625607602563551 bajtówWypróbuj online!
Kilka wyjaśnień Jest to chciwe podejście:
źródło