¿Puede este recipiente contener tanto líquido?
Sinopsis del desafío
Como probablemente sepa, los líquidos tienen una forma indefinida y un volumen definido. Como tal, siempre toman la forma de su contenedor. Sin embargo, no pueden expandirse para llenar su contenedor.
Su trabajo hoy es determinar si una cierta cantidad de líquido (representada por un cierto número de L
caracteres o números que representan el volumen de la pieza, según la sugerencia) puede caber en un recipiente de cierto tamaño (representado por una matriz de C
caracteres) con cierta cantidad de espacio vacío (representado por caracteres de espacio) dentro de él. El contenedor siempre tendrá C
caracteres en todo el perímetro.
Su programa devolverá un valor verdadero / falso en función de si el líquido encajará en el recipiente. Solo se ajustará si hay un área de espacio vacío conectado (formado por espacios adyacentes entre sí horizontal, diagonal o verticalmente) dentro del recipiente para cada parte del líquido que está separada del resto (ya sea por un espacio o por dos personajes de nueva línea).
Casos de prueba
LLL
L
----- True
CCCCC
C CC
C CC
CCCCC
LLL
LL
------ True
CCCCCC
C C C
C CCC
CCCCCC
L L
LLL
----- False (Not enough space)
CCCCC
CCCCC
C CC
CCCCC
LL
------ False (Spaces are not connected but liquid is)
CCCCCC
CCCC C
C CCCC
CCCCCC
L L
------ True
CCCCCC
CCCC C
C CCCC
CCCCCC
L L
------ True (There is a pocket of empty space which holds both parts of the liquid)
CCCCCC
CCC C
CCCCCC
CCCCCC
L
L
------ True (There is a pocket of empty space for each part of the liquid)
CCCCCC
CCCC C
C CCCC
CCCCCC
L L L LL
------ True
CCCCCCCCC
CCCC C C
C CCCCCCC
CCCCCC CC
CCCCCCCCC
L
L
----- True
CCCCC
CCCCC
C CC
CCCCC
¡No dude en sugerir casos de prueba!
Reglas
- Este es el código de golf , por lo que gana la respuesta más corta en bytes.
- Las lagunas estándar no están permitidas.
L\n\nL
,CCCCC\nCCCCC\nC..CC\nCCCCC
(.
representa un espacio,\n
representa una nueva línea).L
texto como una lista de volúmenes (es decir, una lista del número deL
s en cada cantidad)? Dado que analizar espacios y líneas nuevas dobles parece no tener relación con el núcleo del desafío. ¿También podemos tomar elC
texto como una matriz de dos valores distintos en su lugar por la misma razón?L
y unoLL
con espacios de tamaño 3 y 2 (un algoritmo que solo llena los espacios más pequeños primero con los pedazos más pequeños de líquido aún por usar dará Falsey). Quizás lo mismo pero con 2L
y unoLLL
también, para atender a la otra dirección.L
a una lista de enteros. El segundo analiza laC
matriz de entrada a una lista de enteros. Y la tercera es una pregunta determinante para la bolsa entera A y B, si hay una partición en A, cuando suma todos los enteros en cada partición para obtener una bolsa A ', cada enésimo número más grande en A' es menor ( <=) que el enésimo número más grande en B '.Respuestas:
Caracoles, 58 bytes
La entrada se toma exactamente como en los ejemplos.
Una versión más larga de 4 bytes es lo suficientemente rápida como para completar instantáneamente los casos de prueba ( Pruebe esta versión en línea ):
Un formato sangrado de este último:
fuente
Limpio , 313 bytes
Pruébalo en línea!
Define la función
$ :: [Int] [[Char]] -> Bool
. El enlace TIO incluye un contenedor alrededor de STDIN.? :: [Int] -> [[Int]]
es una ayuda para generar las diferentes formas en que se pueden combinar los volúmenes.Expandido:
fuente