Ils disent que hate
c'est un mot fort. Je voulais savoir pourquoi, alors j'ai bien regardé le mot.
J'ai remarqué que chaque consonne avait une voyelle après. Cela me donnait l'air assez fort, alors j'ai décidé que c'était ce qui rend un mot fort.
Je veux trouver des mots plus forts, alors il me faut un programme pour ça!
Trouver des mots forts
Les mots forts sont des mots où chaque consonne (lettres de l'ensemble BCDFGHJKLMNPQRSTVWXZ
) est suivie d'une voyelle (lettres de l'ensemble AEIOUY
). C'est ça. Rien d'autre ne compte.
Si le mot commence par une voyelle, vous n'avez pas à vous soucier des lettres avant la première consonne. Si le mot n'a pas de consonnes, c'est automatiquement un mot fort!
Quelques exemples de mots forts sont agate
, hate
et you
. agate
est toujours un mot fort car, bien qu’il commence par une voyelle, chaque consonne est toujours suivie d’une voyelle. you
est un mot fort car il n’a pas de consonnes.
Il n'y a pas de restriction de longueur pour les mots forts.
Le défi
Ecrivez un programme ou une fonction qui prend une chaîne non vide en entrée et génère une valeur de vérité si c'est un mot fort ou une valeur de faux si ce n'est pas le cas.
Des clarifications
- Vous pouvez décider de saisir l’entrée en minuscule ou en majuscule. Spécifiez lequel dans votre réponse.
- Les mots ne contiendront aucune ponctuation. Ils ne contiendront que des lettres en clair dans le jeu
ABCDEFGHIJKLMNOPQRSTUVWXYZ
. - Au lieu de valeurs de vérité et de fausseté, vous pouvez choisir deux valeurs distinctes et cohérentes à retourner pour vrai et faux. Si vous faites cela, spécifiez les valeurs que vous avez choisies dans votre réponse.
- Vous pouvez également indiquer une valeur de fausseté pour un mot fort et une valeur de vérité pour un mot non fort.
Cas de test
Input -> Output
hate -> true
love -> true
popularize -> true
academy -> true
you -> true
mouse -> true
acorn -> false
nut -> false
ah -> false
strong -> false
false -> false
parakeet -> false
Notation
Puisqu'il s'agit de code-golf , la réponse avec le moins d'octets gagne!
la source
""
une entrée possible?Réponses:
JavaScript (ES6),
362827 octetsEnregistré 1 octet en inversant le résultat, comme suggéré par LarsW
Prend la saisie en minuscule. Retourne
false
pour un mot fort ettrue
pour un mot non fort.Comment?
Nous ajoutons un
0
(non-voyelle) à la fin de la chaîne d'entrée et cherchons deux caractères consécutifs non-voyelles. Cela nous permet de couvrir les deux cas qui rendent un mot pas fort:Cas de test
Afficher l'extrait de code
la source
+0
? Cela semble bien fonctionner sans cela+0
, cela renverrait des faux positifs sur les mots finissant par une consonne.!
(deux valeurs distinctes)Python 2 , 48 octets
Fonction non nommée prenant une chaîne (en minuscule)
s
et renvoyéeFalse
si forte ouTrue
non.Essayez-le en ligne!(inverse les résultats pour correspondre à l'OP)
Comment?
Les mots non forts ont une consonne suivie d'une consonne ou se terminent par une consonne.
Le code ajoute une consonne à la fin (
s+'b'
) pour que le test requis soit juste pour deux consonnes consécutives.Il découvre si chaque lettre du mot modifié est une voyelle avec la compréhension de liste
[v in'aeiouy'for v in s+'b']
.Il doit maintenant vérifier deux
False
résultats dans une ligne (signalant un mot non fort), il le fait en obtenant une représentation sous forme de chaîne (using`...`
) de cette liste et en recherchant l'existence de'se, F'
. Ceci est la chaîne la plus courte trouvée dans'False, False'
mais aucune des'True, True'
:;'False, True'
; ou'True, False'
.À titre d'exemple considérer
'nut'
, la compréhension de la liste évalue chaque lettre,v
, de l''nutb'
existence en'aeiouy'
donnant la liste[False, True, False, False]
, la représentation de chaîne de cette liste est'[False, True, False, False]'
qui contient'e, F'
ici: d''[False, True, Fals>>e, F<<alse]'
où la fonction retourneTrue
ce qui signifie que l' écrou est pas un mot fort.la source
Gelée ,
10 à9 octetsUn lien monadique prenant une liste de caractères et renvoyant:
0
si fort1
si nonEssayez-le en ligne! ou voir la suite de tests .
Comment?
Note: La raison de l’utilisation
Ạ
est juste de sauvegarder un octet avant d’être utilisé1
(puisque nous voulons alors l’utiliser11
tout de suite).la source
Ạ
chose hacky dans votre code ... sinon vous auriez pu faireeۯY;1w11
ou quelque choseẇ
a un argument de gauche qui est un nombre, il est implicitement converti en une liste décimale de chiffres, ainsi onze devient[1,1]
.05AB1E , 8 octets
Code
Utilise le codage 05AB1E . Essayez-le en ligne!
Explication
Exemple
la source
R , 43 octets
Essayez-le en ligne!
Une réponse JavaScript du port d'Arnauld; renvoie 1 pour les mots faibles et
integer(0)
pour les mots forts; il ajoute un(espace) à la fin de la chaîne.
Ceci est réellement vectorisé; avec un vecteur de chaînes, il renvoie les indices (basés sur 1) des mots faibles.
la source
$
, puis-je expliquer cela davantage?paste0(s,0)
, mais ce n’est que de la question. Je pense que @Charlie fait référence à quelque chose comme ceci:grep("[^aeiouy]([^aeiouy]|$)",s)
Dyalog APL, 20 octets
Essayez-le en ligne!
la source
⎕←
.Haskell ,
6154 octetsEssayez-le en ligne!
Je devais ajouter un
z
à la fin de la chaîne pour gérer le cas d'une consonne de fin.la source
Java (OpenJDK 8) ,
9381 octetsEssayez-le en ligne!
la source
s->{int w=0,p=w,l;for(char c:s){l="aeiouy".indexOf(c)>>31;w|=p&l;p=l;}return w+p>=0;}
.s->{int w=0,p=w,l;for(char c:s)w|=p&(p=l="aeiouy".indexOf(c)>>31);return w+p>=0;}
[a-z&&[^aeiouy]]
une de mes réponses précédentes . ;)Décortiquer , 12 octets
Essayez-le en ligne!
Merci à H.PWiz pour l'aide avec -4.
Renvoie des valeurs incohérentes mais appropriées de vérité ou de fausseté.Merci à Leo pour -1, retourne maintenant une valeur conforme vérité / fausseté.
la source
Pyth , 18 octets
Vérifiez tous les cas de test.
"Emprunté" la regex de la réponse JS . Cela retourne
False
pour les mots forts,True
sinonla source
13 ISO-8859-1 bytes, 13 chars
. Je pense que ça devrait allerBrachylog ,
181110 octetsEssayez-le en ligne!
Propre et simple (sauf peut-être pour les 2 octets initiaux supplémentaires pour traiter le cas de consonne final, comme "perakeet").
Est falsey pour les mots forts et la vérité pour les mots non forts.
la source
Python 2 , 58 octets
-30 octets en réalisant que cela peut être aussi simple que la réponse JS d'Arnauld .
Essayez-le en ligne!
la source
f=lambda s...
f=\
un en-tête).'[^aeiouy]([^aeiouy]|$)'
(24 octets) par"[^aeiouy]("*2+")|$)"
(21 octets) pour économiser 3 octets, car le groupe vide()
, ne modifie pas le comportement de recherche ( TIO ).Perl 5, 31 bytes (30 + 1)
+1 byte for
-p
command line flag. Prints the word if it's a strong word, or the empty string if it is not.la source
$_=$/if/[^aeiouy]{2}/
.Jelly, 11 bytes
Try it online!
Yes I know I've been beaten a lot by Jonathan Allan but I wanted to share my approach anyway :P
-4 bytes by stealing a little bit of Jonathan Allan's answer (instead of appending a consonant to check for last-letter edge case, just append 1)
-1 byte thanks to miles
la source
a2\
orȦ2Ƥ
instead ofṡ2Ȧ€
ØC
to make sureYy
was counted as a consonant because somehow I remembered backwards. Thanks!Awk, 39 bytes
prints
n
for non-strongword, nothing (or, just a newline) for strongwordfollowing the pack and searching for two consecutive non-vowels on lowercase input
testing
la source
Kotlin, 49 bytes
True and false are swapped
Beautified
Test
TryItOnline
Based on @Arnauld's Answer
la source
Retina,
2318 bytesTry it online! Outputs 0 for strong, 1 if not. Add 1 byte to support mixed case. Edit: Saved 5 bytes thanks to @ovs.
la source
Java 8,
5342 bytes-11 bytes by using the same regex as in @jrtapsell's Kotlin answer instead.
Try it here. (
false
if strong;true
if not)Explanation:
So it basically checks if we can find two adjacent consonants, or if the String ends with a consonant.
Old answer (53 bytes):
Try it here. (
true
if strong;false
if not)Uses regex to see if the input-String matches the 'strong'-regex. Note that
String#matches
in Java automatically adds^...$
to check if the String entirely matches the given regex.Explanation":
A search instead of matches (like a lot of other answers use) is actually longer in Java:
70 bytes:
Try it here. (
false
if strong;true
if not)la source
Ruby, 25 bytes
Try it online!
Everybody else is doing it, so why can't Ruby?
la source
SOGL V0.12,
1918 bytesTry it Here!
Explanation:
la source
05AB1E, 11 bytes
Try it online!
Uses Jonathan's algorithm, returns
0
for true and1
for false.la source
Swift 3.1, 85 bytes
Try it here!
This borrows Arnauld's regex.
la source
Lua, 41 bytes
Reads from standard input
Lua (loadstring'ed), 37 bytes
Reads from function parameter(s)
Input is lowercase
Sees if there is a string of length 2 or more, consisting only of not vowels (consonants) or if the string ends with a non-vowel
Returns true/false
la source
C++,
195194 bytes-1 bytes thanks to Zacharý
Uppercase, return true if input is a strong word, false otherwise ( C++ have simple int to bool implicit cast rules, 0 => false, true otherwise )
Code to test :
la source
return
and!
.C, 107 Bytes
Returns 1 for strong word and 0 for weak word. Tested with the words given in the main post.
la source
C (gcc), 59 bytes
Try it online!
la source
PHP, 69 bytes
Returns 1 is the word is not strong.
la source
/", str
->/",str
and[1]))) return
->[1])))return
but I don't know PHP too well so I can't be sure.[B-Z]
?[B-Z]
includes vowels.[^AEIOUY]
works, though.if
statement.CJam, 57 bytes
Try it online!
Reads input, converts to 1s for consonants, 0s for vowels. For every consonant, AND predefined variable X (predefined to 1) with next character's value. Output X
la source