Конъюгат в испанском несовершенном / Conjugue en el imperfecto de indicativo

13

Учитывая ввод испанского глагола в его инфинитивном виде, выведите глагол, спряженный во всех 6 формах показательного несовершенного.

Чтобы связать инфинитив в несовершенном, удалите окончание инфинитива (-ar, -er, -ir и иногда -ír) и добавьте несовершенные окончания, перечисленные ниже. В несовершенном есть три неправильных глагола, также перечисленных ниже.

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

Для целей этого задания используйте заглавные буквы вместо акцентированных букв (á становится A, é становится E, а í становится I). Это только потому, что в UTF-8 буквы с акцентом составляют 2 байта, но они могут отличаться в других кодировках, и я бы предпочел не иметь дело с этим и вместо этого оставаться в формате ASCII для печати.

Инфинитивные глаголы всегда будут состоять из трех или более символов, за исключением одного глагола ir , никогда не будут содержать букв с акцентом, за исключением глаголов, оканчивающихся на -ír, и всегда будут заканчиваться либо -ar, -er, -ir, или ... Отражательные глаголы не нужно обрабатывать.

Вывод может быть либо в виде строки, разделенной пробелами / запятыми (так что печать каждого сопряжения в STDOUT в отдельной строке, либо в порядке), либо в виде массива / списка / и т. Д.

Поскольку это , выигрывает самый короткий код в байтах.

Тестовые случаи:

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
Дверная ручка
источник
1
Столько исключений ..: P
Зак Гейтс
9
@ ZachGates Видите, вы так говорите, но ничего не видели, пока не увидели претерит. Несовершенный является одним из времен с наименьшими исключениями.
Эддисон Крамп
Я взял испанский 1-3, хе-хе. 0/10 не рекомендовал бы @FlagAsSpam
Зак Гейтс
@ ZachGates Я тоже. : c
Эддисон Крамп

Ответы:

6

Сетчатка , 100- 82 байта

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

Попробуйте онлайн. К сожалению, из-за использования $_невозможно изменить код для одновременного выполнения всех тестов, поэтому вам придется копировать отдельные глаголы. Я работаю над новой функцией, которая сделает это возможным.

объяснение

\B[^a]r$
I

Мы начинаем с превращения всех концов, которые не arв I, при условии, что ввод не является неправильным глаголом ir. Это заботится о -er, -ir, -írконъюгации, портит неправильные глаголы serи ver(но укорачивают их в процессе), и только листов irи -arс завершающим r.

r$
b

Если слово все еще заканчивается r, мы заменим это на b. Теперь мы рассмотрели все стандартные спряжения, а также неправильный глагол ir.

^vI$
veI

Это исправляет неправильный глагол, verкоторый был превращен на vIпервом этапе.

^sI$
er

Это исправляет неправильный глагол, serкоторый был превращен на sIпервом этапе. Теперь мы правильно изменили все возможные основы. Все, что осталось сделать, это добавить все возможные окончания, а затем исправить акцент для первого лица множественного числа в некоторых случаях.

$
a

Сначала мы добавляем aк основанию, потому что это всегда часть всех окончаний.

$
 $_s $_ $_mos $_is $_n

Это использует редко видимый, $_который вставляет всю строку в подстановку (независимо от того, что было найдено). Это на самом деле очень полезно при дублировании строк, которые есть $`и $'которые также недооцениваются.

До этого этапа у нас есть первый человек в единственном числе в строке. Теперь мы добавляем другие спряжения, сопоставляя конец строки $и создавая другие формы, добавляя соответствующие суффиксы к единственному лицу первого лица.

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

Наконец, мы фиксируем акцент для первого лица во множественном числе, если применимо. Это нужно сделать только для гласного, двух символов перед символом, -amos если символ между ними не является I. Таким образом, мы сопоставляем такой символ и затем используем этап транслитерации для преобразования нижнего регистра в верхний. Это делает использование новых классов персонажей lи Lкоторые я только добавленные вчера. Они расширяются до a-zи A-Zсоответственно, так что новая функция сохраняет здесь 4 байта.

Мартин Эндер
источник
3

Python 3, 154 232 байта

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)

Исправлены пропущенные заглавные буквы в неправильных глаголах.


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)
Зак Гейтс
источник
1

Млечный Путь 1.6.2 , 281 байт

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

Ну, это заняло некоторое время! Похоже, мне нужно добавить несколько встроенных элементов, хе-хе ...


использование

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

Примеры

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

$ ./mw test.mwg -i "ver"
veIa
veIas
veIa
veIamos
veIais
veIan
Зак Гейтс
источник
1

Рубин, 151 149

Обычно я выбираю новую строку над точкой с запятой, где это возможно, в интересах удобочитаемости, но, поскольку точек с запятой нет, это одна строка.

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

Особенностью является использование заполнителей 31@для ударных гласных, которые зависят от amosокончаний. Таким образом, формируется правильный стебель, а затем замещающий элемент заменяется на один из eiaили, EIAесли необходимо,

Здесь есть несколько примеров использования отрицательных индексов массивов. Таким образом, n[-2]относится ко второму-последнему символу ввода и n[0..-3]относится к вводу с удаленными последними 2 символами (инфинитивный стержень).

Неуправляемый в тестовой программе

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]
Уровень реки St
источник