Động từ Tây Ban Nha


8

Giải trình

¡Hola! Đối với những người không sử dụng tiếng Tây Ban Nha, một động từ được kết hợp dựa trên người thực hiện hành động. Đây là một biểu đồ:

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

Trong tiếng Tây Ban Nha, tất cả các động từ kết thúc với ar, erhoặc ir. Đây là một biểu đồ hữu ích khác:

          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

Cho một đại từ và một động từ, in động từ được liên hợp bằng cách sử dụng đại từ ở thì hiện tại. Đừng lo lắng về việc thay đổi gốc và động từ lẻ.


Ví dụ

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

Nếu ngôn ngữ của bạn không hỗ trợ in bằng dấu, bạn có thể bỏ qua chúng. Mặt khác, không nên sử dụng thêm bất kỳ ký tự nào để sử dụng thay vì một trong mã của bạn.

Bạn có thể tìm thấy nhiều từ hơn để kiểm tra tại đây: http : //sp Biến.speak7.com/sp Biến_vocellect_verbs.htmlm . Lưu ý rằng contester nên là cuộc thi.


Thách thức: Thay đổi gốc

Trong tiếng Tây Ban Nha, một số động từ có thay đổi gốc. Hãy lấy động từ quererlàm ví dụ. Trong tất cả các hình thức ngoại trừ nosotros và vosotros , lần đầu tiên ethay đổi thành ie. Vì vậy yo quiero, nhưng nosotros queremos. Nếu chương trình của bạn có thể giải thích cho các thay đổi gốc, bạn có thể trừ hai lần độ dài của mỗi từ bạn hỗ trợ từ điểm số cuối cùng của bạn. Ví dụ: nếu bạn hỗ trợ i-> iethay đổi querervà chỉ querer, bạn có thể trừ hai lần độ dài querer, hoặc 12, từ điểm số của bạn.

Đối với một số động từ thay đổi gốc, hãy thử điều này: https://conjuguemos.com/chart.php?l Language = sp biến & id = 2 & etre = no & commands = no & all = no & source = public


Tiền thưởng nhỏ

Chỉ để cho vui, nếu bạn giải thích mã của bạn làm gì bằng tiếng Tây Ban Nha, hãy lấy 30 từ điểm số của bạn. Đừng chỉ sử dụng Google Dịch hoặc tôi sẽ có thể nói rằng bạn đã lừa dối.


(Vì tôi không phải là người nói tiếng Tây Ban Nha bản địa, xin vui lòng sửa chữa tôi về bất kỳ sai lầm nào)


2
Tôi không nói tiếng Tây Ban Nha: Tôi chỉ nói nó; nhưng a) là hình thức chỉ định của đại từ: tu là genitive; b) động từ không "ghép" với đại từ; c) đại từ chỉ định hiếm khi được sử dụng trong tiếng Tây Ban Nha, vì vậy bài tập này dạy những thói quen xấu; d) bạn nên đề cập rằng đây chỉ là liên hợp của chỉ định hiện tại; e) bạn chưa nói làm thế nào để xử lý các động từ nguyên tắc (còn gọi là phản xạ); f) các động từ phổ biến nhất là không đều, vì vậy đây không phải là một công cụ thực tế: nếu bạn muốn đặt câu hỏi chia động từ mà không lo lắng về sự bất thường, bạn nên sử dụng Esperanto thay vì Castellano.
Peter Taylor

1
a) Sửa nó ngay. b) Đủ công bằng, sửa chữa. c) Đúng, nhưng điều này có ý nghĩa như một thách thức hơn là một công cụ có thể sử dụng. Tôi có thể loại bỏ yêu cầu in đại từ (yo escripir -> escribo) nhưng tôi muốn để nó lại. F) Tôi sẽ chỉ để nó trong tiếng Tây Ban Nha "bình thường" và thêm một thách thức cho các động từ "đặc biệt". Hy vọng tôi đã không trở nên thô lỗ, tôi đánh giá cao phản hồi.
nrubin29

3
Trong khi tôi đang thực hiện câu trả lời của mình, bạn đã thay đổi cách tính điểm bằng cách thêm một thử thách tiền thưởng! Tôi không còn hứng thú với việc chơi golf này vì sửa đổi điểm thưởng bổ sung và hứa hẹn sẽ có nhiều thay đổi hơn nữa. Tôi đã lãng phí một giờ cho nó, và giờ đó đã trở thành downvote của bạn.
Rainbolt

2
@ nrubin29: Tôi không downvote nhưng tôi đồng ý w / Raser. Bạn không nên thay đổi cách tính điểm và quy tắc sau khi câu hỏi đã được đăng - đặc biệt là sau khi câu trả lời đã được đăng. Sử dụng hộp cát nếu bạn chưa hài lòng với câu hỏi.
Claudiu

1
@grovesNL ít nhất là -30 không tạo ra sự khác biệt lớn. Điều giết chết câu hỏi này là phần thưởng không giới hạn cho các động từ thay đổi gốc. Tôi nghĩ rằng chúng tôi đã giải quyết được sự mơ hồ cho OP, sau đó anh ấy đột nhiên ném vào hai phần thưởng mới và Rizer bị xúc phạm. Hy vọng anh ấy sẽ học cách suy nghĩ trước, sử dụng hộp cát và không thêm bit vào câu hỏi của mình sau khi đăng. Bây giờ là quá muộn để quay trở lại.
Cấp sông St

Câu trả lời:


3

Python, 172 168 743 ký tự - 1796 tiền thưởng = -1053

Cập nhật để thực hiện các thách thức thay đổi gốc.

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

Cách sử dụng :

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

Kiểm tra các đầu vào không thay đổi gốc :

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

Ví dụ đầu vào thay đổi gốc :

Nó thực hiện cả e-> tức là thay đổi và o-> ue thay đổi, tránh các trường hợp lỗ mũi + 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

Dưới đây là cách phần thưởng được xác định và chuỗi dữ liệu được tạo, từ đó bạn có thể suy ra các động từ mà nó hoạt động:

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`

Cung cấp cho:

$ 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'

Tôi sẽ tránh xa những thay đổi gốc vì nó trở thành câu hỏi về ngôn ngữ học hơn là lập trình. Acordar nên là Acord **, chắc chắn? Và bạn không thể đưa ra câu trả lời đúng cho cả regar> riego, riegas, v.v. và regir> rijo, giàn khoan, v.v.
Level River St

@steveverrill: oh yep Tôi đoán "acordar" trượt qua. Đúng Tôi không thể đối phó với cùng một động từ có gốc khác nhau, ví dụ như "regir" dù sao cũng sẽ sai vì tôi không làm g-> j. Độ chính xác không quá quan trọng đối với cái này. Tôi thấy quan điểm của bạn nhưng tôi không thể từ bỏ lợi ích khổng lồ của điểm thưởng =).
Claudiu

@steveverrill: Cũng có khả năng xảy ra lỗi nếu có một động từ xảy ra phù hợp với các động từ được ghép lại với nhau. ví dụ: nếu có một động từ thông thường "tenacar" thì nó sẽ được kết hợp thành một động từ thay đổi gốc. Điều này tôi có thể khắc phục bằng cách để lại trong .s, sẽ thêm 50 điểm hoặc hơn vào điểm số
Claudiu

Tôi đang cố gắng suy ra động từ mà bạn có tentrong danh sách gốc của bạn. teñire với i , không phải e để tức là ; tenere để ví dụ , nhưng có một sự thay đổi bất thường thân cho 1s. Tương tự abstener , Circunurine , obtener , sostener , venir , cocer , Destorcer , oler , retorcer , torcer . Mặt khác, tập lệnh ghi điểm của bạn dường như không tính cả sentarngười đa cảm . Và bạn đang bỏ lỡ một .trong sosegsosten, và descontrcó lẽ nên được descont.
Peter Taylor

@PeterTaylor: tenerTôi nghĩ vậy. Tôi đã không nhận ra những động từ bạn liệt kê có một trường hợp đặc biệt. Tôi có thể xóa chúng hoặc tài khoản cho chúng (cái nào rẻ hơn) và sửa lỗi chính tả nếu có một ứng cử viên thân thiết khác
Claudiu

3

Python, 240 byte - tiền thưởng (cực lớn)

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

Đầu ra mẫu:

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

Giải trình:

Mã này sử dụng một trang web chia động từ miễn phí hiện có ( http://www.conjugation.org/ ) để trả về các cách chia khác nhau từ một cơ sở dữ liệu lớn của động từ. Tôi đã giảm URL một chút bằng cách sử dụng trình rút ngắn URL trực tuyến miễn phí cho phép các tham số được chuyển qua chuyển hướng ( http://smarturl.it/ ). Tôi chỉ đơn giản thực hiện một yêu cầu HTTP dựa trên động từ được chỉ định, loại bỏ các dấu khỏi uetrong nguồn, tìm đại từ trong HTML bằng cách sử dụng các biểu thức thông thường, sau đó trả về cách chia liên kết.

Không thể biết có bao nhiêu động từ có thay đổi gốc mà không bỏ phiếu toàn bộ cơ sở dữ liệu so với từ điển. Có thể an toàn khi giả định phần thưởng âm từ cơ sở dữ liệu này lớn hơn nhiều so với bất kỳ phần thưởng nào từ danh sách được mã hóa được truyền vào (làm tăng độ dài của mã).

Tôi rõ ràng có thể xử lý các ký tự có dấu tốt hơn, nhưng nó sẽ yêu cầu mã hóa / giải mã và xử lý thêm trong các biểu thức thông thường.



@Claudiu: Nó không phải là một lỗ hổng - bài đăng đó không liên quan ở đây. Câu hỏi tự nó có những sai sót nghiêm trọng khiến một số loại phụ thuộc bên ngoài cần thiết. Truyền vào chuỗi dữ liệu được mã hóa cơ sở64 không tốt hơn kết nối với nguồn dữ liệu ngoài.
GrovesNL 15/03/2016

Nó là tốt hơn bởi vì nó được tính là một phần của điểm số của tôi. Kịch bản của tôi hoàn toàn khép kín và thực sự hoạt động liên hợp. Bạn chỉ cần lấy nó từ một nguồn dữ liệu bên ngoài. Bạn thậm chí không thể đếm điểm của mình vì nó phụ thuộc hoàn toàn vào số lượng động từ mà nguồn dữ liệu xử lý. Nếu trang web đó hoặc trình rút ngắn URL bị hỏng thì câu trả lời của bạn sẽ không hợp lệ.
Claudiu

@Claudiu: Bất kể, điều đó không liên quan vì câu hỏi phù hợp nhất để tham chiếu cơ sở dữ liệu bên ngoài. Bản thân các cách chia cũng tầm thường như khi sử dụng re.subhoặc string.replacekhi không phải xử lý các thay đổi gốc, v.v. Ngay cả chương trình của bạn cũng sẽ nhận được điểm âm lớn hơn nếu bạn tiếp tục thêm các động từ thay đổi gốc vào danh sách được mã hóa. Câu hỏi còn thiếu sót.
GrovesNL 15/03/2016

1
@Claudiu, lùm xùm Hahaha. Haha. Bình tĩnh cả hai bạn. Thật buồn cười trong trường hợp này vì câu hỏi còn thiếu sót. Đây chỉ là một trò chơi và cả hai bạn đều có lỗi trong tiếng Tây Ban Nha của mình. Sẽ không thể gọi người chiến thắng về điều này vì lỗ hổng đó. Chiến thắng chỉ là 15 danh tiếng. Ở đây, có một upvote mỗi và chơi độc đáo.
Cấp sông St

1

Freepascal, 218 ký tự -30 = 189

Đó là một lời kêu gọi khó khăn để đánh bại câu trả lời trăn (nguyên bản), đặc biệt là với Pascal. Tôi có thể cố gắng và cải thiện vào ngày mai, có thể với một khái niệm tương tự trong một ngôn ngữ khác. Tôi sẽ không gửi câu trả lời thay đổi gốc, vì tôi thấy đây là một thách thức ngôn ngữ hơn là lập trình.

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.

Phiên bản bị đánh cắp:

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 (Trong tiếng Tây Ban Nha có tiền thưởng -30 kể từ khi bạn hỏi)

el primer copyExtrae la raíz del verbo, teniendo como parámetros el string , el indice para empezar (en este caso 1) y la cantidad de letras (en este caso length-2. ) El segundo Extrae su desinencia.

6*(7-pos(p[1],' yt v n')se evalúa según la primera letra del pronomename. Si el pronomename es él / ella (o / s) o ust (es), posse evalúa a cero, así que el valor dentro de los paréntesis es 7. pos(v[length(v)-1],ybusca la penúltima letra del infinitivo en amosemosimosasí que avanza 4 por cada , formando un ciclo de 12. El resto de ymerge en todas las desinencias. Se ha logrado parcialmente las desinencias para "tu" y "yo." Sin cấm vận queda cierta cantidad de Espacio en blanco que me gustaría Eliminar. Así se định nghĩa el indice para buscar la desinencia en y.

pos(p[length(p)],'u s')+1)quyết định el numero de caracteres para il Elli. si el pronomename no termina en so usolo se ilime un cáracter. De esta manera suprimimos la segunda letra de an en enen el caso de un pronomename de tercera persona số ít: él, ella, ust.

Đầu ra

nhập mô tả hình ảnh ở đây


1

perl, 243 ký tự

Lần này tập trung vào tra cứu băm. Tôi khá ngạc nhiên khi tôi không thể có được cái này nhỏ hơn.

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

Và nếu xác nhận đầu vào không quan trọng, 186 ký tự:

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

Đây có phải là một câu trả lời được cải thiện cho câu trả lời cuối cùng của bạn?
nrubin29

Tôi đã đăng 3 câu trả lời khác nhau với 3 phương pháp khác nhau. Tốt nhất theo số char là biểu thức chính quy.
skibrianski

Hiểu rồi. Cảm ơn đã gửi!
nrubin29

1

perl, 155 ký tự

Chỉ là một loạt các biểu thức thông thường thời gian này. Bạn có thể nhận được mã ngắn hơn bằng cách sắp xếp lại mọi thứ một chút để đại từ đi sau động từ, vì chúng tôi chỉ thực sự quan tâm đến sự kết thúc của động từ:

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

Có vẻ như ở trên hiện đang là người chiến thắng của mã mà bỏ qua phần thưởng.

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

Bash, 301 309 (sửa lỗi) 307 299 bao gồm các dòng mới

Không tuyệt vời so với những người khác ngoài kia. Có thể được cải tiến.

Nó khai thác một số sự trùng hợp thuận tiện.

Lỗi này không dựa vào động từ tiếng Tây Ban Nha có "ii" ở bất cứ đâu, do cách nó lưu các ký tự khi xử lý vosotros với các động từ -ir. Xin hãy sửa tôi nếu điều đó sai.

Giả sử đầu vào hợp lệ: đối số đầu tiên là đại từ viết thường, với bất kỳ dấu cần thiết nào; đối số thứ hai là nguyên từ của động từ. Không có thay đổi gốc thực hiện. Xuất ra động từ liên hợp, trong trường hợp thấp hơn, không có dấu.

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

Giải thích. `` là một ký hiệu tối nghĩa cho việc $( )lưu một char.

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

lấy động từ kết thúc

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

lấy char đầu tiên của động từ kết thúc

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

lấy gốc động từ

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

Động từ gốc + o. $ o là đầu ra của chúng tôi

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

lấy thân + chữ cái đầu tiên kết thúc + mos

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

gốc + chữ cái đầu tiên của kết thúc + là (không có dấu)

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

trong tất cả các tình huống ngoại trừ hai động từ trên, động từ -ir hoạt động như động từ -er. đổi $ f thành e nếu là i.

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

thân + $ f + s

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

nếu chữ cuối cùng của kết thúc là s. điều này bao gồm ellos, ellas, ustes mà tất cả đều có cùng kết thúc. tiện như thế nào.

o="$s$f"n;

thân + $ f + n

else o=$s$f;fi

chúng tôi đang giả sử đầu vào hợp lệ, do đó, các khả năng khác là Él, Ella và Usted, tất cả đều có cùng kết thúc

fi
tr -s i <<< $0

đầu ra in, loại bỏ gấp đôi i (xuất hiện khi bạn sử dụng vosotros với động từ ir)


0

perl, 298 ký tự

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

hoặc nếu chúng ta có thể thận trọng với gió và giả sử đầu vào hợp lệ, 246 ký tự:

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

đầu ra thử nghiệm:

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

Tôi nghĩ sẽ ổn khi giả sử đầu vào hợp lệ, nhưng tôi đã không nói rõ điều đó trước đây. các bạn nghĩ sao?
nrubin29

@ nrubin29 Nếu bạn không tuyên bố chúng tôi phải xử lý dữ liệu nhập không hợp lệ, thì chúng tôi cho rằng chúng tôi không phải xử lý. (Tốt nhất nên nói rõ ràng trong câu hỏi rằng chúng tôi không phải xử lý nó.) Nếu chúng tôi phải xử lý nó, bạn sẽ phải xác định cách làm. Đây là mã golf, hầu như tất cả các câu trả lời ở đây có thể bị phá vỡ với đầu vào không hợp lệ. Ngoài ra Rizer và tôi đã thảo luận liệu có cần thiết phải phân tích toàn bộ đại từ trong các bình luận về câu hỏi không (Anh ấy đã xóa phần của mình, nhưng tôi vẫn ở đó.) BTW, bạn hoàn toàn đưa ra quyết định đúng đắn rằng chúng tôi không phải xử lý điểm nhấn.
Cấp sông St

Tôi sẽ thêm vào các hướng dẫn rằng đầu vào hợp lệ có thể được giả sử miễn là điều đó không được tính là "thay đổi quy tắc". Đừng muốn chọc giận ai nữa. Ngoài ra, khi nào tôi chấp nhận một câu trả lời? Sau một tuần?
nrubin29

-1

Java - Quá dài

Tôi thậm chí sẽ không bận tâm đếm. Nếu bất cứ ai muốn chơi golf tốt hơn, xin vui lòng làm. Cuối cùng tôi sẽ thực hiện thử thách thay đổi thân cây.

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");
    }
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.