スペイン語の動詞の活用


8

説明

ほら!スペイン語をとらないあなたのために、動詞は行動をする人に基づいて活用されます。これがチャートです:

English                   Spanish
I                         Yo
You                       Tú
He                        Él
She                       Ella
You (formal)              Usted
We all                    Nosotros
You all                   Vosotros
They (masculine, plural)  Ellos
They (feminine, plural)   Ellas
You (plural)              Ustedes

スペインでは、すべての動詞の末尾arerまたはir。次に、別の役立つグラフを示します。

          Ar    Er    Ir
Yo        o     o     o
Tú        as    es    es
Él        a     e     e
Ella      a     e     e
Usted     a     e     e
Nosotros  amos emos imos
Vosotros  áis  éis  ís
Ellos     an   en   en
Ellas     an   en   en
Ustedes   an   en   en

代名詞と動詞が与えられた場合、現在形で代名詞を使用して活用動詞を出力します。語幹の変化や奇妙な動詞については心配しないでください。


Input        Output
Yo escribir  Escribo
Tu enseñar   Enseñas
Ella querer  Quere (It should be quiere but ignore stem changes)

言語がアクセント付きの印刷をサポートしていない場合は、それらを省略できます。それ以外の場合は、コードでaの代わりにáを使用するために、これ以上の文字は必要ありません。

ここでテストする単語をさらに見つけることができます:http : //spanish.speak7.com/spanish_vocabulary_verbs.htm。コンテスト参加者はcontestarである必要があることに注意してください。


チャレンジ:ステムの変更

スペイン語では、いくつかの動詞に語幹変化があります。動詞quererを例にとってみましょう。nosotrosとvosotros除くすべての形式で、最初のはにe変わりますie。それで、yo quieroしかしnosotros queremos。プログラムが語幹変化を考慮できる場合、最終スコアから、サポートする各単語の長さの2倍を引くことができます。たとえば、i->のie変更quererのみをサポートしている場合、スコアからquerer長さの2倍querer、つまり12 を減算できます。

語幹を変えるいくつかの動詞については、これを試してください:https : //conjuguemos.com/chart.php?language=spanish&id =2&etre= no&commands=no&all=no&source=public


小さなボーナス

面白くするために、スペイン語でコードの機能を説明する場合は、スコアから30を外してください。Google翻訳だけを使用しないでください。だまされたことがわかります。


(私はスペイン語のネイティブスピーカーではないので、間違いがあれば訂正してください)


2
私はスペイン語をとらず、ただ話すだけです。しかし、a)は代名詞の主格形です。tuは属格です。b)動詞は代名詞と「ペア」になっていない。c)主格代名詞がスペイン語で使用されることはめったにないため、この演習は悪い習慣を教えます。d)これは現在の指標を活用するだけであることを言及する必要があります。e)代名詞(別名再帰)動詞を処理する方法を述べていません。f)最も一般的な動詞は不規則なので、これは実用的なツールではありません。不規則性を心配せずに動詞活用の質問をしたい場合は、カステラーノの代わりにエスペラントを使用する必要があります。
Peter Taylor

1
a)今それを修正します。b)十分に公正な修正。c)本当ですが、これは使用可能なツールというよりも課題としての意味があります。代名詞(yo escribir-> escribo)を出力する要件を削除することもできますが、そのまま残しておきます。f)「通常の」スペイン語のままにし、「特別な」動詞のチャレンジを追加します。私が失礼な行動をとらなかったといいのですが、フィードバックに感謝します。
nrubin29 2014年

3
私が回答に取り組んでいる最中に、ボーナスチャレンジを追加してスコアを変更しました!追加のボーナススコアの変更と今後の変更の約束のため、私はこれにゴルフをすることにもはや興味がありません。私はすでに1時間無駄にしており、その1時間はあなたの反対票になっています。
Rainbolt 2014年

2
@ nrubin29:私は反対投票はしませんでしたが、Rusherと同意します。質問が投稿された後、特に回答が既に投稿された後は、スコアやルールを変更しないでください。まだ質問に満足していない場合は、サンドボックスを使用してください。
Claudiu 2014年

1
@grovesNL少なくとも-30で大きな違いはありません。この質問を殺したのは、語幹変化動詞の無制限のボーナスです。私たちはOPのあいまいさを解決したと思ったのですが、突然彼は2つの新しいボーナスを投げ、ラッシャーを怒らせました。うまくいけば、彼は先を考え、サンドボックスを使用し、投稿後に質問に少しも追加しないことを学ぶでしょう。今戻るには遅すぎます。
Level River St

回答:


3

Pythonの、172の 168 743文字- 1796回のボーナス= -1053

ステム変更の課題に対応するために更新されました。

p,v=raw_input().split()
y="aee";z=y+'n'
x=["ooo",y+'s',y,y,y,"aeimos","ae\x00is",z,z]["YoTuElEaUdNsVsEsUs".index(p[0]+p[-1])/2]
s=v[:-2]
X=v='eJw1UuHS5CAIe1aqrNsZhR6w/tj5Hv4Sv7uODRYDxEzlylKTplHS3xrS/3yIm4kntCTVSipkazaZ\n+AA32h3tY1ut+VL7NreXxsEEsgSheGynlJv/GNVvsPs9CIl2hoCSV+gYfuH7rdAyIQdr3+x92yCg\n2g7WEp4vMfTKgogyHabbL4z1l1p/1PLBCF4o9AjtmJBc6wpOTJykM+O0Ib2Y+FyCAuv5wcwCd+Ks\n4+XCdSwhqMIf/eJOFPMjV/rc0jw6IEvm8vjKdBuy/JryMPmEXwIiDInhtK01n1iDPrGu6/A5uy4/\nkBVd89R1OjvHCXbSnoDyaB23nhseElHosf45rzYC1zOevyDojQ548fjGCGg8M5aD8EAmB9GqgFHk\nBzRwDwJ6EcgK5aSDZ2/4TSAjKOMXd3gPh6sTq/+GApG0wkSYdzSBz/AXclUQ+g=='.decode('base64').decode('zip')
if s in X:
 j=X.index(s)<326
 s=(s.replace('oe'[j],'ui'[j]+'e'),s)[p[0]in'NV']
print s+x["aei".index(v[-2])]+x[3:]

使用法

$ echo "Ellas querer" | python conj_golf2.py
quieren

非ステム変更入力でのテスト

Yo ensenar -> enseno
Yo escribir -> escribo
Tu ensenar -> ensenas
Tu escribir -> escribes
El ensenar -> ensena
El escribir -> escribe
Ella ensenar -> ensena
Ella escribir -> escribe
Usted ensenar -> ensena
Usted escribir -> escribe
Nosotros ensenar -> ensenamos
Nosotros escribir -> escribimos
Vosotros ensenar -> ensenais
Vosotros escribir -> escribis
Ellos ensenar -> ensenan
Ellos escribir -> escriben
Ellas ensenar -> ensenan
Ellas escribir -> escriben
Ustedes ensenar -> ensenan
Ustedes escribir -> escriben

ステム変更入力の例

e-> ieの変更とo-> ueの変更の両方を行い、nostros + vostrosのケースを適切に回避します。

$ echo "Yo abstenir"|python conj_golf2.py
abstieno
$ echo "Nostros abstenir"|python conj_golf2.py
abstenimos
$ echo "Tu almorzar"|python conj_golf2.py
almuerzas
$ echo "Vostros almorzar"|python conj_golf2.py
almorzais

ボーナスがどのように決定され、データ文字列が生成されたかを以下に示します。そこから、ボーナスが機能する動詞を推測できます。

e="absten.acert.adher.adquer.advert.apret.asent.atraves.calent.cerr."+\
  "circunven.comenz.confer.confes.consent.conten.contraven.conven.convert."+\
  "difer.diger.discern.disent.freg.gobern.hed.hel.her.herv.infer.inger."+\
  "invern.invert.malher.manifest.ment.neg.nev.obten.ofend.pens.perd."+\
  "quer.recomend.reg.seg.sembr.sent.serr.sosegsosten.soterr.subarrend."+\
  "suger.tembl.tend.ten.tent.transfer.tropez.ven.vert"

u="absolv.acord.acost.almorz.along.amobl.apost.aprob.asol.avergonz."+\
  "coc.col.colg.cont.cost.degoll.demol.demostr.desaprob.descolg.descontr."+\
  "desos.destorc.devolv.disolv.dol.dorm.encontr.engros.envolv.forz.holg."+\
  "holl.llov.mol.mor.mostr.mov.ol.pobl.prob.record.reforz.remord.remov.renov."+\
  "repobl.resolv.resoll.reson.retorc.revolc.revolv."+\
  "rod.rog.sol.sold.sol.solt.son.torc.tost.tron.vol.volc.volv"

words = e.split(".") + u.split(".")
bonus = 0
for word in words:
    bonus += (len(word)+2)*2
print "Bonus: %d from %d stem-changing verbs" % (bonus, len(words))

s=(e+"|"+u).replace(".","")
zipped = s.encode('zip')
b64 = zipped.encode('base64')
print "The separator is at index %d" % s.index("|")
print "Uncompressed: %d chars, %d repr" % (len(s), len(`s`))
print "Compressed: %d chars, %d repr" % (len(zipped), len(`zipped`))
print "Comp+B64: %d chars, %d repr" % (len(b64), len(`b64`))

print "v="+`b64`

それは与える:

$ python conj_help.py
Bonus: 1796 from 127 stem-changing verbs
The separator is at index 326
Uncompressed: 645 chars, 647 repr
Compressed: 331 chars, 1015 repr
Comp+B64: 450 chars, 458 repr
v='eJw1UuHS5CAIe1aqrNsZhR6w/tj5Hv4Sv7uODRYDxEzlylKTplHS3xrS/3yIm4kntCTVSipkazaZ\n+AA32h3tY1ut+VL7NreXxsEEsgSheGynlJv/GNVvsPs9CIl2hoCSV+gYfuH7rdAyIQdr3+x92yCg\n2g7WEp4vMfTKgogyHabbL4z1l1p/1PLBCF4o9AjtmJBc6wpOTJykM+O0Ib2Y+FyCAuv5wcwCd+Ks\n4+XCdSwhqMIf/eJOFPMjV/rc0jw6IEvm8vjKdBuy/JryMPmEXwIiDInhtK01n1iDPrGu6/A5uy4/\nkBVd89R1OjvHCXbSnoDyaB23nhseElHosf45rzYC1zOevyDojQ548fjGCGg8M5aD8EAmB9GqgFHk\nBzRwDwJ6EcgK5aSDZ2/4TSAjKOMXd3gPh6sTq/+GApG0wkSYdzSBz/AXclUQ+g==\n'

プログラミングではなく言語学の問題になるので、ステムの変更から離れます。確かに、AcordarはAcord **である必要がありますか?そして、あなたはregar> riego、riegasなどとregir> rijo、rigesなどの両方に正しい答えを与えることはできません
Level River St

@steveverrill:うんうん、「アコーダー」が抜けてしまったようです。確かに、異なる語幹の同じ動詞を処理することはできませんが、たとえば「regir」はg-> jを行わないため、とにかく間違っています。この場合、精度はそれほど重要ではありません。ポイントはわかりましたが、ボーナスポイントの莫大な恩恵をあきらめることはできませんでした=)。
Claudiu 2014年

@steveverrill:また、連結された動詞を組み合わせたものに収まる動詞があると、エラーが発生する可能性もあります。たとえば、通常の動詞「tenacar」がある場合、それは語幹変化型として活用されます。これは、.sを残すことで修正でき、スコアに50ポイントほど追加されます
Claudiu

私はあなたがtenあなたのルーツのリストにある動詞を推測しようとしています。teñirがあるEではなく、電子へのすなわちtenere to ieですが、1に対して不規則な語幹変化があります。同様に、abstenercircunvenirobtenersostenervenircocerdestorcerolerretorcertorcer。一方、あなたのスコアリングスクリプトは、sentarcountarの両方をカウントしていないようです番人。そして、あなたが欠落している.内にsosegsosten、そしてdescontrおそらくする必要がありますdescont
Peter Taylor

@PeterTaylor:そうですねtener。あなたが挙げた動詞が特別な場合があることに気づきませんでした。私はそれらを削除するか、それらを説明し(どちらか安い方)、別の近い候補者がいる場合はタイプミスを修正できます
Claudiu

3

Python、240バイト-(非常に大きい)ボーナス

from re import*;import urllib2 as u,sys;x=sys.argv
try:
 print search('>.*?'+sub('a','o',sub('ella','el',x[1]))+'.*? ([^<]*)',sub(u'\u00e9','e',sub(u'\u00fa','u',u.urlopen("http://smarturl.it/xz?word="+x[2]).read()))).group(1)
except:
 pass

出力例:

Input         | Output
yo escribir   | escribo
tu escribir   | escribes
tu ensenar    | ensenas
ella querer   | quiere
ellas querer  | quieren
nosotros vive | vi
tu acordar    | acuerdas

説明:

このコードは、動詞の大規模なデータベースからさまざまな活用を返す既存の無料活用Webサイト(http://www.conjugation.org/)を使用します。リダイレクトを介してパラメーターを渡すことができる無料のオンラインURL短縮プログラム(http://smarturl.it/)を。私は単にからアクセントを削除し、指定された動詞に基づいてHTTPリクエストを作成uし、eその後、関連する共役を返し、正規表現を使用してHTMLで代名詞を見つけ、ソースで。

辞書全体に対してデータベース全体をポーリングしないと、語幹の変化がある動詞の数を知ることはできません。このデータベースからのマイナスのボーナスは、渡されたエンコードされたリストからのボーナス(コードの長さが長くなる)よりもはるかに大きいと考えるのがおそらく安全です。

私は明らかにアクセント付き文字をよりよく処理できたかもしれませんが、正規表現内でのエンコード/デコードと追加の処理が必要になります。



@Claudiu:それは抜け穴ではないはずです-その投稿はここでは関係ありません。質問自体には深刻な欠陥があり、何らかの外部依存が必要になります。base64でエンコードされたデータ文字列を渡すことは、外部データソースに接続するよりも優れています。
grovesNL 2014年

それは私のスコアの一部としてカウントされるので、それはより良いです。私のスクリプトは完全に自己完結型であり、実際に活用作業を行います。あなたは外部データソースからそれを取得するだけです。データソースが処理する動詞の数に完全に依存するため、スコアを数えることさえできません。そのサイトまたはURL短縮サービスがダウンした場合、回答は無効になります。
Claudiu 2014年

@Claudiu:質問は外部データベースの参照に最も適しているため、関係ありません。活用自体は、語幹変化を処理するre.sub必要string.replaceがない場合や使用する場合と同じくらい簡単です。エンコードされたリストに語幹変化動詞をさらに追加し続けると、プログラムでさえより大きな負のスコアを受け取ります。質問に欠陥があります。
grovesNL 2014年

1
@Claudiu、grovesNLハハハ。はは。あなたの両方を落ち着かせる。この場合、質問に欠陥があるためおかしいです。それはただのゲームであり、あなたの両方があなたのスペイン語に誤りがあります。その欠陥のため、これで勝者を呼ぶことは不可能でしょう。勝利はとにかくわずか15の評判です。ここでは、それぞれに賛成投票をして、うまくプレイします。
Level River St

1

Freepascal、218文字-30 = 189

特にPascalで、(元の)pythonの回答を打ち負かすのは難しいことです。明日は、異なる言語で同様のコンセプトで、改善を試みるかもしれません。私はこれをプログラミングの課題というよりは言語の問題と見なしているので、語幹を変更する回答は提出しません。

var y,p,v:string;BEGIN y:='amosemosimosais eis is  as  eso eso   o   an  en  en';readln(p);readln(v);writeln(copy(v,1,length(v)-2),copy(y,6*(7-pos(p[1],' yt v n'))+pos(v[length(v)-1],y),pos(p[length(p)],'u s')+1));END.

非ゴルフバージョン:

var y,p,v:string;
BEGIN 
  y:='amosemosimosais eis is  as  eso eso   o   an  en  en';
  readln(p);readln(v);
  writeln(copy(v,1,length(v)-2),
  copy(y,6*(7-pos(p[1],' yt v n'))+pos(v[length(v)-1],y),pos(p[length(p)],'u s')+1));
END.

Explicación(スペイン語で、質問してから-30のボーナスを獲得)

エルプライマーcopyエクストララライスデルヴェルボ、テニエンドコモパラメトロスエルストリング、エルインディスパラエンペザール(エンエステカソ1)イラカンティダードデレトラス(エンエステカソレングス-2。)エルセグンドエキストラスデシネンシア。

6*(7-pos(p[1],' yt v n')seevalúasegúnla Primea letra del pronombre。Si el pronombre esél/ ella(o / s)o usted(es)、posseevalúaa cero、asíque el valor dentro de losparéntesises 7. pos(v[length(v)-1],ybusca lapenúltimaletra del infinitivo enasíque amosemosimosavanza 4 por cada tipo de verbo 、formando un ciclo de 12. El resto deyレストデコンシストエントダスラスデジネンシアス。Se ha logrado intercalar parcialmente las desinencias para "tu" y "yo。" 罪禁輸queda ciertaカンティダッドデespacio en blanco que megustaríaeliminar。ここでは、el indice para buscar la desinencia en yを定義します。

pos(p[length(p)],'u s')+1)determina el numero de caracteres para imprimir。si el pronombre no termina en so usolo se imprime uncáracter。De esta manera suprimimos la segunda letra de an en enen el caso de un pronombre de tercera persona singular:él、ella、usted。

出力

ここに画像の説明を入力してください


1

perl、243文字

今回はハッシュ検索に焦点を当てます。これを小さくすることができなかったことにかなり驚いています。

$_=<>;s/^(ustede|ell[oa])s\b/x/;s/^(él|ella|usted)\b/w/;%t=(yo,[o,o,o],"tú",[es,as,es],w,[e,a,e],x,[en,an,en],nosotros,[imos,amos,emos],vosotros,[qw(ís áis éis)]);@t=keys%t;$"="|";s/^(@t)\s+(\S*)([aei])r$/$2.$t{$1}[ord($3)%3]/e||die;print

入力の検証が重要でない場合は、186文字:

$_=<>;s/^[ue].*s /x /;s/^[éeu].* /w /;%_=(y=>[o,o,o],t,[es,as,es],w,[e,a,e],x,[en,an,en],n,[imos,amos,emos],v,[qw(ís áis éis)]);s/^(.)\S*\s+(.*)([aei])r$/$2.$_{$1}[ord($3)%3]/e;print

これはあなたの最後の答えに対する改善された答えですか?
nrubin29 2014年

3つの方法で3つの異なる回答を投稿しました。char byカウントのベストは、正規表現です。
スキブリアンスキー2014年

とった。投稿ありがとうございます!
nrubin29 2014年

1

perl、155文字

今回は単なる正規表現の集まりです。私たちは本当に動詞の終わりにのみ注意を払うので、代名詞が動詞の後に来るように少し並べ替えることで、より短いコードを取得できます。

$_=<>;s/(.+) (.*)(.)r/$2$3 $1/;s/. yo/o/||s/ tú/s/||s/ n.*/mos/||s/ v.*/is/||s/ .*s$/n/||s/ .*//;s/i(n?)$/e$1/;s/ais$/áis/;s/eis$/éis/;s/iis$/ís/;print

上記のように現在ボーナスを無視するコードの勝者です。

ski@anito:~$ c='$_=<>;s/(.+) (.*)(.)r/$2$3 $1/;s/. yo/o/||s/ tú/s/||s/ n.*/mos/||s/ v.*/is/||s/ .*s$/n/||s/ .*$//;s/i(n?)$/e$1/;s/ais$/áis/;s/eis$/éis/;s/iis$/ís/;print'; for p in yo tú él ella usted ellos ellas ustedes vosotros nosotros ; do for v in mar mer mir ; do echo "$p $v" | perl -e "$c" ; done ; done ; echo -n "$c" | wc -c
mo
mo
mo
mas
mes
mis
ma
me
me
ma
me
me
ma
me
me
man
men
men
man
men
men
man
men
men
máis
méis
mís
mamos
memos
mimos
155

1

バッシュ、301 309(バグ修正) 307 299改行を含む

そこにある他のものと比較して素晴らしいとは言えません。改善される可能性があります。

それはいくつかの便利な偶然を利用します。

バグ修正は、-ir動詞を使用してvosotroを処理するときに文字を保存する方法が原因で、スペイン語の動詞に「ii」が含まれていないことに依存しています。それが間違っている場合は修正してください。

有効な入力を想定:最初の引数は小文字の代名詞であり、必要なアクセントがあります。2番目の引数は動詞の不定です。ステム変更は実装されていません。活用動詞を小文字なしでアクセントなしで出力します。

e=`tail -c3<<<$2`
f=`echo ${e:0:-1}`
s=`echo ${2:0:-2}`
if [ $1 = yo ];then o="$s"o;elif [ $1 = nosotros ];then o="$s$f"mos;elif [ $1 = vosotros ];then o="$s$f"is;else
if [ $f = i ];then f=e;fi
if [ $1 = tú ];then
o="$s$f"s;elif [ `tail -c2<<<$1` = s ];then
o="$s$f"n;else o=$s$f;fi
fi
tr -s i<<<$o

説明しました。``は、$( )1文字を節約するためのあいまいな表記です。

e=`tail -c3<<<$2`

動詞を終わらせる

f=`echo ${e:0:-1}`

動詞の最初の文字を取得する

s=`echo ${2:0:-2}`

動詞の語幹を取得する

if [ $1 = yo ]; then
o="$s"o;

動詞の語幹+ o。$ oは出力です

elif [ $1 = nosotros ]; then
o="$s$f"mos;

語幹+末尾の最初の文字+ mosを取る

elif [ $1 = vosotros ]; then
o="$s$f"is;

語幹+末尾の最初の文字+ is(アクセントなし)

else
if [ $f = i ];then f=e;fi

上記の2つを除くすべてのシナリオで、-ir動詞は-er動詞として動作します。$ fをeに変更します(iの場合)。

if [ $1 = tú ]; then
o="$s$f"s;

ステム+ $ f + s

elif [ `tail -c2<<<$1` = s ]; then 

末尾の最後の文字がsの場合。これには、すべて同じエンディングを持つellos、ellas、ustedesが含まれます。なんて都合のいい。

o="$s$f"n;

ステム+ $ f + n

else o=$s$f;fi

有効な入力を想定しているため、他の唯一の可能性はÉl、Ella、Ustedであり、すべて同じ末尾である

fi
tr -s i <<< $0

出力を印刷し、二重のiを削除します(ir動詞でvosotroを使用すると表示されます)


0

perl、298文字

$_=<>;($p,$b,$x)=/^\s*(yo|tú|él|ellas?|ellos|usted|ustedes|[nv]osotros)\s+(\S*)([aei])r\s*$/;sub r{($z,$y)=@_;return if$p!~/^($z)/;if($p!~/ros$/){$x="e" if$x eq"i"}$x=""if$z eq yo;$x={qw(a áis e éis i ís)}->{$x}if$p=~/^v/;print"$b$x$y";exit}r yo,o;r t,"s";r"[eu].+s",n;r"[éeu]","";r n,mos;r v

または、風に注意を払い、有効な入力を想定できる場合、246文字:

$_=<>;($p,$b,$x)=/^(\S+)\s+(\S*)([aei])r$/;sub r{($z,$y)=@_;return if$p!~/^($z)/;if($p!~/ros$/){$x="e" if$x eq"i"}$x=""if$z eq yo;$x={qw(a áis e éis i ís)}->{$x}if$p=~/^v/;print"$b$x$y";exit}r yo,o;r t,"s";r"[eu].+s",n;r"[éeu]","";r n,mos;r v

テスト出力:

ski@anito:~$ c='$_=<>;($p,$b,$x)=/^(\S+)\s+(\S*)([aei])r$/;sub r{($z,$y)=@_;return if$p!~/^($z)/;if($p!~/ros$/){$x="e" if$x eq"i"}$x=""if$z eq yo;$x={qw(a áis e éis i ís)}->{$x}if$p=~/^v/;print"$b$x$y";exit}r yo,o;r t,"s";r"[eu].+s",n;r"[éeu]","";r n,mos;r v'; for p in yo tú él ella usted ellos ellas ustedes vosotros nosotros ; do for v in mar mer mir ; do echo "$p $v" | perl -le "$c" ; done ; done ; echo -n "$c" | wc -c
mo
mo
mo
mas
mes
mes
ma
me
me
ma
me
me
ma
me
me
man
men
men
man
men
men
man
men
men
máis
méis
mís
mamos
memos
mimos
246

有効な入力であると想定しても問題ないと思いますが、以前はそれを述べていませんでした。皆さんはどう思いますか?
nrubin29 2014年

@ nrubin29無効な入力を処理する必要があると言わなかった場合は、処理する必要がないと想定します。(ただし、それを処理する必要がないという質問で明示的に述べるのが最善でした。)処理する必要がある場合は、方法を指定する必要があります。これはコードゴルフであり、事実上すべての答えは無効な入力で壊れる可能性があります。また、ラッシャーと私は質問のコメントで代名詞全体を解析する必要があるかどうかについて話しました(彼は自分の部分を削除しましたが、私はまだそこにいます)。アクセント。
Level River St

「ルールの変更」としてカウントされない限り、有効な入力を想定できることをガイドラインに追加します。もう誰も怒らないでください。また、いつ回答を受け入れますか?1週間後に?
nrubin29 2014年

-1

Java –長すぎる

わざわざ数えるつもりはありません。誰かがこれをもっとよくしたいなら、してください。私は最終的にステム変更チャレンジを実装します。

public class Conjugator {

    public static void main(String[] args) {
        setup();
        String p = args[0].toLowerCase(), v = args[1]; 
        String e = v.substring(v.length() - 2);
        v = v.substring(0, v.length() - 2);
        String f = data.get(e).get(p);
        System.out.println(v + f);
    }

    static HashMap<String, HashMap<String, String>> data = new HashMap<String, HashMap<String, String>>();

    public static void add(String ending, String pronoun, String fin) {
        HashMap<String, String> hm = data.get(ending);
        if (hm == null) {
            hm = new HashMap<String, String>();
            hm.put(pronoun, fin);
            data.put(ending, hm);
            return;
        }
        hm = data.get(ending);
        hm.put(pronoun, fin);
    }

    public static void setup() {
        add("ar", "yo", "o");
        add("ar", "tu", "as");
        add("ar", "el/ella/usted", "a");
        add("ar", "nosotros", "amos");
        add("ar", "vosotros", "ais");
        add("ar", "ellos/ellas/ustedes", "an");

        add("er", "yo", "o");
        add("er", "tu", "es");
        add("er", "el/ella/usted", "e");
        add("er", "nosotros", "emos");
        add("er", "vosotros", "eis");
        add("er", "ellos/ellas/ustedes", "en");

        add("ir", "yo", "o");
        add("ir", "tu", "es");
        add("ir", "el/ella/usted", "e");
        add("ir", "nosotros", "imos");
        add("ir", "vosotros", "is");
        add("ir", "ellos/ellas/ustedes", "en");
    }
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.