Koniugat w hiszpańskim imperfect / Conjugue en el imperfecto de indicativo

13

Biorąc pod uwagę czasownik hiszpański w jego bezokolicznikowej formie, wypisz czasownik skoniugowany we wszystkich 6 formach niedokonanego znaku.

Aby skoniugować bezokolicznik z niedoskonałym, usuń bezokolicznikowe zakończenie (-ar, -er, -ir, a czasami -ír) i dodaj niedoskonałe zakończenia wymienione poniżej. W niedoskonałym są trzy czasowniki nieregularne, również wymienione poniżej.

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

Do celów tego wyzwania używaj wielkich liter zamiast liter akcentowanych (á staje się A, é staje się E, a í staje się I). Jest tak tylko dlatego, że litery akcentowane mają 2 bajty w UTF-8, ale mogą być inne w innych kodowaniach i wolałbym nie mieć do czynienia z żadnym z nich i pozostać w drukowanym ASCII.

Czasowniki bezokolicznikowe zawsze będą miały co najmniej trzy znaki, z wyjątkiem czasownika ir , nigdy nie będą zawierać liter akcentowanych, z wyjątkiem czasowników kończących się na -ír, i zawsze kończą się na -ar, -er, -ir, lub -ír. Czasowniki zwrotne nie muszą być obsługiwane.

Dane wyjściowe mogą być w postaci łańcucha oddzielonego spacjami / przecinkami (więc drukowanie każdej koniugacji do STDOUT w osobnym wierszu jest w porządku) lub tablicy / listy / itp.

Ponieważ jest to , wygrywa najkrótszy kod w bajtach.

Przypadki testowe:

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
Klamka
źródło
1
Tak wiele wyjątków ..: P
Zach Gates
9
@ZachGates Widzisz, mówisz tak, ale nic nie widziałeś, dopóki nie widziałeś preterite. Niedoskonały jest jednym z czasów z najmniejszymi wyjątkami.
Addison Crump
Wziąłem hiszpański 1-3, hehe. 0/10 nie poleciłoby @FlagAsSpam
Zach Gates
@ZachGates Me also. : c
Addison Crump

Odpowiedzi:

6

Siatkówka , 100 82 bajtów

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

Wypróbuj online. Niestety ze względu na użycie $_nie jest możliwe zmodyfikowanie kodu, aby uruchomić wszystkie testy na raz, więc będziesz musiał skopiować poszczególne czasowniki. Pracuję nad nową funkcją, która sprawi, że będzie to możliwe.

Wyjaśnienie

\B[^a]r$
I

Zaczynamy od przekształcenia wszystkich zakończeń, które nie są arw I, pod warunkiem, że dane wejściowe nie są czasownikiem nieregularnym ir. Który dba o -er, -ir, -írkoniugacje, bałagan nieregularnych czasowników seri ver(ale skraca ich w proces), a pozostawia tylko iri -arz oznaczeniami r.

r$
b

Jeśli słowo nadal się kończy r, zastępujemy je znakiem b. Omówiliśmy teraz wszystkie standardowe odmiany, jak również czasownik nieregularny ir.

^vI$
veI

Naprawia to czasownik nieregularny, verktóry został przekształcony vIw pierwszym etapie.

^sI$
er

Naprawia to czasownik nieregularny, serktóry został przekształcony sIw pierwszym etapie. Teraz poprawnie zmodyfikowaliśmy wszystkie możliwe łodygi. Wystarczy dodać wszystkie możliwe zakończenia, a następnie w niektórych przypadkach naprawić akcent dla liczby pierwszej w liczbie mnogiej.

$
a

Najpierw dołączamy ado rdzenia, ponieważ zawsze jest to część wszystkich zakończeń.

$
 $_s $_ $_mos $_is $_n

Wykorzystuje to rzadko widziane, $_które wstawia cały ciąg do podstawienia (niezależnie od tego, co zostało dopasowane). Jest to w rzeczywistości bardzo przydatne przy powielaniu ciągów, które są $`i $'są również niedoceniane.

Przed tym etapem mamy pierwszą osobę w liczbie pojedynczej. Teraz dołączamy inne koniugacje, dopasowując koniec łańcucha $i budując inne formy, dodając odpowiednie sufiksy do pierwszej osoby liczby pojedynczej.

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

Na koniec naprawiamy akcent dla pierwszej osoby liczby mnogiej, jeśli dotyczy. Tę czynność należy wykonać tylko dla samogłoski, czyli dwóch znaków przed znakiem, -amos chyba że między nimi jest znak I. Dopasowujemy więc taki znak, a następnie używamy etapu transliteracji, aby przekonwertować małe na wielkie litery. To sprawia, że korzystanie z nowych klas postaci li Lktóre tylko dodanych wczoraj. Rozwijają się odpowiednio do a-zi A-Z, dzięki czemu nowa funkcja oszczędza tutaj 4 bajty.

Martin Ender
źródło
3

Python 3, 154 232 bajty

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)

Naprawiono brakujące litery w czasownikach nieregularnych.


Nie golfił

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
źródło
1

Droga Mleczna 1.6.2 , 281 bajtów

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

Cóż , zajęło to chwilę! Wygląda na to, że muszę dodać trochę wbudowanych elementów, hehe ...


Stosowanie

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

Przykłady

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

$ ./mw test.mwg -i "ver"
veIa
veIas
veIa
veIamos
veIais
veIan
Zach Gates
źródło
1

Ruby, 151 149

Zwykle wybieram nowy wiersz zamiast średnika, jeśli to możliwe, ze względu na czytelność, ale ponieważ nie ma średników, jest to jedna linijka.

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

Cechą jest użycie symboli zastępczych 31@dla akcentowanych samogłosek, które zależą od amoszakończeń. W ten sposób powstaje prawidłowy rdzeń, a następnie symbol zastępczy jest zastępowany przez jeden eialub EIAodpowiednio

Istnieje kilka zastosowań ujemnych indeksów tablic. n[-2]Odnosi się zatem do drugiego do ostatniego znaku wejścia i n[0..-3]odnosi się do wejścia z usuniętymi 2 ostatnimi znakami (rdzeń bezokolicznika).

Niegolfowany w programie testowym

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
źródło