Conjugado en el imperfecto español / Conjugación en el imperfecto de indicativo

13

Dada la entrada de un verbo español en su forma infinitiva, se obtiene el verbo conjugado en las 6 formas del imperfecto indicativo.

Para conjugar un infinitivo en lo imperfecto, elimine la terminación infinitiva (-ar, -er, -ir y, a veces, -ír) y agregue las terminaciones imperfectas que se enumeran a continuación. Hay tres verbos irregulares en el imperfecto, que también se enumeran a continuación.

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

Para los propósitos de este desafío, use letras mayúsculas en lugar de letras acentuadas (á se convierte en A, é se convierte en E e í se convierte en I). Esto es solo porque las letras acentuadas son de 2 bytes en UTF-8, pero pueden ser diferentes en otras codificaciones, y prefiero no tener que lidiar con nada de eso y permanecer en ASCII imprimible.

Los verbos infinitivos siempre tendrán tres o más caracteres de largo con la única excepción del verbo ir , nunca contendrán letras acentuadas con la excepción de los verbos que terminan en -ír, y siempre terminarán en -ar, -er, -ir, o -ír. Los verbos reflexivos no necesitan ser manejados.

La salida puede estar en forma de una cadena separada por comas / espacios en blanco (por lo que imprimir cada conjugación a STDOUT en su propia línea está bien) o una matriz / lista / etc.

Como esto es , gana el código más corto en bytes.

Casos de prueba:

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
Pomo de la puerta
fuente
1
Tantas excepciones ...: P
Zach Gates
99
@ZachGates Mira, dices eso, pero no has visto nada hasta que has visto pretérito. Imperfecto es uno de los tiempos con las menos excepciones.
Addison Crump
He tomado español 1-3, jeje. 0/10 no recomendaría @FlagAsSpam
Zach Gates
@ZachGates Me también. : c
Addison Crump

Respuestas:

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 )

Pruébalo en línea. Desafortunadamente, debido al uso de $_no es posible modificar el código para ejecutar todas las pruebas a la vez, por lo que tendrá que copiar los verbos individuales. Sin embargo, estoy trabajando en una nueva característica que lo hará posible.

Explicación

\B[^a]r$
I

Comenzamos girando todas las terminaciones que no están ardentro I, siempre que la entrada no sea el verbo irregularir . Que se encarga de la -er, -ir, -írconjugaciones, meta la pata de los verbos irregulares sery ver(pero ellos se acorta en el proceso), y las hojas únicas iry -arcon un arrastre r.

r$
b

Si la palabra todavía termina en r, reemplazamos eso con a b. Ahora hemos cubierto todas las conjugaciones estándar, así como el verbo irregular ir.

^vI$
veI

Esto corrige el verbo irregular verque se ha convertido vIen la primera etapa.

^sI$
er

Esto corrige el verbo irregular serque se ha convertido sIen la primera etapa. Ahora hemos modificado todos los tallos posibles correctamente. Todo lo que queda por hacer es agregar todas las terminaciones posibles, y luego arreglar el acento para la primera persona del plural en algunos casos.

$
a

Primero agregamos un aa la raíz, porque eso siempre es parte de todas las terminaciones.

$
 $_s $_ $_mos $_is $_n

Esto hace uso de lo que rara vez se ve, $_que inserta toda la cadena en la sustitución (independientemente de lo que coincida). En realidad, esto es muy útil cuando se duplican cadenas, como son $`y $', que también se subestiman bastante.

Antes de esta etapa, tenemos la primera persona del singular en la cadena. Ahora agregamos las otras conjugaciones, haciendo coincidir el final de la cadena con$ y construyendo las otras formas agregando los sufijos apropiados a la primera persona del singular.

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

Finalmente, arreglamos el acento para la primera persona del plural, si corresponde. Esto solo debe hacerse para una vocal, dos caracteres en frente de a -amos menos que el carácter intermedio sea I. Así que combinamos un personaje así y luego usamos una etapa de transliteración para convertir minúsculas a mayúsculas. Esto hace uso de las nuevas clases de personajes ly Lque solo agregué ayer. Se expanden a a-zy A-Zrespectivamente, de modo que la nueva característica ahorra 4 bytes aquí.

Martin Ender
fuente
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)

Se corrigieron las mayúsculas faltantes en verbos irregulares.


Sin 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)
Puertas de Zach
fuente
1

Vía Láctea 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-}

Bueno, eso tomó un tiempo! Parece que necesito agregar algunas incorporaciones, jeje ...


Uso

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

Ejemplos

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

$ ./mw test.mwg -i "ver"
veIa
veIas
veIa
veIamos
veIais
veIan
Puertas de Zach
fuente
1

Rubí, 151 149

Normalmente, elegiré una nueva línea sobre un punto y coma cuando sea posible en aras de la legibilidad, pero como no hay punto y coma, este es un trazador de líneas.

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

Una característica es el uso de marcadores de posición 31@para las vocales acentuadas que dependen de las amosterminaciones. Por lo tanto, se forma el vástago correcto, y luego el marcador de posición se sustituye por uno eiao EIAsegún corresponda

Hay algunos usos de los índices de matriz negativos aquí. Por lo tanto, se n[-2]refiere al penúltimo carácter de la entrada y se n[0..-3]refiere a la entrada con los últimos 2 caracteres eliminados (la raíz infinitiva).

Sin golf en el programa de prueba

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
fuente