Este recipiente pode armazenar tanto líquido?
Resumo do Desafio
Como você provavelmente sabe, os líquidos têm uma forma indefinida e um volume definido. Como tal, eles sempre assumem a forma de seu recipiente. Eles não podem, no entanto, expandir para encher seu contêiner.
Sua tarefa hoje é determinar se uma certa quantidade de líquido (representada por um certo número de L
caracteres ou números representando o volume da peça, conforme sugestão) pode caber em um contêiner de um determinado tamanho (representado por uma matriz de C
caracteres) com uma certa quantidade de espaço vazio (representado por caracteres de espaço) dentro dele. O contêiner sempre terá C
caracteres em todo o perímetro.
Seu programa retornará um valor de verdade / falsey com base no ajuste do líquido no contêiner. Só caberá se houver uma área de espaço vazio conectado (composto por espaços adjacentes um ao outro na horizontal, na diagonal ou na vertical) dentro do recipiente para cada parte do líquido que é separado do restante (por um espaço ou por dois caracteres de nova linha).
Casos de teste
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
Sinta-se livre para sugerir casos de teste!
Regras
- Isto é código-golfe, então a resposta mais curta em bytes vence.
- As brechas padrão não são permitidas.
L\n\nL
,CCCCC\nCCCCC\nC..CC\nCCCCC
(.
representa um espaço,\n
representa uma nova linha).L
texto como uma lista de volumes (ou seja, uma lista do número deL
s em cada quantidade)? Como a análise de espaços e novas linhas duplas parece não estar relacionada ao cerne do desafio. Também podemos tomar oC
texto como uma matriz de dois valores distintos, pelo mesmo motivo?L
e umLL
com espaços de tamanho 3 e 2 (um algoritmo que preenche os espaços menores primeiro com os menores pedaços de líquido ainda a serem usados resultará em Falsey). Talvez o mesmo, mas com 2L
e umLLL
também, para atender a outra direção.L
em uma lista de números inteiros. O segundo é analisar aC
matriz de entrada em uma lista de números inteiros. E a terceira é uma questão de determinação para um conjunto inteiro A e B, se houver uma partição em A, quando soma todos os números inteiros em cada partição para obter um conjunto A ', cada n-ésimo maior número em A' é menor ( <=) que n-ésimo maior número em B '.Respostas:
Caracóis, 58 bytes
A entrada é obtida exatamente como nos exemplos.
Uma versão de 4 bytes mais longa é rápida o suficiente para concluir instantaneamente os casos de teste ( Experimente esta versão online ):
Uma formatação recuada deste último:
fonte
Limpo , 313 bytes
Experimente online!
Define a função
$ :: [Int] [[Char]] -> Bool
. O link TIO inclui um invólucro em torno do STDIN.? :: [Int] -> [[Int]]
é um auxiliar para gerar as diferentes maneiras pelas quais os volumes podem ser combinados.Expandido:
fonte