Dada una cadena s
y una matriz / lista l
, determine si s
puede hacerse o no con partes de l
.
Por ejemplo, si la cadena es "Hello, world!"
y la lista es [' world!', 'Hello,']
, entonces el programa / función debería devolver un valor verdadero, porque puede organizar la lista para formar la cadena. La siguiente lista también devolver un valor Truthy: ['l', 'He', 'o, wor', 'd!']
. Imagínese el 'l'
relleno donde necesita en la cuerda. Entonces sí, puede repetir elementos de la lista para formar la cadena. Si no puede formar la cadena, debería devolver un valor falso. Métodos estándar de IO, se aplican las lagunas estándar.
Casos de prueba:
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
fuente
fuente
"ababab", ["a","ba","ab"]
Respuestas:
Brachylog , 8 bytes
Pruébalo en línea!
Esto es realmente lento. Tomó alrededor de 37 segundos para el "¡Hola, mundo!" caso de prueba en mi PC, y se agotó el tiempo de espera en TIO.
Esto lleva la cadena a través de la variable Entrada y la lista a través de la variable Salida
Explicación
fuente
["la", " l", "al "]
como lista, terminó en mi computadora y respondió correctamentefalse.
después de 6800 segundos, y "solo" 113 mil millones de inferencias.Mathematica, 29 bytes
Explicación:
Solución límite de trampas, 21 bytes
Dado que Mathematica es un lenguaje de programación simbólico, no existe una * diferencia entre las expresiones
List[a,b,...]
y laAlternatives[a,b,...]
forma en que interactúan con otros símbolos y cómo se muestran ({a,b,...}
ya|b|...
, respectivamente). Cuando se usa en el segundo argumento deStringMatchQ
, unaAlternatives
expresión se trata como un patrón de cadena y, por lo tanto, podemos guardar8
bytes sobre mi solución anterior tomando el segundo argumento como unaAlternatives
expresión.* Técnicamente
List
también lo esLocked
, lo que evita que los usuarios loUnprotect
ingieran y cambien su comportamiento.fuente
{x,y,z}
se trata de la misma manera quex|y|z
para la coincidencia de patrones de cadena. Creo que puedes reemplazar""|##&@@#2..
con solo#2..
.Pyth, 23 bytes
Toma entrada como
[['string'],['list', 'of', 'parts']]
. El resultado es una lista vacía o una lista con valores dentro. En Pyth, una lista que contiene cualquier cosa, incluso una cadena nula (['']
), se evalúa como verdadera.Pruébalo en línea!
Explicación:
Esta solución intenta continuamente eliminar todas las partes posibles desde el comienzo de la cadena y realiza un seguimiento de los valores que aún necesita analizar.
Si observamos el valor de
G
en el caso de prueba[['ababab'],['a','ba','ab']]
después de cada iteración del ciclo while, esto es lo que obtenemos:Y, en el caso de prueba
[['aaaaa'],['aa']]
, esto es lo que obtenemos:Creé otro caso de prueba,
[['aaaaaa'],['a','aa','aaa']]
y el resultado fue este:La lista de salida contiene un montón de basura dentro de ella, pero sigue siendo un valor verdadero.
fuente
Perl 5 , 39 bytes
38 bytes de código +
-p
bandera.Pruébalo en línea!
Para la entrada
"Hello, world!", ["l", "He", "o, wor", "d!"]
(separada por líneas nuevas en realidad), construye el patrónl|He|o, wor|d!|
(con los metacaracteres escapados, gracias a\Q..\E
), y luego mira si la primera cadena coincide con este patrón/^($v)*$/
.En TryItOnline, tenga en cuenta que debe haber una nueva línea final.
fuente
undef
es el valor falso devuelto por la mayoría de los incorporados. Y al imprimirlo, en realidad no imprime nada. Y eso es exactamente lo que estoy haciendo. Imprimir "1/0" es natural para lenguajes tipo C, pero para Perl, "1 / undef" es la forma natural.PHP, 69 bytes
Casos de prueba
fuente
["", ["The string can be constructed with nothing!"]]
Python 2, 141 bytes
Pruébalo en línea!
Extremadamente ineficiente. El primer caso de prueba expira en TIO.
fuente
JavaScript (ES6), 59 bytes
Toma la matriz de subcadenas
a
y la cadenas
en sintaxis curry(a)(s)
. Devolucionesfalse
/true
.Comentado
Casos de prueba
Mostrar fragmento de código
fuente
Haskell , 35 bytes
#
toma unaString
y una lista deString
s, y devuelve aBool
.Pruébalo en línea!
Simplemente no me importa el caso de prueba que dejé fuera porque golpeó mi exigua computadora portátil, incluso con -O2. Sospecho que GHC no fusiona esa lista de elementos intermedios 30517578125, tiene demasiado uso compartido para recolectar basura rápidamente, y debido a que el caso de prueba es falso, el programa tiene que generarlo todo ... siéntase libre de intentarlo si puede maneja eso.
mapM("":)(l<$s)
es una lista de todas las formas de hacer unalength s
lista de elementos que son cadenas vacías o cadenas del
.fuente
Pyth,
17151114 bytesEl requisito para la cadena vacía cambió, agregando 3 bytes.
Explicación
versiones antiguas
¡Más corto y corre en la vida útil del universo!
Explicación
Esto es horriblemente lento, pero funciona para mis casos de prueba (trivialmente pequeños).
Explicación
fuente
Jalea ,
14128 bytesPruébalo en línea!
Cómo funciona
"", ["The string can be constructed with nothing"]
corrección de errores en el caso gracias a @JonathanAllanfuente
"", ["The string can be constructed with nothing!"]
;FŒṖḟ⁹$€Ạ¬
lo solucionará.ḟ
, por lo que no necesita el$
o⁹
:;FŒṖḟ€Ạ¬
.¬
con una operación que siempre devuelve verdadero con el argumento correcto "".R, 49 bytes
Pruébalo en línea!
fuente
('x', '.')
, pero no lo hace.Pyth, 10
8bytesBanco de pruebas
Esto toma la lista en la primera línea de STDIN y la cadena (sin comillas) en la segunda.
Para comenzar, la lista se almacena en
Q
, y la cadena se almacena enz
. A continuación, formamos todas las particiones posibles dez
. Cada partición se filtrará (f
) para verificar si solo usa piezasQ
. Para ello, se elimina todos los elementos deQ
partirT
, la partición que estamos partición, y lógicamente negar el resultado con!
, por lo que sólo las particiones donde cada elemento estaba enQ
se mantienen.Para solucionar el problema que
''
no tiene particiones, agregamos la primera palabra del diccionario a z, para que no sea una cadena vacía.fuente
""
parece fallar ese caso."", [""]
y"", []
no han sido cubiertos - no vayamos allí :)Potencia Shell,
615857 bytesPruébalo en línea!
Viejas soluciones:
fuente
Python 2, 64 bytes
¡Prueba esto en línea!
fuente
("aaaaaaa",["aa","aaa"])
.('x', '.')
, supongo, pero no lo hace."Hello", ["\w"]
etc.PowerShell, 78
Enfoque bastante directo basado en expresiones regulares.
fuente
CJam (16 bytes)
Este es un bloque anónimo (función) que toma la cadena y la matriz de cadenas en la pila. Demo en línea .
Utiliza el algoritmo obvio:
El valor de retorno es una matriz / cadena vacía (falso) si
str
no se puede hacer, o una matriz que contienestr
(verdad, incluso sistr
es la cadena vacía) si se puede hacer.fuente
C ++ (Bcc), 287 bytes
porque no escribí o usé demasiado la next_permutation () no sé si todo está bien. No sé al 100% si es una solución demasiado, posiblemente esto esté fuera de calidad ... Una lista de cadenas es aquí una matriz de punteros para char; NULL terminado. El algoritmo es fácil, hay un algoritmo que intenta la linealidad si todas las cadenas de la lista encajan con el argumento "a". Hay otro algoritmo que permuta el índice de la lista de cadenas para que intente todas las combinaciones posibles.
deshazte de él, prueba el código y los resultados aquí
esto se compilaría en el compilador gcc C ++
fuente
Python, 66 bytes
Sin golf:
fuente
Servidor SQL de Microsoft, 353 bytes
Pruébelo en línea.
Versión legible:
fuente
C, 140 bytes
Estoy seguro de que hay una forma más corta de hacer esto en C, pero quería crear una solución que pruebe todas las combinaciones posibles de subcadenas en lugar del método habitual de buscar / reemplazar.
Pruébalo en línea
Sin golf:
fuente