Konjugasi dalam imperfecto Spanyol / Conjugue en el imperfecto de indicativo

13

Diberikan input dari kata kerja Spanyol dalam bentuk infinitifnya, mengeluarkan kata kerja terkonjugasi dalam semua 6 bentuk indikatif yang tidak sempurna.

Untuk mengkonjugasikan infinitif dalam imperfect, hapus akhir infinitif (-ar, -er, -ir, dan kadang-kadang) dan tambahkan akhiran tidak sempurna yang tercantum di bawah ini. Ada tiga kata kerja tidak beraturan dalam imperfect, juga tercantum di bawah ini.

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

Untuk keperluan tantangan ini, gunakan huruf kapital alih-alih huruf beraksen (á menjadi A, é menjadi E, dan í menjadi I). Ini hanya karena huruf beraksen 2 byte dalam UTF-8, tetapi mereka dapat berbeda dalam pengkodean lainnya, dan saya lebih suka tidak harus berurusan dengan semua itu dan tetap dalam ASCII yang dapat dicetak sebagai gantinya.

Kata kerja infinitif akan selalu terdiri dari tiga atau lebih karakter dengan satu-satunya pengecualian dari kata kerja ir , tidak akan pernah mengandung huruf beraksen dengan pengecualian kata kerja yang berakhiran -r, dan akan selalu diakhiri dengan baik -ar, -er, -ir, atau -Ir. Kata kerja refleksif tidak perlu ditangani.

Output dapat berupa string whitespace- / comma-separated (jadi mencetak setiap konjugasi ke STDOUT pada barisnya sendiri boleh-boleh saja) atau array / daftar / etc.

Karena ini , kode terpendek dalam byte akan menang.

Kasus uji:

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
Gagang pintu
sumber
1
Begitu banyak pengecualian ..: P
Zach Gates
9
@ZachGates Lihat, Anda mengatakan itu, tetapi Anda belum melihat apa pun sampai Anda melihat preterite. Imperfect adalah salah satu bentuk kata dengan pengecualian paling sedikit.
Addison Crump
Saya sudah menggunakan bahasa Spanyol 1-3, hehe. 0/10 tidak akan merekomendasikan @FlagAsSpam
Zach Gates
@ZachGates Me juga. : c
Addison Crump

Jawaban:

6

Retina , 100 82 byte

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

Cobalah online. Sayangnya, karena penggunaannya $_tidak mungkin untuk memodifikasi kode untuk menjalankan semua tes sekaligus, jadi Anda harus menyalin dalam kata kerja individual. Saya sedang mengerjakan fitur baru yang akan memungkinkan hal ini.

Penjelasan

\B[^a]r$
I

Kita mulai dengan memutar semua ujung yang tidak armenjadi I, asalkan input bukan kata kerja tidak beraturan ir. Yang membutuhkan perawatan dari -er, -ir, -írkonjugasi, messes up kata kerja tidak teratur serdan ver(tapi memendek mereka dalam proses), dan daun hanya irdan -ardengan Trailing r.

r$
b

Jika kata masih berakhir r, kami gantikan dengan a b. Kami sekarang telah membahas semua konjugasi standar serta kata kerja tidak beraturan ir.

^vI$
veI

Ini memperbaiki kata kerja tidak beraturan veryang telah diubah menjadi vIpada tahap pertama.

^sI$
er

Ini memperbaiki kata kerja tidak beraturan seryang telah diubah menjadi sIpada tahap pertama. Sekarang kami telah memodifikasi semua batang yang mungkin dengan benar. Yang perlu dilakukan hanyalah menambahkan semua kemungkinan akhir, dan kemudian memperbaiki aksen untuk jamak orang pertama dalam beberapa kasus.

$
a

Pertama kita menambahkan sebuah ake batang, karena itu selalu menjadi bagian dari semua ujung.

$
 $_s $_ $_mos $_is $_n

Ini menggunakan yang jarang terlihat $_yang memasukkan seluruh string ke dalam substitusi (terlepas dari apa yang cocok). Ini sebenarnya sangat berguna ketika menduplikasi string, sebagaimana adanya $`dan $', yang juga cukup dihargai.

Sebelum tahap ini, kita memiliki orang pertama tunggal dalam string. Kami sekarang menambahkan konjugasi lain, dengan mencocokkan ujung string dengan $dan membangun bentuk lain dengan menambahkan sufiks yang sesuai ke orang pertama tunggal.

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

Akhirnya, kami memperbaiki aksen untuk orang pertama jamak jika berlaku. Ini hanya perlu dilakukan untuk vokal, dua karakter di depan -amos kecuali karakter di antaranya I. Jadi kami mencocokkan karakter tersebut dan kemudian menggunakan tahap transliterasi untuk mengonversi huruf kecil ke huruf besar. Ini memanfaatkan kelas karakter baru ldan Lyang baru saya tambahkan kemarin. Mereka memperluas ke a-zdan A-Zmasing - masing, sehingga fitur baru menyimpan 4 byte di sini.

Martin Ender
sumber
3

Python 3, 154 232 byte

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)

Memperbaiki modal yang hilang dalam kata kerja tidak beraturan.


Tidak disatukan

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
sumber
1

Bima Sakti 1.6.2 , 281 byte

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

Nah itu butuh waktu sebentar! Sepertinya saya perlu menambahkan beberapa builtin, hehe ...


Pemakaian

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

Contohnya

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

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

Ruby, 151 149

Biasanya, saya akan memilih baris baru daripada titik koma di mana mungkin untuk kepentingan keterbacaan, tetapi karena tidak ada titik koma, ini adalah garis satu.

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

Fitur adalah penggunaan placeholder 31@untuk vokal beraksen yang tergantung pada amosakhir. Dengan demikian batang yang benar terbentuk, dan kemudian pengganti diganti untuk salah satu eiaatauEIA sesuai

Ada beberapa penggunaan indeks array negatif di sini. Dengan demikian n[-2]mengacu pada karakter kedua hingga terakhir dari input, dann[0..-3] mengacu pada input dengan 2 karakter terakhir dihapus (batang infinitif).

Tidak digabungkan dalam program uji

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
sumber