Konjugator Verb Spanyol

8

Penjelasan

Halo! Bagi Anda yang tidak menggunakan bahasa Spanyol, kata kerja dikonjugasikan berdasarkan orang yang melakukan tindakan. Berikut ini bagan:

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

Di Spanyol, semua kata kerja berakhir dengan ar, eratau ir. Berikut bagan bermanfaat lainnya:

          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

Diberi kata ganti dan kata kerja, cetak kata kerja yang dikonjugasikan menggunakan kata ganti dalam present tense. Jangan khawatir tentang perubahan batang dan kata kerja yang aneh.


Contohnya

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

Jika bahasa Anda tidak mendukung pencetakan dengan aksen, Anda dapat menghilangkannya. Kalau tidak, tidak perlu lagi menggunakan karakter á alih-alih dalam kode Anda.

Anda dapat menemukan lebih banyak kata untuk diuji di sini: http://spanish.speak7.com/spanish_vocabulary_verbs.htm . Perhatikan bahwa contester haruslah contestar.


Tantangan: Perubahan Batang

Dalam bahasa Spanyol, beberapa kata kerja mengalami perubahan batang. Mari kita ambil kata kerja querersebagai contoh. Dalam semua bentuk kecuali nosotros dan vosotros , yang pertama eberubah menjadi ie. Jadi yo quiero, tapi nosotros queremos. Jika program Anda dapat menjelaskan perubahan batang, Anda dapat mengurangi dua kali panjang setiap kata yang Anda dukung dari skor akhir Anda. Misalnya, jika Anda mendukung i-> ieperubahan quererdan hanya querer, Anda dapat mengurangi dua kali panjang querer, atau 12, dari skor Anda.

Untuk beberapa kata kerja yang mengubah batang, coba ini: https://conjuguemos.com/chart.php?language=spanish&id=2&etre=no&commands=no&commands=no&all=no&source=public


Bonus Kecil

Hanya untuk bersenang-senang, jika Anda menjelaskan apa yang kode Anda lakukan dalam bahasa Spanyol, lepas 30 dari skor Anda. Jangan hanya menggunakan Google Translate atau saya akan dapat mengatakan bahwa Anda curang.


(Karena saya bukan penutur asli bahasa Spanyol, mohon koreksi kesalahan saya)

nrubin29
sumber
2
Saya tidak mengambil bahasa Spanyol: Saya hanya berbicara; tetapi a) adalah bentuk nominatif dari kata ganti: tu genitive; b) kata kerja tidak "dipasangkan" dengan kata ganti; c) kata ganti nominatif jarang digunakan dalam bahasa Spanyol, jadi latihan ini mengajarkan kebiasaan buruk; d) Anda harus menyebutkan bahwa ini hanya konjugasi dari indikasi saat ini; e) Anda belum mengatakan bagaimana menangani kata kerja pronomial (alias refleksif); f) kata kerja yang paling umum adalah tidak teratur, jadi ini bukan alat yang praktis: jika Anda ingin membuat pertanyaan konjugasi kata kerja tanpa khawatir tentang penyimpangan Anda harus menggunakan Esperanto, bukan Castellano.
Peter Taylor
1
a) Memperbaiki itu sekarang. b) Cukup adil, memperbaiki. c) Benar, tetapi ini lebih dimaksudkan sebagai tantangan daripada alat yang bisa digunakan. Saya dapat menghapus persyaratan untuk mencetak kata ganti (yo escribir -> escribo) tetapi saya lebih suka meninggalkannya. F) Saya hanya akan meninggalkannya dalam bahasa Spanyol "normal" dan menambahkan tantangan untuk kata kerja "khusus". Saya harap saya tidak bersikap kasar, saya menghargai umpan baliknya.
nrubin29
3
Ketika saya sedang mengerjakan jawaban saya, Anda mengubah skor dengan menambahkan tantangan bonus! Saya tidak lagi tertarik bermain golf karena modifikasi skor bonus tambahan dan janji akan ada lebih banyak perubahan. Saya sudah membuang waktu satu jam untuk itu, dan jam itu telah menjadi downvote Anda.
Rainbolt
2
@ nrubin29: Saya tidak mengundurkan diri tapi saya setuju dengan Rusher. Anda tidak boleh mengubah skor dan aturan setelah pertanyaan diposting - terutama setelah jawaban telah diposting. Gunakan kotak pasir jika Anda belum puas dengan pertanyaannya.
Claudiu
1
@grovesNL setidaknya -30 tidak membuat perbedaan besar. Hal yang membunuh pertanyaan ini adalah bonus tak terbatas untuk kata kerja ganti batang. Saya pikir kami telah memperbaiki ambiguitas untuk OP, kemudian dia tiba-tiba melemparkan dua bonus baru dan menyinggung Rusher. Semoga dia akan belajar berpikir ke depan, menggunakan kotak pasir, dan tidak menambahkan bit ke pertanyaannya setelah posting. Sudah terlambat untuk kembali sekarang.
Level River St

Jawaban:

3

Python, 172 168 743 karakter - bonus 1796 = -1053

Diperbarui untuk mengambil tantangan perubahan batang.

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:]

Penggunaan :

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

Tes pada input yang tidak mengubah batang :

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

Contoh input pengubah batang :

Ia melakukan keduanya yaitu perubahan dan perubahan, dengan benar menghindari kasus nostro + 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

Berikut adalah cara menentukan bonus dan string data yang dihasilkan, dari mana Anda dapat menyimpulkan kata kerja tempat kerjanya:

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`

Pemberian yang mana:

$ 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'
Claudiu
sumber
Saya akan tinggal jauh dari perubahan batang karena itu menjadi masalah linguistik daripada pemrograman. Acordar harus Acord **, tentunya? Dan Anda tidak dapat memberikan jawaban yang tepat untuk kedua regar> riego, riegas dll dan regir> rijo, riges etc.
Level River St
@steveverrill: oh ya saya kira "acordar" lolos. Benar saya tidak bisa berurusan dengan kata kerja yang sama dari batang yang berbeda tetapi misalnya "regir" akan salah karena saya tidak melakukan g-> j. Akurasi tidak begitu penting untuk yang satu ini. Saya mengerti maksud Anda, tetapi saya tidak bisa melepaskan keuntungan besar dari poin bonus =).
Claudiu
@steveverrill: Juga ada kemungkinan kesalahan jika ada kata kerja yang cocok dengan kata kerja bersatu. misalnya jika ada kata kerja reguler "tenacar", kata itu akan dikonjugasikan sebagai kata ganti batang. Ini saya dapat memperbaikinya dengan meninggalkan di .s, akan menambah 50 poin atau lebih untuk skor
Claudiu
Saya mencoba untuk menyimpulkan kata kerja yang Anda miliki tendalam daftar akar Anda. teñir adalah e to i , bukan e to ie ; tener adalah e untuk yaitu , namun memiliki perubahan batang tidak teratur untuk 1s. Demikian pula abstener , circunvenir , obtener , sostener , venir , cocer , destorcer , oler , retorcer , torcer . Di sisi lain, skrip penilaian Anda sepertinya tidak menghitung sentar dansentir . Dan kau hilang .di sosegsosten, dan descontrmungkin harus descont.
Peter Taylor
@PeterTaylor: Ini tenersaya kira. Saya tidak menyadari kata kerja yang Anda daftarkan memiliki kasus khusus. Saya dapat menghapusnya atau menghitungnya (mana yang lebih murah) dan memperbaiki kesalahan ketik jika ada pesaing dekat lainnya
Claudiu
3

Python, 240 byte - bonus (sangat besar)

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

Output sampel:

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

Penjelasan:

Kode ini menggunakan situs web konjugasi gratis yang ada ( http://www.conjugation.org/ ) yang mengembalikan berbagai konjugasi dari database besar kata kerja. Saya mengurangi URL sedikit dengan menggunakan pemendek URL online gratis yang memungkinkan parameter untuk melewati pengalihan ( http://smarturl.it/ ). Saya cukup membuat permintaan HTTP berdasarkan kata kerja yang ditentukan, menghapus aksen dari udan edi sumber, menemukan kata ganti dalam HTML menggunakan ekspresi reguler, kemudian mengembalikan konjugasi yang terkait.

Tidak mungkin untuk mengetahui berapa banyak kata kerja yang memiliki perubahan batang tanpa polling seluruh database terhadap sebuah kamus. Mungkin aman untuk mengasumsikan bonus negatif dari database ini jauh lebih besar daripada bonus dari daftar yang disandikan yang dilewati (yang menambah panjang kode).

Saya jelas bisa menangani karakter beraksen lebih baik, tapi itu akan membutuhkan encode / decode dan penanganan ekstra dalam ekspresi reguler.

grovesNL
sumber
3
Tidak lagi lucu
Claudiu
@Claudiu: Ini seharusnya tidak menjadi celah - pos itu tidak relevan di sini. Pertanyaan itu sendiri memiliki kelemahan serius yang membuat semacam ketergantungan eksternal diperlukan. Melewati string data yang disandikan base64 tidak lebih baik daripada menyambungkan ke sumber data eksternal.
grovesNL
Itu lebih baik karena itu dihitung sebagai bagian dari skor saya. Naskah saya sepenuhnya mandiri dan sebenarnya berfungsi konjugasi. Anda baru saja mengambilnya dari sumber data eksternal. Anda bahkan tidak dapat menghitung skor Anda karena itu bergantung sepenuhnya pada berapa banyak kata kerja yang diproses oleh sumber data. Jika situs atau penyingkat URL turun maka jawaban Anda menjadi tidak valid.
Claudiu
@Claudiu: Apapun, itu tidak relevan karena pertanyaannya paling cocok untuk referensi database eksternal. Konjugasi itu sendiri sepele seperti menggunakan re.subatau string.replaceketika tidak harus menangani perubahan batang, dll. Bahkan program Anda akan menerima skor negatif yang lebih besar jika Anda terus menambahkan kata kerja perubahan batang lebih lanjut ke daftar Anda yang disandikan. Pertanyaannya cacat.
grovesNL
1
@Claudiu, grovesNL Hahaha. Ha ha. Tenangkan kalian berdua. Lucu dalam hal ini karena pertanyaannya cacat. Ini hanya permainan dan Anda berdua memiliki kesalahan dalam bahasa Spanyol Anda. Ini tidak mungkin untuk memanggil pemenang karena ini cacat. Kemenangannya hanya 15 reputasi. Di sini, dapatkan upvote masing-masing dan bermain dengan baik.
Level River St
1

Freepascal, 218 karakter -30 = 189

Ini adalah panggilan yang sulit untuk mengalahkan jawaban python (asli), terutama dengan Pascal. Saya dapat mencoba dan meningkatkan besok, mungkin dengan konsep serupa dalam bahasa yang berbeda. Saya tidak akan mengajukan jawaban yang mengubah batang, karena saya melihat ini sebagai tantangan bahasa daripada pemrograman.

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.

Versi tidak disatukan:

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 (Dalam bahasa Spanyol untuk bonus -30 sejak Anda bertanya)

el primer copyextrae la Raiz del Verbo, teniendo como parámetros el tali , el indice para empezar (en este caso 1) y la cantidad de letras (en este caso panjang-2. ) El segundo extrae su desinencia.

6*(7-pos(p[1],' yt v n')Lihat foto lainnya dari primera letra del pronombre. Si el pronombre es el / ella (o / s) o usted (es), posse mengeva sebuah Cero, Así que el keberanian dentro de los Parentesis es 7. pos(v[length(v)-1],ybusca la penultima letra del infinitivo en amosemosimosAsí que avanza 4 por cada tipo de Verbo , form unicicic de 12. yTambahkan ke daftar isi to to las las desinencias. Se ha logrado intercalar parcialmente las desinencias para "tu" y "yo." Semua yang Anda tahu tentang apa yang Anda butuhkan dan kemudian untuk saya untuk menghapusnya. Selain itu, Anda juga dapat menentukan bus mobil yang diinginkan.

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

Keluaran

masukkan deskripsi gambar di sini

Level River St
sumber
1

perl, 243 karakter

Kali ini berfokus pada pencarian hash. Saya cukup terkejut saya tidak bisa mendapatkan ini lebih kecil.

$_=<>;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

Dan jika validasi input tidak penting, 186 karakter:

$_=<>;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
skibrianski
sumber
Apakah ini jawaban yang lebih baik untuk jawaban terakhir Anda?
nrubin29
Saya memposting 3 jawaban berbeda dengan 3 metode berbeda. Yang terbaik menurut perhitungan char adalah ekspresi reguler.
skibrianski
Oke. Terima kasih atas kirimannya!
nrubin29
1

perl, 155 karakter

Hanya sekelompok ekspresi reguler saat ini. Anda bisa mendapatkan kode yang lebih pendek dengan menata ulang sedikit sehingga kata ganti muncul setelah kata kerja, karena kami hanya benar-benar peduli dengan akhir kata kerja:

$_=<>;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

Sepertinya di atas saat ini adalah pemenang kode yang mengabaikan bonus.

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

Bash, 301 309 (perbaikan bug) 307 299 termasuk baris baru

Tidak hebat dibandingkan dengan yang lain di luar sana. Dapat ditingkatkan.

Itu memanfaatkan beberapa kebetulan yang nyaman.

Perbaikan bug tidak bergantung pada kata kerja Spanyol yang memiliki "ii" di mana saja, karena cara itu menghemat karakter ketika menangani vosotros dengan kata kerja -ir mereka. Harap perbaiki saya jika itu salah.

Asumsikan input yang valid: argumen pertama adalah kata ganti dengan huruf kecil, dengan aksen yang diperlukan; Argumen kedua adalah infinitive dari kata kerja. Tidak ada perubahan batang diterapkan. Menghasilkan kata kerja terkonjugasi, dalam huruf kecil, tanpa aksen.

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

Dijelaskan. `` adalah notasi yang tidak jelas untuk $( ), menyimpan satu char.

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

dapatkan kata kerja ending

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

dapatkan char pertama dari kata kerja ending

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

dapatkan kata kerja batang

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

Batang kata kerja + o. $ o adalah output kami

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

ambil stem + huruf pertama dari ending + mos

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

stem + huruf pertama dari ending + adalah (tanpa aksen)

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

dalam semua skenario kecuali dua di atas, kata kerja -irnya berperilaku sebagai kata kerja -er. ubah $ f ke e jika i.

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

batang + $ f + s

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

jika huruf terakhir dari akhiran adalah s. ini termasuk ellos, ellas, ustedes yang semuanya memiliki akhiran yang sama. alangkah nyaman.

o="$s$f"n;

batang + $ f + n

else o=$s$f;fi

kami mengasumsikan input yang valid, jadi satu-satunya kemungkinan lainnya adalah Él, Ella dan Usted, semuanya dengan akhiran yang sama

fi
tr -s i <<< $0

hasil cetak, menghapus i ganda (yang muncul ketika Anda menggunakan vosotros dengan kata kerja ir)


sumber
0

perl, 298 karakter

$_=<>;($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

atau jika kita dapat berhati-hati terhadap angin dan menerima input yang valid, 246 karakter:

$_=<>;($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

hasil tes:

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
skibrianski
sumber
Saya pikir akan baik-baik saja untuk menerima input yang valid, tetapi saya tidak menyatakannya sebelumnya. apa yang kalian pikirkan?
nrubin29
@ nrubin29 Jika Anda tidak menyatakan kami harus menangani input yang tidak valid, maka kami menganggap kami tidak perlu menanganinya. (Sebaiknya Anda menyatakan secara eksplisit dalam pertanyaan bahwa kami tidak harus menanganinya.) Jika kami harus menanganinya, Anda harus menentukan caranya. Ini kode golf, hampir semua jawaban di sini dapat dipecahkan dengan input yang tidak valid. Juga Rusher dan saya membahas apakah perlu mengurai seluruh kata ganti dalam komentar pada pertanyaan (Dia menghapus bagiannya, tetapi bagian saya masih ada di sana.) BTW, Anda benar-benar membuat keputusan yang tepat dengan mengatakan bahwa kami tidak harus menangani aksen.
Level River St
Saya akan menambahkan ke pedoman bahwa input yang valid dapat diasumsikan selama itu tidak dihitung sebagai "mengubah aturan". Tidak ingin membuat marah orang lain lagi. Juga, kapan saya menerima jawaban? Setelah seminggu?
nrubin29
-1

Jawa - Terlalu Panjang

Aku bahkan tidak akan repot menghitung. Jika ada yang ingin bermain golf ini lebih baik, silakan lakukan. Saya akhirnya akan menerapkan tantangan yang mengubah batang.

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");
    }
}
nrubin29
sumber