Étant donné l'entrée d'un verbe espagnol dans sa forme infinitive, sortez le verbe conjugué dans les 6 formes de l'imparfait indicatif.
Pour conjuguer un infinitif dans l'imparfait, supprimez la fin infinitive (-ar, -er, -ir et parfois -ír) et ajoutez les terminaisons imparfaites répertoriées ci-dessous. Il y a trois verbes irréguliers dans l'imparfait, également énumérés ci-dessous.
Verb ending Replace with...
--------------------------------------------------------
-ar -aba, -abas, -aba, -ábamos, -abais, -aban
-er, -ir, -ír -ía, -ías, -ía, -íamos, -íais, -ían
Irreg. verb Conjugations
--------------------------------------------------------
ser era, eras, era, éramos, erais, eran
ver veía, veías, veía, veíamos, veíais, veían
ir iba, ibas, iba, íbamos, ibais, iban
Pour les besoins de ce défi, utilisez des majuscules au lieu de lettres accentuées (á devient A, é devient E et í devient I). C'est seulement parce que les lettres accentuées sont de 2 octets en UTF-8, mais elles peuvent être différentes dans d'autres encodages, et je préfère ne pas avoir à traiter tout cela et rester à la place en ASCII imprimable.
Les verbes infinitifs auront toujours trois caractères ou plus, à la seule exception du verbe ir , ne contiendront jamais de lettres accentuées à l'exception des verbes qui se terminent par -ír et se termineront toujours par -ar, -er, -ir, ou -ír. Les verbes réflexifs n'ont pas besoin d'être manipulés.
La sortie peut être sous la forme d'une chaîne séparée par des espaces / virgules (donc l'impression de chaque conjugaison à STDOUT sur sa propre ligne est correcte) ou un tableau / liste / etc.
Puisque c'est du code-golf , le code le plus court en octets l'emporte.
Cas de test:
In Out
---------------------------------------------------------------
hablar hablaba hablabas hablaba hablAbamos hablabais hablaban
comer comIa comIas comIa comIamos comIais comIan
vivir vivIa vivIas vivIa vivIamos vivIais vivIan
sonreIr sonreIa sonreIas sonreIa sonreIamos sonreIais sonreIan
ser era eras era Eramos erais eran
ver veIa veIas veIa veIamos veIais veIan
ir iba ibas iba Ibamos ibais iban
la source
Réponses:
Rétine ,
10082 octetsEssayez-le en ligne. Malheureusement, en raison de l'utilisation de
$_
il n'est pas possible de modifier le code pour exécuter tous les tests en même temps, vous devrez donc copier dans les verbes individuels. Je travaille sur une nouvelle fonctionnalité qui rendra cela possible.Explication
Nous commençons par transformer toutes les terminaisons qui ne sont pas
ar
enI
, à condition que l'entrée ne soit pas le verbe irrégulierir
. Cela prend soin de-er
,-ir
,-ír
conjugaisons, bousille les verbes irréguliersser
etver
(mais eux raccourcit dans le processus), et les feuilles seulementir
et-ar
avec une fuiter
.Si le mot se termine toujours par
r
, nous le remplaçons par unb
. Nous avons maintenant couvert toutes les conjugaisons standard ainsi que le verbe irrégulierir
.Cela corrige le verbe irrégulier
ver
qui a été transformé envI
première étape.Cela corrige le verbe irrégulier
ser
qui a été transformé ensI
première étape. Nous avons maintenant modifié correctement toutes les tiges possibles. Il ne reste plus qu'à ajouter toutes les fins possibles, puis à fixer l'accent pour la première personne du pluriel dans certains cas.D'abord, nous ajoutons un
a
à la tige, car cela fait toujours partie de toutes les fins.Cela utilise le rarement vu
$_
qui insère la chaîne entière dans la substitution (indépendamment de ce qui a été mis en correspondance). Ceci est en fait très utile lors de la duplication de chaînes, comme le sont$`
et$'
, qui sont également assez sous-estimés.Avant cette étape, nous avons la première personne du singulier dans la chaîne. Nous ajoutons maintenant les autres conjugaisons, en faisant correspondre la fin de la chaîne avec
$
et en construisant les autres formes en ajoutant les suffixes appropriés à la première personne du singulier.Enfin, nous fixons l'accent pour la première personne du pluriel, le cas échéant. Cela ne doit être fait que pour une voyelle, deux caractères devant le, à
-amos
moins que le caractère intermédiaire ne le soitI
. Nous faisons donc correspondre un tel caractère, puis utilisons une étape de translittération pour convertir les minuscules en majuscules. Cela utilise les nouvelles classes de personnagesl
etL
que je n'ai ajoutées que hier. Ils s'étendent àa-z
etA-Z
respectivement, de sorte que la nouvelle fonctionnalité économise 4 octets ici.la source
Python 3,
154232 octetsCorrection des majuscules manquantes dans les verbes irréguliers.
Non golfé
la source
Voie lactée 1.6.2 , 281 octets
Eh bien, cela a pris du temps! On dirait que j'ai besoin d'ajouter quelques builtins, hehe ...
Usage
Exemples
la source
Rubis,
151149Normalement, je choisirai une nouvelle ligne plutôt qu'un point-virgule dans la mesure du possible dans un souci de lisibilité, mais comme il n'y a pas de point-virgule, il s'agit d'une ligne unique.
Une caractéristique est l'utilisation d'espaces réservés
31@
pour les voyelles accentuées qui dépendent desamos
terminaisons. Ainsi, la tige correcte est formée, puis l'espace réservé est substitué à l'un deseia
ouEIA
selon le casIl y a quelques utilisations d'index de tableau négatifs ici. Donc
n[-2]
fait référence à la seconde au dernier caractère de l'entrée, etn[0..-3]
fait référence à l'entrée des 2 derniers caractères supprimés (la tige infinitif).Non testé dans le programme de test
la source