Konjugieren im Unvollkommenen Spanisch / Conjugue en el imperfecto de indicativo

13

Wenn Sie ein spanisches Verb in seiner Infinitivform eingeben, geben Sie das Verb aus, das in allen 6 Formen des indikativen Imperfekts konjugiert ist.

Um einen Infinitiv im Imperfekt zu konjugieren, entfernen Sie die Endung des Infinitivs (-ar, -er, -ir und manchmal -ir) und fügen Sie die unten aufgeführten unvollständigen Endungen hinzu. Es gibt drei unregelmäßige Verben im Imperfekt, die ebenfalls unten aufgeführt sind.

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

Verwenden Sie für diese Herausforderung Großbuchstaben anstelle von Buchstaben mit Akzenten (á wird A, é wird E und í wird I). Dies liegt nur daran, dass akzentuierte Buchstaben in UTF-8 2 Byte lang sind. In anderen Codierungen können sie jedoch unterschiedlich sein, und ich möchte mich lieber nicht mit all dem befassen und stattdessen in druckbarem ASCII bleiben.

Infinitive Verben bestehen mit Ausnahme des Verbs ir immer aus drei oder mehr Zeichen , enthalten niemals Buchstaben mit Akzent, mit Ausnahme von Verben, die mit -ir enden, und enden immer mit -ar, -er, -ir, oder -ír. Reflexive Verben müssen nicht behandelt werden.

Die Ausgabe kann entweder in Form einer durch Leerzeichen / Kommas getrennten Zeichenfolge (das Drucken jeder Konjugation auf STDOUT in einer eigenen Zeile ist in Ordnung) oder eines Arrays / einer Liste / usw. erfolgen.

Da es sich um , der kürzeste Code in Bytes gewinnt.

Testfälle:

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
Türknauf
quelle
1
So viele Ausnahmen ..: P
Zach Gates
9
@ZachGates Sehen Sie, Sie sagen das, aber Sie haben nichts gesehen, bis Sie Präteritum gesehen haben. Unvollkommenheit ist eine der Zeiten mit den wenigsten Ausnahmen.
Addison Crump
Ich habe Spanisch 1-3 genommen, hehe. 0/10 würde @FlagAsSpam
Zach Gates
@ZachGates Ich auch. : c
Addison Crump

Antworten:

6

Retina , 100 82 Bytes

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

Probieren Sie es online aus. Leider ist es aufgrund der Verwendung von $_nicht möglich, den Code so zu ändern, dass alle Tests gleichzeitig ausgeführt werden. Daher müssen Sie die einzelnen Verben kopieren. Ich arbeite an einer neuen Funktion, die dies jedoch ermöglichen wird.

Erläuterung

\B[^a]r$
I

Wir beginnen mit dem Umdrehen aller Enden, die nicht arin sind I, vorausgesetzt, die Eingabe ist nicht das unregelmäßige Verb ir. Das kümmert sich um die -er, -ir, -írKonjugationen, verunstaltet die unregelmäßigen Verben serund ver(aber kürzt sie in den Prozess) und Blätter nur irund -armit einem nachgestellten r.

r$
b

Wenn das Wort immer noch auf endet r, ersetzen wir es durch ein b. Wir haben jetzt alle Standardkonjugationen sowie das unregelmäßige Verb behandelt ir.

^vI$
veI

Dies behebt das unregelmäßige Verb, verdas vIin der ersten Stufe verwandelt wurde .

^sI$
er

Dies behebt das unregelmäßige Verb, serdas sIin der ersten Stufe verwandelt wurde . Jetzt haben wir alle möglichen Stiele korrekt modifiziert. Alles, was Sie tun müssen, ist, alle möglichen Endungen anzuhängen und dann in einigen Fällen den Akzent für den Plural der ersten Person festzulegen.

$
a

Zuerst hängen wir aan den Stiel an, denn das ist immer Teil aller Endungen.

$
 $_s $_ $_mos $_is $_n

Dabei wird das selten zu sehende verwendet, $_das die gesamte Zeichenfolge in die Ersetzung einfügt (unabhängig davon, was abgeglichen wurde). Dies ist eigentlich sehr nützlich, wenn man Strings dupliziert, so wie sie sind $`und $'die auch ziemlich unterschätzt werden.

Vor dieser Phase haben wir die erste Person, die Singular in der Saite ist. Wir hängen nun die anderen Konjugationen an, indem wir das Ende der Zeichenkette mit $den anderen Formen abgleichen und diese aufbauen , indem wir die entsprechenden Suffixe an den Singular der ersten Person anhängen.

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

Schließlich legen wir den Akzent für die erste Person im Plural fest, falls zutreffend. Dies muss nur für einen Vokal durchgeführt werden, zwei Zeichen vor dem, es -amos sei denn, das Zeichen dazwischen ist I. Also passen wir ein solches Zeichen an und verwenden dann eine Transliterationsstufe, um Klein- in Großbuchstaben umzuwandeln. Dieser nutzt die neuen Charakterklassen lund Ldie ich gestern nur hinzugefügt. Sie erweitern a-zund A-Zjeweils so , dass neue Funktion 4 Bytes hier spart.

Martin Ender
quelle
3

Python 3, 154 232 Bytes

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)

Die fehlenden Großbuchstaben in unregelmäßigen Verben wurden korrigiert.


Ungolfed

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)
Zach Gates
quelle
1

Milchstraße 1.6.2 , 281 Bytes

'?{"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-}

Nun , das hat eine Weile gedauert! Sieht so aus, als müsste ich ein paar Builtins hinzufügen, hehe ...


Verwendung

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

Beispiele

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

$ ./mw test.mwg -i "ver"
veIa
veIas
veIa
veIamos
veIais
veIan
Zach Gates
quelle
1

Ruby, 151 149

Normalerweise wähle ich aus Gründen der Lesbarkeit eine neue Zeile anstelle eines Semikolons. Da es jedoch keine Semikolons gibt, handelt es sich um einen Einzeiler.

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

Ein Merkmal ist die Verwendung von Platzhaltern 31@für die betonten Vokale, die von den amosEndungen abhängen . So wird der richtige Stamm gebildet, und dann wird der Platzhalter durch einen von eiaoder EIAnach Bedarf ersetzt

Es gibt hier ein paar Verwendungen von negativen Array-Indizes. Somit n[-2]bezieht sich auf die zweite bis letzte Zeichen des Eingangs, und n[0..-3]bezieht sich auf die Eingabe mit der letzten 2 Zeichen entfernt (der Infinitivform STEM).

Ungolfed im Testprogramm

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
quelle