En el juego Terraria , una de las mecánicas del juego consiste en construir casas para que un NPC pueda mudarse. Hay un conjunto estricto de reglas para lo que cuenta como una casa válida o no. Aquí está la lista de reglas:
El área total de la casa debe ser de al menos 60 azulejos cuadrados, pero menos de 750. Además, el tamaño de la casa, incluido el marco exterior, debe ser al menos uno de estos:
5x12 6x10 7x9 8x8 9x7 10x6 12x5 15x4
En aras de la simplicidad, puede asumir con seguridad que: a) Todas las casas de entrada serán rectángulos, y b) no
#
habrá baldosas sólidas dentro de la casa. Aquí está nuestro marco de 12x6 (dibujado en un hermoso ASCII):############ # # # # # # # # ############
La casa debe estar cubierta de paredes de fondo. Estas no son baldosas sólidas, sino más bien una pared detrás de la casa en la tercera dimensión. Se permiten agujeros, pero no pueden ser más grandes que 4x4. Si hay una fila o columna de 5 o más caracteres de espacio en una fila, este es un agujero más grande que 4x4, y la casa no es válida. También se permiten múltiples agujeros, pero debe haber al menos una pared separada.
############ #**********# #**********# #**********# #**********# ############ ############ #* * # #* * # #* * # #****** # ############ (Still acceptable since neither hole is larger than 4x4 and there is a separator) ############ # ******# #*** ***# # ******# #*** ***# ############ (Also still valid. No row or column of blank spaces is longer or taller than 4.)
Debe haber una entrada. Puede ser una puerta
|
a los lados o una plataforma-
en el piso o el techo. Si la única entrada está en una esquina, el NPC no puede entrar. Además, si tiene una plataforma como piso, debe tener al menos un bloque sólido para que el NPC se pare. Este bloque sólido no puede estar directamente adyacente a las paredes laterales a la izquierda o la derecha. Estas son todas las casas válidas con entradas:############ #**********# |**********# #**********# #**********| ############ (Multiple doors, or doors up high are okay) ############ #**********# #**********# #**********# #**********# #######----# #----####### #**********# #**********# #**********# #**********# ############
Debe haber al menos una fuente de luz
$
, mesaT
y sillaC
, aunque se permite más. La fuente de luz puede estar en el aire o en el suelo, pero la mesa y la silla deben estar en el suelo, por ejemplo, en la fila más baja.############ #**********# #**********# #***$******| #****TC****| ############
Además, puede suponer que hay una pared detrás de cualquier mueble, por lo que una antorcha, una silla o una mesa pueden contar como un separador entre dos agujeros.
############ #* * # #* * # #* $ # #**TC******| ############
El reto
Debe escribir la función más corta que toma una casa como una cadena ASCII y devuelve verdadero / falso si es o no una vivienda válida. Puede tomar esto como una cadena delimitada por una nueva línea, una lista de cadenas o de cualquier otra manera, siempre que sea razonable. Por mi bien, incluya un programa corto para que pueda probar si funciona bien o no.
Como referencia, estas son todas entradas no válidas:
############
-**********#
-****$*****#
-**********#
-******TC**#
############ (You can't have platforms on the sidewalls)
###########-
#**********#
#**********#
#****$*****#
#**T***C***#
###########| (NPC can't enter because the only entrances are on the corner)
############
#**********#
#******$***#
#**********#
#T****C****#
##--------## (NPC has nowhere to stand)
############
#**********#
#**********#
#**********#
#**$**TC***#
##########|# (Door cannot be in the floor or ceiling)
############
#**********#
#**********#
#**********#
|** T C #
############ (Since table and chair do not count as a background wall, the hole in background is too wide)
####### ####
#**********#
#**********#
#****$*****#
#**T***C***|
############ (There's a hole in the frame.)
###########################################################################
# #
# #
# #
# #
# #
# #
# #
# #
# #
########################################################################### (House is 75x11, which is too big.)
#
. 2. Como Martin preguntó, ¿qué significa exactamente " ningún agujero puede ser mayor que 4x4 "? (Tenga en cuenta también que no fue hasta mi tercera lectura que estuve seguro de entender cuál era el hoyo. Debería escribir las especificaciones para las personas que no han jugado el juego).*
, pero eso excluiría los ejemplos dados de puertas válidas. 4. ¿" en el suelo " significa "en la penúltima fila" o "encima de#
"? 5. " Esto no se aplica a la mesa y las sillas " . Entonces, ¿eso significa que un agujero de 4x4 conT
oC
directamente debajo es demasiado grande? 6. "El NPC no puede entrar porque las únicas entradas están en la esquina " No creo que la especificación haya dicho nada sobre las esquinas. ¿Pueden ser-
o|
si hay otras puertas?*
debe ser accesible desde una entrada? ¿O se aíslan*
en el medio de los agujeros permitidos, los agujeros que cortan toda la habitación en dos con solo un lado con una entrada permitida y las entradas que van directamente a un agujero permitido?Respuestas:
Python 2,
503439 bytesNo es muy corto, pero es una solución. Avísame si ves algo para jugar golf. También recomendaría mirar mi versión no golfista, ya que en realidad es legible.
Editar: Todos los
if
s fuera de un bucle se han combinado en la parte inferior.Pruébalo en línea
Sin golf:
También muestra la razón del resultado
False
, para fines de depuración.Versión sin golf en línea
fuente