Кон’югат в іспанському недосконалому / 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). Це лише тому, що букви з наголосом - це 2 байти в UTF-8, але вони можуть бути різними в інших кодуваннях, і я, швидше за все, не повинен мати справу з цим і залишатися в межах ASCII для друку.

Інфінітивні дієслова завжди матимуть три чи більше символів за винятком виключення дієслова ir , ніколи не містять наголошених літер за винятком дієслів, які закінчуються на -ír, і завжди закінчуються або -ar, -er, -ir, або -ír. З рефлексивними дієсловами не потрібно поводитися.

Вихід може бути або у формі рядка, розділеного пробілом / комами (тому друк кожної кон'югації до 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
Стільки винятків ..: П
Зах Гейтс

9
@ZachGates Дивіться, ви це говорите, але ви нічого не бачили, поки не побачили заздалегідь. Недосконалий - це один із часів з найменшими винятками.
Аддісон Кримп

Я взяв іспанську 1-3, хе-хе. 0/10 не рекомендував би @FlagAsSpam
Zach Gates

@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

Пітон 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)

Виправлені відмінні літери у неправильних дієсловах.


Безумовно

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 символами (інфінітивний стебло).

Ungolfed в тестовій програмі

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]
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.