Conjugué dans l'espagnol imparfait / Conjugue en el imperfecto de indicativo

13

É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 , 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
Poignée de porte
la source
1
Autant d'exceptions ..: P
Zach Gates
9
@ZachGates Vous voyez, vous dites cela, mais vous n'avez rien vu tant que vous n'avez pas vu de prétérit. Imperfect est l'un des temps avec les moindres exceptions.
Addison Crump
J'ai pris l'espagnol 1-3, hehe. 0/10 ne recommanderait pas @FlagAsSpam
Zach Gates
@ZachGates Me aussi. : c
Addison Crump

Réponses:

6

Rétine , 100 82 octets

\B[^a]r$
I
r$
b
^vI$
veI
^sI$
er
$
a
$
 $_s $_ $_mos $_is $_n
T`l`L`.(?=[^I]amos )

Essayez-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

\B[^a]r$
I

Nous commençons par transformer toutes les terminaisons qui ne sont pas aren I, à condition que l'entrée ne soit pas le verbe irrégulier ir. Cela prend soin de -er, -ir, -írconjugaisons, bousille les verbes irréguliers seret ver(mais eux raccourcit dans le processus), et les feuilles seulement iret -aravec une fuite r.

r$
b

Si le mot se termine toujours par r, nous le remplaçons par un b. Nous avons maintenant couvert toutes les conjugaisons standard ainsi que le verbe irrégulier ir.

^vI$
veI

Cela corrige le verbe irrégulier verqui a été transformé en vIpremière étape.

^sI$
er

Cela corrige le verbe irrégulier serqui a été transformé en sIpremiè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.

$
a

D'abord, nous ajoutons un aà la tige, car cela fait toujours partie de toutes les fins.

$
 $_s $_ $_mos $_is $_n

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.

T`l`L`.(?=[^I]amos )

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 soit I. 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 personnages let Lque je n'ai ajoutées que hier. Ils s'étendent à a-zet A-Zrespectivement, de sorte que la nouvelle fonctionnalité économise 4 octets ici.

Martin Ender
la source
3

Python 3, 154 232 octets

M=input()
Q={'ser':'er','ver':'veI','ir':'ib'}.get(M)
H=[(Q if Q else M[:-2]+("ab"if M[-2:]=="ar"else"I"))+j for j in"a as a amos ais an".split(' ')]
if M[-2:]=="ar":H[3]=M[:-2]+"Abamos"
if Q in['er','ib']:H[3]=H[3].title()
print(H)

Correction des majuscules manquantes dans les verbes irréguliers.


Non golfé

M=input()
Q={'ser':'er','ver':'veI','ir':'ib'}.get(M)

H=[]
for j in "a as a amos ais an".split(' '):
    if Q:
        F = Q
    else:
        if M[-2:] == "ar":
            F = M[:-2] + "ab"
        else:
            F = M[:-2] + "I"
    H += [F + j]

if M[-2:] == "ar":
    H[3] = M[:-2] + "Abamos"

if Q in ['er', 'ib']:
    H[3] = H[3].title()

print(H)
Portes Zach
la source
1

Voie lactée 1.6.2 , 281 octets

'?{"ser"b_^"er";_}?{"ver"b_^"veI";_}?{"ir"b_^"ib";_}?{_:y2->CH=<1-&{~>;+<1-}^>;+<;_^""0}?{"ar"b_"ab";>+<0_}?{_"I";>+<_^}^;^"an ais amos a as a"" "\?{<y__<^}=3&{~<:>;>;+!^<1-}^?{'C=^"a"b_'C:y2->=^^<ΩG"Abamos"+!^^_}?{<"er"b_"Eramos"!^^_}?{<"ib"b_"Ibamos"!^^_}J:y1-;=<&{~<:>;>;+!^<1-}

Eh bien, cela a pris du temps! On dirait que j'ai besoin d'ajouter quelques builtins, hehe ...


Usage

./mw <path-to-code> -i <input>

Exemples

$ ./mw test.mwg -i "hablar"
hablaba
hablabas
hablaba
hablAbamos
hablabais
hablaban

$ ./mw test.mwg -i "ver"
veIa
veIas
veIa
veIamos
veIais
veIan
Portes Zach
la source
1

Rubis, 151 149

Normalement, 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.

->n{%w{a as a amos ais an}.map{|z|['3r','veI','1b',n[0..-3]+(n[-2]==?a?'@b':?I)][("ser ver ir  "+n).index(n)/4].tr('31@',['eia','EIA'][z.size/4])+z}}

Une caractéristique est l'utilisation d'espaces réservés 31@pour les voyelles accentuées qui dépendent des amosterminaisons. Ainsi, la tige correcte est formée, puis l'espace réservé est substitué à l'un deseia ou EIAselon le cas

Il y a quelques utilisations d'index de tableau négatifs ici. Doncn[-2] fait référence à la seconde au dernier caractère de l'entrée, et n[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

f=->n{
%w{a as a amos ais an}.map{|z|            #iterate through each verb ending
    ['3r','veI','1b',                     #array index 0,1,2 formats for irregular stems (note numbers 1 and 3 used as placeholders)
    n[0..-3]+(n[-2]==?a?'@b':?I)][        #array index 3 format for regular stems, AR->@b or ER/IR->I depending if A found at index -2 (@ used as placeholder)
    ("ser ver ir  "+n).index(n)/4]        #find index of input verb n in "ser ver ir  "+n, divide by 4 to obtain 0,1,2,3 above
    .tr('31@',['eia','EIA'][z.size/4])+   #if z is 4 characters long (AMOS) replace 3,1,@ with uppercase E,I,A. Otherwise with lowercase e,i,a
    z                                     #add the verb ending to the stem
  }
}

n=gets.chop
puts f[n]
Level River St
la source