Descargo de responsabilidad: La historia contada dentro de esta pregunta es completamente ficticia e inventada únicamente con el propósito de proporcionar una introducción.
Tengo un amigo que es arquitecto y, después de explicarle el concepto de golf de código y este sitio, me dijo que debería codificar algo realmente útil para un cambio. Le pregunté qué consideraría útil y, como arquitecto, respondió que disfrutaría tener un planificador de pisos que le diera todos los arreglos posibles para habitaciones de ciertos tamaños dentro de una casa de cierto tamaño. Pensé que probaría que el golf de código no era inútil después de todo, y darle este programa en la menor cantidad de bytes posible.
Tu tarea:
Escriba un programa o función que, cuando se le dé una matriz D que contenga las dimensiones de toda la casa, y una segunda matriz R que contenga las dimensiones de las habitaciones interiores, salida como arte ASCII, todas las configuraciones posibles de las habitaciones dentro de la casa.
Todas las habitaciones y las paredes exteriores de la casa deben formarse como cajas ASCII estándar, utilizando el | símbolo para paredes verticales, el símbolo - como paredes horizontales y el símbolo + para esquinas. Por ejemplo, una casa con las dimensiones [4,4] se verá así:
+----+
| |
| |
| |
| |
+----+
Como puede ver, las esquinas no cuentan como parte de un conjunto de dimensiones. El número de - o | los caracteres que forman un lado deben ser iguales al número dado en las dimensiones. Las habitaciones pueden compartir paredes o compartir paredes con la casa. Una habitación no puede contener habitaciones más pequeñas dentro de sí misma.
Por ejemplo, la configuración
+--+---+-+
| | | |
| | | |
+--+---+ |
| |
| |
+--------+
es válido para D = [5,8] y R = [[2,2], [2,3]].
Entrada:
Dos conjuntos, uno de los cuales contiene dos enteros, las dimensiones de la casa, y el otro contiene una serie de conjuntos que contienen las dimensiones de las habitaciones.
Salida:
Ya sea una matriz de todas las casas posibles como cadenas, o una cadena que contiene todas las casas posibles, delimitada de alguna manera consistente. Tenga en cuenta que las rotaciones de la misma configuración exacta solo deben contarse una vez.
Casos de prueba:
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.
| | | | | | | | | | | |
| | | | | | | | | | | |
+---++--+ +--+-+-++ +-+--++-+ ++---+--+
| | | | | || | | | | || | |
+---+---+ +--+---++ +-+---+-+ ++---+--+
Puntuación:
Este es el código de golf , ¡la puntuación más baja en bytes gana!
D = [4,2]
, pero tu casa es[4,3]
, ¿no?Respuestas:
Python 2 ,
625607602563551 bytesPruébalo en línea!
Algunas explicaciones Es un enfoque codicioso:
fuente