¿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
.Epuede ser reemplazado consm}kHpuede ser reemplazado con}RHPython, 52 bytes
Una función anónima que toma una palabra
wy un diccionariod. Toma las palabrasdque 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
wcomo una cadena y un diccionariodcomo una lista de cadenas y retornosTrueoFalse.Cómo funciona
El primer paso es una comprensión de la lista que genera una lista de listas de todas las subcadenas
wexcluyentesw, 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álidosipara cada longitud de subcadenas, y cortando cada subcadena de longitudsusandow[i:i+s]. Para cada lista de esta lista, se verifica la presencia de cada subcadena en el diccionario; llamaranydevuelve un hit si se encuentra al menos una coincidencia para una longitud determinada. Finalmente, la llamadaallverifica 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
wy 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 esdcon 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==ilugar dex.size==i&&w[x].uniqy-[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
$ay el diccionario$d, esperando$dcomo una matriz (ver ejemplos a continuación). Recorre la totalidad$dy realiza unaWhere-Objectpara extraer las entradas donde la palabra actual$_es una expresión regular-matchcontra 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-Objecten ellengthparámetro y la-Urestricció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
.countmatriz 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
-inoperador ya no está presente, pero no he probado esa versión.Ejemplos
fuente
Perl, 86 bytes
Requiere
-Esin 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
1en 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
dcomo 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
1o0para veracidad o falsedad.Pruébalo en línea!
fuente
Perl,
4241 bytesIncluye +2 para
-p0Dar palabra seguida por el diccionario en STDIN:
(Cuando pruebe en Unix, asegúrese de que dictionary.txt use
\ncomo 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_FUNCTIONSin golf:
fuente