¿Cuál es la forma más corta de ver si una entrada es un wordiniano usando algún lenguaje de programación?
Un wordiniano es una palabra que contiene palabras de longitud 1 a la longitud de la palabra original. Por ejemplo,
compartimiento
'I' es una palabra
'en' es una palabra
'bin' es una palabra
O,
etapa
'a' es una palabra
'ta' es una palabra ( sí, lo es )
'edad' es una palabra
'ciervo' es una palabra
'etapa' es una palabra
Entrada
Su código debe tomar una palabra y un diccionario como entradas, en cualquier formato razonable.
Salida
La salida debe ser un valor para indicar verdadero o falso, para decirnos si la palabra es un wordiniano.
Para más información sobre wordinians haga clic aquí .
Aquí hay una lista de palabras que usaré como entradas y subpalabras. Además, en respuesta a @xnor, debe contener subpalabras de cada longitud, no una cadena de subpalabras. Tenga en cuenta que solo se utilizará una palabra como entrada.
fuente
Respuestas:
Pyth,
2016151311 bytes¡Gracias a Leaky Nun por guardar 4 bytes! Desafortunadamente, cambié todo el método después, pero igual ayudó.
Espera entrada como diccionario seguido de palabra. Salidas Verdadero o Falso.
Pruébalo aquí!
Explicación:
Esto no funciona si la cadena vacía
""
es una palabra válida.fuente
.E
puede ser reemplazado cons
m}kH
puede ser reemplazado con}RH
Python, 52 bytes
Una función anónima que toma una palabra
w
y un diccionariod
. Toma las palabrasd
que son subcadenas dew
, hace un conjunto de sus longitudes y luego comprueba que haya tantas longitudes distintas como letrasw
.fuente
[
lugar de{
.{...}
es un conjunto de comprensión (igual queset([...])
).Python 3, 108 bytes
Una función anónima que toma la entrada, a través del argumento, de una palabra
w
como una cadena y un diccionariod
como una lista de cadenas y retornosTrue
oFalse
.Cómo funciona
El primer paso es una comprensión de la lista que genera una lista de listas de todas las subcadenas
w
excluyentesw
, agrupadas por longitud. Por ejemplo, para'stage'
,[['s', 't', 'a', 'g', 'e'], ['st', 'ta', 'ag', 'ge'], ['sta', 'tag', 'age'], ['stag', 'tage']]
se genera la lista . Esto se logra haciendo un bucle sobre todos los índices de inicio válidosi
para cada longitud de subcadenas
, y cortando cada subcadena de longituds
usandow[i:i+s]
. Para cada lista de esta lista, se verifica la presencia de cada subcadena en el diccionario; llamarany
devuelve un hit si se encuentra al menos una coincidencia para una longitud determinada. Finalmente, la llamadaall
verifica si se ha encontrado una coincidencia para todas las longitudes de las subcadenas y se devuelve el resultado.Pruébalo en Ideone
fuente
Ruby, 44 bytes
w[x]&.size
:)Es una función anónima que toma una palabra
w
y un diccionario (conjunto de palabras)d
. Crea dos matrices: la primera que contiene los números 1 hasta e incluyendo la longitud dew
; La segunda matriz esd
con cada palabra asignada a su tamaño si son una subcadena dew
, de lo contrarionil
. Luego establece la substracción para verificar si la segunda matriz contiene todos los elementos de la primera matriz.fuente
w[x]&.size==i
lugar dex.size==i&&w[x]
.uniq
y-[p]
, y utilizando el conjunto de la resta en su lugar:[*1..w.size]-d.map{...}==[]
PowerShell
v3 +v2 +,1271107065 bytes(Ahora veo que mi enfoque es similar al de @ xnor, aunque lo desarrollé independientemente)
Toma la palabra de entrada
$a
y el diccionario$d
, esperando$d
como una matriz (ver ejemplos a continuación). Recorre la totalidad$d
y realiza unaWhere-Object
para extraer las entradas donde la palabra actual$_
es una expresión regular-match
contra la palabra de entrada$a
(es decir, es la palabra actual una subcadena de la palabra de entrada).Recopilamos todas esas palabras de subcadena y las canalizamos
Select-Object
en ellength
parámetro y la-U
restricción nique. Eso extraerá las longitudes únicas de cada subcadena. Por ejemplo, para la palabra de entradacomb
, esta será una matriz de(4,2)
for('comb','om')
.Tomamos la
.count
matriz resultante y la comparamos con la palabra de entrada.length
. Si es igual a, eso significa que cada longitud de subcadena está en el diccionario, entonces$TRUE
, de lo contrario, nos falta al menos uno, entonces$FALSE
. Ese valor booleano se deja en la tubería y la salida es implícita.NB: esto debería funcionar en v2 +, ya que el
-in
operador ya no está presente, pero no he probado esa versión.Ejemplos
fuente
Perl, 86 bytes
Requiere
-E
sin costo adicional.Acepta todas las entradas a través de STDIN. La primera entrada es la palabra objetivo, el resto de la entrada es el diccionario. Huellas dactilares
1
en caso de éxito, cadena vacía en caso de error.Uso
fuente
Mathematica, 90 bytes
Utiliza los componentes incorporados de Mathematica
DictionaryWordQ
.Tomar la entrada
d
como diccionario es 5 bytes más corto, pero mucho más lento para listas largas:fuente
MATL , 15 bytes
1 byte guardado usando una idea de la respuesta de @ xnor .
Salidas
1
o0
para veracidad o falsedad.Pruébalo en línea!
fuente
Perl,
4241 bytesIncluye +2 para
-p0
Dar palabra seguida por el diccionario en STDIN:
(Cuando pruebe en Unix, asegúrese de que dictionary.txt use
\n
como terminador de línea, no\r\n
)wordinian.pl
:fuente
JavaScript (Firefox 30-57), 68 bytes
El uso de un generador de comprensión evita crear una matriz intermedia. Versión de 73 bytes ES6:
fuente
05AB1E , 8 bytes
Word como primera entrada, lista de diccionario como segunda entrada.
Pruébelo en línea o verifique algunos casos de prueba más .
Explicación:
fuente
Kotlin , 51 bytes
Pruébalo en línea!
fuente
SQF , 147 bytes
Usando el formato de función como archivo:
Llamar como:
["WORD", DICTIONARY] call NAME_OF_COMPILED_FUNCTION
Sin golf:
fuente