Défi
Écrivez une fonction qui prend un argument qui est un verbe et retourne le passé du verbe. (Supposons que le verbe soit régulier)
Passé
Remarque: considérez y comme ni consonne ni voyelle.
Normalement, il suffit d'ajouter ed
après la fin du verbe fait le passé du verbe.
Ex: jump
→ jumped
,ask
→asked
Cependant, il existe d'autres règles.
Si le dernier caractère du verbe donné est
e
, ajoutez simplementd
.Ex:
love
→loved
,move
→moved
Si le verbe se termine par une consonne +
y
, passezy
ài
et ajoutezed
.Ex:
study
→studied
,cry
→cried
Cependant, si le verbe se termine par une voyelle +
y
, ajoutez simplemented
.Ex:
play
→played
,stay
→stayed
Si un verbe se termine par une voyelle et une consonne, écrivez la consonne une fois de plus et ajoutez
ed
.Ex:
stop
→stopped
,plan
→planned
Cependant, si un verbe se termine par plusieurs voyelles + une consonne ou une voyelle unique + plusieurs consonnes, ajoutez simplement
ed
.Ex:
look
→looked
,jump
→jumped
Il y a plus de règles mais attention aux règles ci-dessus uniquement. Par exemple, selon la règle ci-dessus, visit
→visitted
.
Gagnant
Puisqu'il s'agit de code golf, le code le plus court qui renvoie correctement les temps passés gagne.
Exemple (JS, 127)
function f(x){return x.replace(/([^aeiouy])y$/,'$1i').replace(/([^aeiouy][aeiou])([^aeiouy])$/,'$1$2$2').replace(/e$/,'')+'ed'}
Réponses:
sed, 76 caractères
Un script sed compte-t-il comme une fonction pour ce problème?
la source
Mathematica 43 caractères
Usage:
Aussi:
la source
Groovy - 111 caractères
la source
Perl 5 (82 caractères):
Je suis sûr que cela peut être amélioré.
la source
C -
120119 caractèresDans le style C typique, la fonction f met à jour un tampon de chaîne en place, en supposant que l'appelant a réservé suffisamment d'espace pour jusqu'à trois caractères supplémentaires. Le deuxième argument doit être donné comme 0. La déclaration de la variable d'état globale
l
est incluse dans le nombre total de caractères.Explication: La fonction parcourt les caractères récursivement. Le deuxième argument
i
code lequel des trois caractères précédents étaient des consonnes dans ses trois bits inférieurs. À la fin de la chaîne, sii==5
alors les trois derniers caractères étaient une consonne, une voyelle et une consonne, et donc le dernier caractère doit être dupliqué. De même, si le bit 1 dei
indique que l'avant-dernier caractère était une consonne et que le dernier caractère est «y», alors le «y» est remplacé par «i».la source
Scala 199
273caractèresInvocation:
Ma première approche a été beaucoup plus longue, en déplaçant la cascade if-else vers une liste => vers une fonction:
Peut-être que l'approche est intéressante. Dégouliné et expliqué:
la source
Ruby, 101 caractères
Peut probablement être plus petit.
Usage:
la source
f=->(x){...}
pour obtenir un code plus court. Aussi àaeiouy
mon humble avis devrait être une constante.Merde - 72 caractères
la source
Python - 147
la source