スペイン語の不完全性の共役/ Condigue en el imperfecto de indicativo


13

その不定形のスペイン語の動詞の入力が与えられた場合、示唆的な不完全の6つの形式すべてに活用された動詞を出力します。

不定詞を不完全に結合するには、不定詞の末尾(-ar、-er、-ir、場合によっては-ír)を削除し、以下にリストされている不完全な末尾を追加します。不完全には3つの不規則な動詞がありますが、以下にもリストされています。

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になります)。これは、アクセント付き文字がUTF-8で2バイトであるためですが、他のエンコーディングでは異なる場合があるため、そのいずれかに対処する必要はなく、代わりに印刷可能なASCII内に留まる必要があります。

不定詞は、irを除いて常に3文字以上の長さであり、-í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
だから、多くの例外..:P
ザック・ゲイツ

9
@ZachGatesほら、あなたはそう言いますが、あなたはプリテライトを見るまで何も見ませんでした。不完全は、例外を除いて時制の1つです。
アディソンクランプ

スペイン語1-3を撮影しました。0/10は@FlagAsSpamお勧めしません
ザック・ゲイツ

@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 場合を除き、2文字前にあり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)

不規則動詞の欠落した大文字を修正しました。


非ゴルフ

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

通常、読みやすいようにセミコロンよりも改行を選択しますが、セミコロンがないため、これは1つのライナーです。

->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]、入力の最後から2番目の文字をn[0..-3]指し、最後の2文字が削除された入力を指します(不定語幹)。

テストプログラムでゴルフをしていない

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.