Disclaimer: la storia raccontata all'interno di questa domanda è del tutto inventata e inventata esclusivamente allo scopo di fornire un'introduzione.
Ho un amico che è un architetto e, dopo avergli spiegato il concetto di code-golf e questo sito, ha detto che avrei dovuto codificare qualcosa di veramente utile per un cambiamento. Gli chiesi cosa avrebbe ritenuto utile e, essendo un architetto, mi rispose che gli sarebbe piaciuto avere un pianificatore che gli fornisse tutte le possibili disposizioni per stanze di determinate dimensioni all'interno di una casa di una certa dimensione. Pensavo che avrei dimostrato che il code-golf non era affatto inutile, e gli avrei dato questo programma nel minor numero di byte possibile.
Il tuo compito:
Scrivi un programma o una funzione che, quando viene fornita una matrice D contenente le dimensioni dell'intera casa, e una seconda matrice R contenente le dimensioni delle stanze interne, emesse come arte ASCII, tutte le possibili configurazioni delle stanze all'interno della casa.
Tutte le stanze e le pareti esterne della casa dovrebbero essere formate come scatole ASCII standard, usando il | il simbolo per le pareti verticali, il simbolo - come pareti orizzontali e il simbolo + per gli angoli. Ad esempio, una casa con le dimensioni [4,4] sarà simile a:
+----+
| |
| |
| |
| |
+----+
Come puoi vedere, gli angoli non contano come parte di un insieme di dimensioni. Il numero di - o | i caratteri che formano un lato devono essere uguali al numero indicato nelle dimensioni. Le stanze possono condividere muri o condividere muri con la casa. Una stanza non può contenere stanze più piccole al suo interno.
Ad esempio, la configurazione
+--+---+-+
| | | |
| | | |
+--+---+ |
| |
| |
+--------+
è valido per D = [5,8] e R = [[2,2], [2,3]].
Ingresso:
Due matrici, una delle quali contiene due numeri interi, le dimensioni della casa e l'altra contiene una serie di matrici che contengono le dimensioni delle stanze.
Produzione:
Una matrice di tutte le case possibili come stringhe o una stringa contenente tutte le case possibili, delimitata in modo coerente. Si noti che le rotazioni della stessa identica configurazione devono essere conteggiate una sola volta.
Casi test:
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.
| | | | | | | | | | | |
| | | | | | | | | | | |
+---++--+ +--+-+-++ +-+--++-+ ++---+--+
| | | | | || | | | | || | |
+---+---+ +--+---++ +-+---+-+ ++---+--+
punteggio:
Questo è code-golf , il punteggio più basso in byte vince!
D = [4,2], ma la tua casa è [4,3], no?