ผันในภาษาสเปนที่ไม่สมบูรณ์ / Conjugue en el imperfecto de indicativo


13

ให้ข้อมูลของคำกริยาภาษาสเปนในรูปแบบ infinitive เอาท์พุทคำกริยาผันในทั้ง 6 รูปแบบของข้อบ่งชี้ที่ไม่สมบูรณ์

หากต้องการผัน infinitive ในข้อบกพร่องให้ลบจุดสิ้นสุด infinitive (-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 ที่พิมพ์ได้แทน

คำกริยา Infinitive จะมีความยาวสามหรือมากกว่าตัวอักษรยกเว้นกริยา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
Zach Gates

9
@ZachGates ดูสิคุณพูดอย่างนั้น แต่คุณไม่ได้เห็นอะไรเลยจนกว่าคุณจะได้เห็นก่อนหน้านี้ ไม่สมบูรณ์เป็นหนึ่งในกาลที่มีข้อยกเว้นน้อยที่สุด
Addison Crump

ฉันเคยเรียนภาษาสเปน 1-3 แล้ว 0/10 จะไม่แนะนำ @FlagAsSpam
Zach Gates

@ZachGates ฉันด้วย : c
Addison Crump

คำตอบ:


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ผัน, messes ขึ้นคำกริยาserและver( แต่น้อยลงพวกเขาในกระบวนการ) และใบเท่านั้นirและที่มีต่อท้าย-arr

r$
b

หากคำยังคงสิ้นสุดลงในเราแทนที่ด้วยr เราได้ครอบคลุมตอนนี้ผันมาตรฐานเช่นเดียวกับคำกริยาbir

^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 ตัวสุดท้าย (ก้าน infinitive)

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]
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.