Haftungsausschluss: Die in dieser Frage erzählte Geschichte ist völlig fiktiv und wurde ausschließlich zum Zweck der Bereitstellung eines Intro erfunden.
Ich habe einen Freund, der Architekt ist, und nachdem er ihm das Konzept des Code-Golfs und diese Seite erklärt hatte, sagte er, dass ich etwas programmieren sollte, das für eine Änderung tatsächlich nützlich ist. Ich fragte ihn, was er für nützlich halten würde, und als Architekt antwortete er, dass er gerne einen Grundrissplaner hätte, der ihm alle möglichen Vorkehrungen für Räume bestimmter Größen in einem Haus einer bestimmten Größe treffen würde. Ich dachte, ich würde beweisen, dass Code-Golf doch nicht nutzlos ist, und ihm dieses Programm in der kleinstmöglichen Anzahl von Bytes geben.
Deine Aufgabe:
Schreiben Sie ein Programm oder eine Funktion, die, wenn ein Array D die Abmessungen des gesamten Hauses enthält, und ein zweites Array R, das die Abmessungen der Innenräume enthält, alle möglichen Konfigurationen der Räume im Haus als ASCII-Kunst ausgibt.
Alle Räume und die Außenwände des Hauses sollten als Standard-ASCII-Boxen mit dem | gestaltet werden Symbol für vertikale Wände, das Symbol - als horizontale Wände und das Symbol + für Ecken. Ein Haus mit den Abmessungen [4,4] sieht beispielsweise folgendermaßen aus:
+----+
| |
| |
| |
| |
+----+
Wie Sie sehen können, zählen Ecken nicht als Teil einer Reihe von Bemaßungen. Die Anzahl von - oder | Zeichen, die eine Seite bilden, sollten der in den Abmessungen angegebenen Zahl entsprechen. Die Zimmer können sich Wände teilen oder Wände mit dem Haus teilen. Ein Raum darf keine kleineren Räume in sich enthalten.
Zum Beispiel die Konfiguration
+--+---+-+
| | | |
| | | |
+--+---+ |
| |
| |
+--------+
gilt für D = [5,8] und R = [[2,2], [2,3]].
Eingang:
Zwei Arrays, von denen eines zwei Ganzzahlen enthält, die Abmessungen für das Haus, und das andere eine Reihe von Arrays enthält, die die Abmessungen für Räume enthalten.
Ausgabe:
Entweder ein Array aller möglichen Häuser als Zeichenfolgen oder eine Zeichenfolge mit allen möglichen Häusern, die auf konsistente Weise abgegrenzt sind. Beachten Sie, dass Rotationen mit genau derselben Konfiguration nur einmal gezählt werden sollten.
Testfälle:
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.
| | | | | | | | | | | |
| | | | | | | | | | | |
+---++--+ +--+-+-++ +-+--++-+ ++---+--+
| | | | | || | | | | || | |
+---+---+ +--+---++ +-+---+-+ ++---+--+
Wertung:
Dies ist Code-Golf , niedrigste Punktzahl in Bytes gewinnt!
D = [4,2]
, aber dein Haus ist [4,3]
, nicht wahr?