Quel est le moyen le plus court pour voir si une entrée est un wordinian utilisant un langage de programmation?
Un wordinian est un mot qui contient des mots de longueur 1 à la longueur du mot d'origine. Par exemple,
poubelle
«Je» est un mot
«dans» est un mot
«bin» est un mot
Ou,
étape
'a' est un mot
'ta' est un mot ( oui c'est le cas )
'age' est un mot
'stag' est un mot
'stage' est un mot
Contribution
Votre code doit prendre un mot et un dictionnaire comme entrées, dans n'importe quel format raisonnable.
Production
La sortie doit être une valeur pour indiquer vrai ou faux, pour nous dire si le mot est un wordinien.
Pour plus d'informations sur les wordinians, cliquez ici .
Voici une liste de mots que j'utiliserai comme entrées et sous-mots. De plus, en réponse à @xnor, il doit contenir des sous-mots de chaque longueur, pas une chaîne de sous-mots. Notez qu'un seul mot sera utilisé comme entrée.
la source
Réponses:
Pyth,
2016151311 octetsMerci à Leaky Nun d'avoir économisé 4 octets! Malheureusement, j'ai changé toute la méthode par la suite, mais cela a quand même aidé.
Attend la saisie sous forme de dictionnaire suivi d'un mot. Sorties True ou False.
Essayez-le ici!
Explication:
Cela ne fonctionne pas si la chaîne vide
""
est un mot valide.la source
.E
peut être remplacé pars
m}kH
peut être remplacé par}RH
Python, 52 octets
Une fonction anonyme qui prend un mot
w
et un dictionnaired
. Il prend les motsd
qui sont des sous-chaînes dew
, fait un ensemble de leurs longueurs, puis vérifie qu'il y a autant de longueurs distinctes qu'il y a de lettresw
.la source
[
au lieu de{
.{...}
est une compréhension d'ensemble (la même chose queset([...])
).Python 3, 108 octets
Une fonction anonyme qui prend en entrée, via un argument, un mot
w
sous forme de chaîne et un dictionnaired
sous forme de liste de chaînes et renvoieTrue
ouFalse
.Comment ça fonctionne
La première étape est une compréhension de liste qui génère une liste de listes de toutes les sous-chaînes d'
w
exclusionw
, regroupées par longueur. Par exemple, pour'stage'
, la liste[['s', 't', 'a', 'g', 'e'], ['st', 'ta', 'ag', 'ge'], ['sta', 'tag', 'age'], ['stag', 'tage']]
est générée. Ceci est obtenu en bouclant sur tous les indices de début validesi
pour chaque longueur de sous-chaînes
et en découpant chaques
sous- chaîne de longueur en utilisantw[i:i+s]
. Pour chaque liste de cette liste, la présence de chaque sous-chaîne dans le dictionnaire est vérifiée; appelerany
renvoie un hit si au moins une correspondance pour une longueur donnée est trouvée. Enfin, l'appelall
vérifie si une correspondance a été trouvée pour toutes les longueurs de sous-chaîne et le résultat est renvoyé.Essayez-le sur Ideone
la source
Rubis, 44 octets
w[x]&.size
:)C'est une fonction anonyme qui prend un mot
w
et un dictionnaire (tableau de mots)d
. Crée deux tableaux: le premier contenant les nombres 1 jusqu'à et y compris la longueur dew
; Le deuxième tableau correspondd
à chaque mot mappé à sa taille s'il s'agit d'une sous-chaîne dew
, sinonnil
. Ensuite, il définit la soustraction pour vérifier si le deuxième tableau contient tous les éléments du premier tableau.la source
w[x]&.size==i
au lieu dex.size==i&&w[x]
.uniq
et-[p]
et en utilisant la soustraction d'ensemble à la place:[*1..w.size]-d.map{...}==[]
PowerShell
v3 +v2 +,1271107065 octets(Je vois maintenant que mon approche est similaire à @ xnor, bien que je l'ai développée indépendamment)
Prend le mot d'entrée
$a
et le dictionnaire$d
, en attendant$d
un tableau (voir les exemples ci-dessous). Effectue une boucle sur l'intégralité de$d
et exécute unWhere-Object
pour extraire les entrées où le mot actuel$_
est une expression rationnelle par-match
rapport au mot d'entrée$a
(c'est-à-dire que le mot actuel est une sous-chaîne du mot d'entrée).Nous collectons tous ces mots de sous-chaîne et les redirigeons vers
Select-Object
lelength
paramètre et la-U
contrainte nique. Cela extraira les longueurs uniques de chaque sous-chaîne. Par exemple, pour le mot d'entréecomb
, ce sera un tableau de(4,2)
for('comb','om')
.Nous prenons le
.count
de ce tableau résultant et le comparons avec le mot d'entrée.length
. Si elle est égale à, cela signifie que chaque longueur de sous-chaîne est dans le dictionnaire, donc$TRUE
, sinon il nous en manque au moins une, donc$FALSE
. Cette valeur booléenne est laissée sur le pipeline et la sortie est implicite.NB - Cela devrait fonctionner en v2 +, puisque l'
-in
opérateur n'est plus présent, mais je n'ai pas testé cette version.Exemples
la source
Perl, 86 octets
Nécessite
-E
sans frais supplémentaires.Accepte toutes les entrées via STDIN. La première entrée est le mot cible, le reste de l'entrée est le dictionnaire. Imprime
1
en cas de succès, chaîne vide en cas d'échec.Usage
la source
Mathematica, 90 octets
Utilise la fonction intégrée de Mathematica
DictionaryWordQ
.Prendre l'entrée en
d
tant que dictionnaire est 5 octets plus court, mais beaucoup plus lent pour les longues listes:la source
MATL , 15 octets
1 octet enregistré en utilisant une idée de la réponse de @ xnor .
Sorties
1
ou0
pour véridique ou fausse.Essayez-le en ligne!
la source
Perl,
4241 octetsComprend +2 pour
-p0
Donnez le mot suivi du dictionnaire sur STDIN:
(Lors des tests sur unix, assurez-vous que dictionary.txt utilise
\n
comme terminateur de ligne, pas\r\n
)wordinian.pl
:la source
JavaScript (Firefox 30-57), 68 octets
L'utilisation d'une compréhension de générateur évite de créer un tableau intermédiaire. Version ES6 73 octets:
la source
05AB1E , 8 octets
Word comme première entrée, dictionnaire-liste comme deuxième entrée.
Essayez-le en ligne ou vérifiez quelques cas de test supplémentaires .
Explication:
la source
Kotlin , 51 octets
Essayez-le en ligne!
la source
SQF , 147 octets
Utilisation du format de fonction en tant que fichier:
Appelez comme:
["WORD", DICTIONARY] call NAME_OF_COMPILED_FUNCTION
Non golfé:
la source