Dada uma sequência s
e uma matriz / lista l
, determine se é s
possível criar ou não partes com l
.
Por exemplo, se a cadeia é "Hello, world!"
e a lista é [' world!', 'Hello,']
, o programa / função deve retornar um valor verdadeiro, porque você pode organizar a lista para formar a cadeia. A lista a seguir também retornar um valor truthy: ['l', 'He', 'o, wor', 'd!']
. Imagine o 'l'
preenchimento onde ele precisa. Então, sim, você pode repetir elementos da lista para formar a sequência. Se não conseguir formar a sequência, retornará um valor falso. Métodos padrão de IO, lacunas padrão se aplicam.
Casos de teste:
Input (In the form of s, l)
Output (1 if possible, 0 if impossible)
"Hello, world!", ["l", "He", "o, wor", "d!"]
1
"la lal al ", ["la", " l", "al "]
1
"this is a string", ["this should return falsy"]
0
"thi is a string", ["this", "i i", " a", " string"]
0
"aaaaa", ["aa"]
0
"foo bar foobar", ["foo", "bar", " ", "spam"]
1
"ababab", ["a","ba","ab"]
1
"", ["The string can be constructed with nothing!"]
1
code-golf
string
decision-problem
subsequence
Camarada SparklePony
fonte
fonte
"ababab", ["a","ba","ab"]
Respostas:
Braquilog , 8 bytes
Experimente online!
Isso é realmente lento. Demorou cerca de 37 segundos para o "Olá, mundo!" teste no meu PC e o tempo limite expirou no TIO.
Isso leva a string pela variável Input e a lista pela variável Output
Explicação
fonte
["la", " l", "al "]
como lista, ela terminou no meu computador e respondeu corretamentefalse.
após 6800 segundos e "apenas" 113 bilhões de inferências.Mathematica, 29 bytes
Explicação:
Solução de trapaça nas fronteiras, 21 bytes
Como o Mathematica é uma linguagem de programação simbólica, não há * diferença entre as expressões
List[a,b,...]
eAlternatives[a,b,...]
outras além de como elas interagem com outros símbolos e como são exibidas ({a,b,...}
ea|b|...
, respectivamente). Quando usada no segundo argumento deStringMatchQ
, umaAlternatives
expressão é tratada como um padrão de cadeia e, portanto, podemos salvar8
bytes sobre a minha solução acima, usando o segundo argumento como umaAlternatives
expressão.* Tecnicamente
List
é tambémLocked
, o que impede os usuários deUnprotect
alterá-lo e alterar seu comportamento.fonte
{x,y,z}
é tratado da mesma forma quex|y|z
na correspondência de padrões de sequência. Eu acho que você pode substituir""|##&@@#2..
por apenas#2..
.Pitão, 23 bytes
Toma entrada como
[['string'],['list', 'of', 'parts']]
. A saída é uma lista vazia ou uma lista com valores internos. No Pyth, uma lista contendo qualquer coisa, mesmo uma string nula (['']
), é avaliada como verdadeira.Experimente online!
Explicação:
Essa solução tenta continuamente remover todas as partes possíveis desde o início da string e monitora quais valores ainda precisam ser examinados.
Se observarmos o valor de
G
no caso de teste[['ababab'],['a','ba','ab']]
após cada iteração do loop while, é isso que obtemos:E, no caso de teste
[['aaaaa'],['aa']]
, é isso que obtemos:Criei outro caso de teste
[['aaaaaa'],['a','aa','aaa']]
e a saída foi esta:A lista de saída contém um monte de lixo, mas ainda é um valor verdadeiro.
fonte
Perl 5 , 39 bytes
38 bytes de código +
-p
sinalizador.Experimente online!
Para a entrada
"Hello, world!", ["l", "He", "o, wor", "d!"]
(separada por novas linhas na verdade), ela constrói o padrãol|He|o, wor|d!|
(com os metacaracteres escapados, graças a\Q..\E
) e, em seguida, verifica se a primeira string corresponde a esse padrão/^($v)*$/
.No TryItOnline, observe que precisa haver uma nova linha à direita.
fonte
undef
é o valor falsy retornado pela maioria dos embutidos. E ao imprimi-lo, ele realmente imprime nada. E é exatamente isso que estou fazendo. Imprimir "1/0" é natural para idiomas do tipo C, mas para Perl, "1 / undef" é o caminho natural.PHP, 69 bytes
Casos de teste
fonte
["", ["The string can be constructed with nothing!"]]
Python 2, 141 bytes
Experimente Online!
Extremamente ineficiente. O primeiro caso de teste atinge o tempo limite no TIO.
fonte
JavaScript (ES6), 59 bytes
Pega a matriz de substrings
a
e a strings
na sintaxe de curry(a)(s)
. Retornafalse
/true
.Comentado
Casos de teste
Mostrar snippet de código
fonte
Haskell , 35 bytes
#
pega ae umaString
lista deString
s e retorna aBool
.Experimente online!
Só não se importe com o caso de teste que eu deixei de fora, porque ele esmagou meu laptop escasso, mesmo com -O2. Eu suspeito que o GHC não fundir essa lista intermediária de elementos 30517578125, ele tem muito compartilhamento para obter rapidamente o lixo coletado e, como o caso de teste é falso, o programa precisa gerar tudo isso ... sinta-se à vontade para tentar se puder lidar com isto.
mapM("":)(l<$s)
é uma lista de todas as maneiras de criar umalength s
lista de elementos que são cadeias vazias ou cadeias de caracteresl
.fonte
Pitão,
17151114 bytesO requisito para a sequência vazia foi alterado, adicionando 3 bytes.
Explicação
Versões antigas
Mais curta e corre na vida útil do universo!
Explicação
Isso é assustadoramente lento, mas funciona para meus casos de teste (trivialmente pequenos).
Explicação
fonte
Geléia ,
14128 bytesExperimente online!
Como funciona
bugfix no caso
"", ["The string can be constructed with nothing"]
graças a @JonathanAllanfonte
"", ["The string can be constructed with nothing!"]
;FŒṖḟ⁹$€Ạ¬
consertaria.ḟ
, assim você não precisa o$
ou⁹
:;FŒṖḟ€Ạ¬
.¬
por uma operação que sempre retorna true com o argumento correto "".R, 49 bytes
Experimente online!
fonte
('x', '.')
, mas não falha .Pitão, 10
8bytesSuíte de teste
Isso pega a lista na primeira linha do STDIN e a sequência (sem aspas) na segunda.
Para começar, a lista é armazenada
Q
e a sequência é armazenadaz
. Em seguida, formamos todas as partições possíveis dez
. Cada partição será filtrada (f
) para verificar se usa apenas partesQ
. Para fazer isso, nós removemos todos os elementosQ
deT
, a partição Estamos particionamento, e logicamente negar o resultado com!
, de modo que somente as partições onde cada elemento foi emQ
são mantidos.Para corrigir o problema que
''
não possui partições, adicionamos a primeira palavra do dicionário em z, para que não seja uma sequência vazia.fonte
""
parece falhar nesse caso."", [""]
e"", []
não foram cobertos - não vamos ir lá :)PowerShell,
615857 bytesExperimente online!
Soluções antigas:
fonte
Python 2, 64 bytes
Experimente isso online!
fonte
("aaaaaaa",["aa","aaa"])
.('x', '.')
Acho que deveria falhar , mas não."Hello", ["\w"]
etc.PowerShell, 78
Abordagem bastante simples baseada em regex.
fonte
CJam (16 bytes)
Este é um bloco anônimo (função) que pega a string e a matriz de strings na pilha. Demonstração online .
Ele usa o algoritmo óbvio:
O valor de retorno é uma matriz / string vazia (falsy) se
str
não puder ser criada, ou uma matriz contendostr
(verdade, mesmo questr
seja a string vazia) se puder ser criada.fonte
C ++ (Cco), 287 bytes
porque eu não escrevi ou usei muito o next_permutation () eu não sei se está tudo ok. Eu não sei 100% se é uma solução, muito possivelmente isso está fora de qualidade ... Uma lista de cadeias está aqui, uma matriz de ponteiros para char; NULL terminado O algo é fácil, existe um que a linearidade tenta se todas as strings da lista se encaixam no argumento "a" string, existe outro trecho que permite o índice da lista de strings e tenta todas as combinações possíveis.
ungolf it, código de teste e resultados aqui
isso seria compilado no compilador gcc C ++
fonte
Python, 66 bytes
Ungolfed:
fonte
Microsoft Sql Server, 353 bytes
Teste online.
Versão legível:
fonte
C, 140 bytes
Tenho certeza de que existe uma maneira mais curta de fazer isso em C, mas eu queria criar uma solução que teste todas as combinações possíveis de substrings em vez do método usual de localizar / substituir.
Experimente online
Ungolfed:
fonte