İspanyol kusurunda eşlenik / Conjugue en el imperfecto de indicativo


13

Bir İspanyolca fiilin mastar biçiminde bir girdisi verildiğinde, gösterge kusurunun 6 formunun hepsinde konjuge edilen fiili çıktılayın.

Kusurlu olmayan bir mastarı konjuge etmek için mastarsız ucu (-ar, -er, -ir ve bazen -ír) çıkarın ve aşağıda listelenen kusurlu uçları ekleyin. Kusurda, aşağıda da listelenen üç düzensiz fiil vardı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

Bu meydan okuma için, aksanlı harfler yerine büyük harfler kullanın (á A olur, é E olur ve í I olur). Bunun nedeni, UTF-8'de aksanlı harflerin 2 bayt olması, ancak diğer kodlamalarda farklı olmalarıdır ve bununla başa çıkmak ve bunun yerine yazdırılabilir ASCII içinde kalmak istemem.

Sonsuz fiiller her zaman üç veya daha fazla karakter uzunluğunda olacaktır, sadece ir fi fiili hariç, asla -ír ile biten fiiller hariç aksanlı harfler içermez ve her zaman -ar, -er, -ir, veya -ír. Dönüşlü fiillerin ele alınması gerekmez.

Çıktı, boşlukla / virgülle ayrılmış bir dize biçiminde olabilir (bu nedenle, her konjugasyonu kendi satırında STDOUT'a yazdırmak uygundur) veya bir dizi / liste / vb.

Bu , bayt cinsinden en kısa kod kazanır.

Test senaryoları:

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
Pek çok istisna ..: P
Zach Gates

9
@ZachGates Bakın, bunu söylüyorsunuz, ama daha önce görünene kadar hiçbir şey görmediniz. Kusur, en az istisna dışında zamanlardan biridir.
Addison Crump

İspanyolca 1-3 aldım hehe. 0/10 @FlagAsSpam
Zach Gates'i

@ZachGates Beni de. : c
Addison Crump

Yanıtlar:


6

Retina , 100 82 bayt

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

Çevrimiçi deneyin. Ne yazık ki, kullanımı nedeniyle $_tüm testleri bir kerede çalıştırmak için kodu değiştirmek mümkün değildir, bu nedenle ayrı fiillere kopyalamanız gerekecektir. Bunu mümkün kılacak yeni bir özellik üzerinde çalışıyorum.

açıklama

\B[^a]r$
I

Biz olmayan tüm sonlar çevirerek başlamak ariçine Igirdi düzensiz fiil değildir sağlanan ir. Yani ilgilenir -er, -ir, -írçekimleri, düzensiz fiiller yukarı messes serve ver(ama süreç içinde kısalmaktadır onları) ve yaprakları sadece irve -arbir eğik ile r.

r$
b

Kelime hala bitiyorsa r, bunu a ile değiştiririz b. Şimdi tüm standart çekimleri ve düzensiz fiilleri ele aldık ir.

^vI$
veI

Bu , ilk aşamada verdönüştürülen düzensiz fiili giderir vI.

^sI$
er

Bu , ilk aşamada serdönüştürülen düzensiz fiili giderir sI. Şimdi tüm olası sapları doğru şekilde değiştirdik. Yapılması gereken tek şey tüm olası sonları eklemek ve daha sonra bazı durumlarda çoğul birinci kişi için aksanı düzeltmektir.

$
a

İlk aönce gövdeye bir ekleriz, çünkü bu her zaman tüm sonların bir parçasıdır.

$
 $_s $_ $_mos $_is $_n

Bu, $_dizenin tamamını ikame içine ekleyen nadiren görülür (eşleştirilene bakılmaksızın). Bu aslında olduğu gibi $`ve $'oldukça takdir edilmemiş dizeleri çoğaltırken çok kullanışlıdır .

Bu aşamadan önce ipte ilk tekil kişi var. Şimdi dizenin sonunu eşleştirerek ve $tekil birinci kişiye uygun sonekleri ekleyerek diğer formları oluşturarak diğer konjugasyonları ekliyoruz.

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

Son olarak, eğer varsa, birinci kişi çoğulunun aksanını sabitleriz. Bu sadece bir sesli harf için yapılmalıdır , aradaki karakter -amos olmadığı sürece iki karakter önünde I. Bu yüzden böyle bir karakteri eşleştiriyoruz ve daha sonra küçük harfe büyük harfe dönüştürmek için bir harf çevirisi aşaması kullanıyoruz. Bu markaları yeni karakter sınıfları kullanmak lve LDaha dün eklendi. Sırasıyla genişlerler a-zve A-Zböylece yeni özellik burada 4 bayt tasarrufu sağlar.


3

Python 3, 154 232 bayt

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)

Düzensiz fiillerdeki eksik başlıklar düzeltildi.


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

Samanyolu 1.6.2 , 281 bayt

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

Bu biraz zaman aldı! Görünüşe göre bazı yerleşikler eklemeliyim, hehe ...


kullanım

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

Örnekler

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

$ ./mw test.mwg -i "ver"
veIa
veIas
veIa
veIamos
veIais
veIan

1

Yakut, 151 149

Normalde, okunabilirliğin yararına olabildiğince noktalı virgül üzerinden yeni bir satır seçeceğim, ancak noktalı virgül olmadığından, bu tek bir astardır.

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

Bir özellik, sonlara 31@bağlı olan aksanlı ünlüler için yer tutucuların kullanılmasıdır amos. Böylece doğru sap oluşturulur ve daha sonra yer tutucu, biri eiaveya EIAuygun olduğu için

Burada negatif dizi indekslerinin birkaç kullanımı vardır. Böylece n[-2]girişin ikinci ila son karakterine n[0..-3]atıfta bulunur ve son 2 karakterin kaldırıldığı girişe (mastarsız kök) karşılık gelir.

Test programında yönlendirilmemiş

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]
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.