Spanischer Verbkonjugator

8

Erläuterung

Hallo! Für diejenigen unter Ihnen, die kein Spanisch sprechen, wird ein Verb basierend auf der Person konjugiert, die die Aktion ausführt. Hier ist eine Tabelle:

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

In Spanisch, alle Verben enden mit ar, eroder ir. Hier ist eine weitere hilfreiche Tabelle:

          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

Wenn Sie ein Pronomen und ein Verb haben, drucken Sie das mit dem Pronomen in der Gegenwart konjugierte Verb. Mach dir keine Sorgen über Stammwechsel und seltsame Verben.


Beispiele

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

Wenn Ihre Sprache das Drucken mit Akzenten nicht unterstützt, können Sie diese weglassen. Andernfalls sollten keine weiteren Zeichen erforderlich sein, um á anstelle von a in Ihrem Code zu verwenden.

Weitere Wörter zum Testen finden Sie hier: http://spanish.speak7.com/spanish_vocabulary_verbs.htm . Beachten Sie, dass der Wettbewerber ein Wettbewerber sein sollte.


Herausforderung: Stammveränderungen

Im Spanischen haben einige Verben Stammänderungen. Nehmen wir quererzum Beispiel das Verb . In allen Formen außer Nosotros und Vosotrose ändert sich die erste zu ie. Also yo quiero, aber nosotros queremos. Wenn Ihr Programm Stammänderungen berücksichtigen kann, können Sie die doppelte Länge jedes von Ihnen unterstützten Wortes von Ihrer endgültigen Punktzahl abziehen. Wenn Sie beispielsweise die Änderung i-> und nur unterstützen , können Sie die doppelte Länge von oder 12 von Ihrer Punktzahl abziehen .iequererquererquerer

Versuchen Sie für einige stammverändernde Verben Folgendes: https://conjuguemos.com/chart.php?language=spanish&id=2&etre=no&commands=no&all=no&source=public


Kleine Boni

Nur zum Spaß, wenn Sie erklären, was Ihr Code auf Spanisch tut, nehmen Sie 30 von Ihrer Punktzahl ab. Verwenden Sie nicht nur Google Translate, sonst kann ich Ihnen sagen, dass Sie betrogen haben.


(Da ich kein spanischer Muttersprachler bin, korrigieren Sie mich bitte bei Fehlern.)

nrubin29
quelle
2
Ich nehme kein Spanisch: Ich spreche es einfach; aber a) ist die Nominativform des Pronomen: tu ist Genitiv; b) Verben werden nicht mit Pronomen "gepaart"; c) Nominativpronomen werden im Spanischen selten verwendet, daher lehrt diese Übung schlechte Gewohnheiten; d) Sie sollten erwähnen, dass dies nur den vorliegenden Indikativ konjugiert; e) Sie haben nicht gesagt, wie Sie mit pronominalen (auch reflexiven) Verben umgehen sollen; f) Die häufigsten Verben sind unregelmäßig, daher ist dies kein praktisches Werkzeug: Wenn Sie eine Frage zur Verbkonjugation stellen möchten, ohne sich um Unregelmäßigkeiten sorgen zu müssen, sollten Sie Esperanto anstelle von Castellano verwenden.
Peter Taylor
1
a) Das jetzt beheben. b) Fair genug, Fixierung. c) Stimmt, aber dies ist eher eine Herausforderung als ein brauchbares Werkzeug. Ich könnte die Anforderung zum Drucken des Pronomen (yo escribir -> escribo) entfernen, aber ich lasse es lieber in. F) Ich lasse es einfach in "normalem" Spanisch und füge eine Herausforderung für "spezielle" Verben hinzu. Hoffe ich bin nicht so unhöflich rausgekommen, ich schätze das Feedback.
Nrubin29
3
Während ich gerade an meiner Antwort arbeitete, haben Sie die Wertung geändert, indem Sie eine Bonus-Herausforderung hinzugefügt haben! Ich bin nicht mehr daran interessiert, dies zu spielen, da sich die Bonuspunkte zusätzlich ändern und weitere Änderungen versprochen werden. Ich habe bereits eine Stunde damit verschwendet, und diese Stunde ist zu Ihrer Gegenstimme geworden.
Rainbolt
2
@ nrubin29: Ich habe nicht abgelehnt, aber ich stimme mit Rusher überein. Sie sollten die Wertung und die Regeln nicht ändern, nachdem die Frage veröffentlicht wurde - insbesondere, nachdem bereits eine Antwort veröffentlicht wurde. Verwenden Sie den Sandkasten, wenn Sie mit der Frage noch nicht zufrieden sind.
Claudiu
1
@grovesNL zumindest, dass -30 keinen großen Unterschied macht. Die Sache, die diese Frage getötet hat, ist der unbegrenzte Bonus für stammverändernde Verben. Ich dachte, wir hätten die Unklarheiten für das OP ausgeräumt, dann warf er plötzlich zwei neue Boni ein und beleidigte Rusher. Hoffentlich lernt er, vorauszudenken, den Sandkasten zu benutzen und seinen Fragen nach dem Posten keine Bits hinzuzufügen. Es ist zu spät, um jetzt zurückzukehren.
Level River St

Antworten:

3

Python, 172 168 743 Zeichen - 1796 Bonus = -1053

Aktualisiert, um die Herausforderung des Stammwechsels anzunehmen.

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

Verwendung :

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

Test auf nicht stielverändernde Eingaben :

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

Stammverändernde Eingabebeispiele :

Es werden sowohl Änderungen vorgenommen als auch Änderungen vorgenommen, wobei die Fälle von Nostros + Vostros ordnungsgemäß vermieden werden:

$ 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

So wurde der Bonus ermittelt und die Datenzeichenfolge generiert, aus der Sie die Verben ableiten können, mit denen er funktioniert:

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`

Welches gibt:

$ 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
quelle
Ich werde mich von den Stammänderungen fernhalten, weil es eher um die Linguistik als um die Programmierung geht. Acordar sollte doch Acord ** sein? Und Sie können nicht die richtige Antwort für regar> riego, riegas usw. und regir> rijo, riges usw. geben
Level River St
@steveverrill: oh yep ich denke "acordar" ist durchgerutscht. Es stimmt, ich kann nicht mit denselben Verben unterschiedlicher Stämme umgehen, aber zB wäre "regir" sowieso falsch, da ich nicht g-> j mache. Genauigkeit ist für diesen nicht so wichtig. Ich sehe Ihren Punkt, aber ich konnte den enormen Segen an Bonuspunkten nicht aufgeben =).
Claudiu
@steveverrill: Es besteht auch die Möglichkeit eines Fehlers, wenn ein Verb in die zusammengesetzten verketteten Verben passt. Wenn es beispielsweise ein reguläres Verb "Tenacar" gibt, wird es als stammveränderndes konjugiert. Dies kann ich beheben, indem ich in der .s lasse, würde 50 Punkte oder so zur Punktzahl hinzufügen
Claudiu
Ich versuche, das Verb abzuleiten, für das Sie tenin Ihrer Wurzelliste stehen. teñir ist e zu i , nicht e zu ie ; tener ist e bis ie , hat aber einen unregelmäßigen Stammwechsel für 1s. Ähnlich abstener , circunvenir , obtener , sostener , venir , cocer , destorcer , oler , retorcer , torcer . Auf der anderen Seite scheint Ihr Scoring-Skript nicht sowohl sentar als auch sentar zu zählensentir . Und Sie vermissen ein .In sosegsostenund descontrsollten es wahrscheinlich sein descont.
Peter Taylor
@ PeterTaylor: Es ist, tenerdenke ich. Ich wusste nicht, dass die von Ihnen aufgelisteten Verben einen Sonderfall hatten. Ich kann sie entfernen oder für sie verantwortlich machen (je nachdem, was billiger ist) und die Tippfehler beheben, wenn es einen anderen engen Anwärter gibt
Claudiu
3

Python, 240 Bytes - (extrem großer) Bonus

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

Beispielausgabe:

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

Erläuterung:

Dieser Code verwendet eine vorhandene kostenlose Konjugationswebsite ( http://www.conjugation.org/ ), die verschiedene Konjugationen aus einer großen Datenbank von Verben zurückgibt. Ich habe die URL leicht reduziert, indem ich einen kostenlosen Online-URL-Shortener verwendet habe, mit dem Parameter durch die Umleitung übergeben werden können ( http://smarturl.it/ ). Ich mache einfach eine HTTP-Anfrage basierend auf dem angegebenen Verb, entferne die Akzente aus der uund ein der Quelle, finde das Pronomen im HTML mit regulären Ausdrücken und gebe dann die zugehörige Konjugation zurück.

Es ist unmöglich zu sagen, wie viele Verben Stammänderungen aufweisen, ohne die gesamte Datenbank mit einem Wörterbuch abzufragen. Es ist wahrscheinlich sicher anzunehmen, dass der negative Bonus aus dieser Datenbank viel größer ist als jeder Bonus aus übergebenen codierten Listen (die die Länge des Codes erhöhen).

Ich hätte die Zeichen mit Akzent natürlich besser behandeln können, aber es hätte Codierung / Decodierung und zusätzliche Behandlung innerhalb der regulären Ausdrücke erforderlich gemacht.

grovesNL
quelle
3
Nicht mehr lustig
Claudiu
@Claudiu: Es soll keine Lücke sein - dieser Beitrag ist hier nicht relevant. Die Frage selbst weist schwerwiegende Mängel auf, die eine externe Abhängigkeit erforderlich machen. Das Übergeben einer Base64-codierten Datenfolge ist nicht besser als das Herstellen einer Verbindung zu einer externen Datenquelle.
GrovesNL
Es ist besser, weil es als Teil meiner Punktzahl gezählt wird. Mein Skript ist völlig in sich geschlossen und erledigt tatsächlich die Konjugationsarbeit. Ihre ruft es einfach von einer externen Datenquelle ab. Sie können Ihre Punktzahl nicht einmal zählen, da dies ganz davon abhängt, wie viele Verben die Datenquelle verarbeitet. Wenn diese Site oder der URL-Shortener ausfällt, wird Ihre Antwort ungültig.
Claudiu
@Claudiu: Unabhängig davon ist es irrelevant, da die Frage am besten geeignet ist, auf eine externe Datenbank zu verweisen. Die Konjugationen selbst sind so trivial wie das Verwenden re.suboder string.replaceNicht-Behandeln von Stammänderungen usw. Selbst Ihr Programm würde eine höhere negative Punktzahl erhalten, wenn Sie Ihrer codierten Liste weitere Verben zum Ändern von Stämmen hinzufügen. Die Frage ist fehlerhaft.
GrovesNL
1
@Claudiu, grovesNL Hahaha. Haha. Beruhige euch beide. In diesem Fall ist es lustig, weil die Frage fehlerhaft ist. Es ist nur ein Spiel und Sie beide haben Fehler in Ihrem Spanisch. Aufgrund dieses Fehlers wird es unmöglich sein, einen Gewinner zu nennen. Der Gewinn ist sowieso nur 15 Ruf. Hier haben Sie jeweils eine Gegenstimme und spielen gut.
Level River St
1

Freepascal, 218 Zeichen -30 = 189

Es ist eine schwierige Aufgabe, die (ursprüngliche) Python-Antwort zu übertreffen, insbesondere bei Pascal. Ich kann versuchen, mich morgen zu verbessern, möglicherweise mit einem ähnlichen Konzept in einer anderen Sprache. Ich werde keine stammverändernde Antwort einreichen, da ich dies eher als sprachliche als als als programmatische Herausforderung betrachte.

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.

Ungolfed Version:

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 (Auf Spanisch für den -30 Bonus, seit Sie gefragt haben)

el segundo extrae su desinencia. el copyprimundo come parometros el string , el indice para empezar (en est caso 1) und la cantidad de letras (en est caso length-2. )

6*(7-pos(p[1],' yt v n')se evalúa según la primera letra del pronombre. Si el pronombre es él / ella (o / s) o usted (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 tipo de verbo , formando un ciclo de 12. El resto de yconsiste en todas las desinencias. Se ha logrado intercalar parcialmente las desinencias para "tu" y "yo." Das Embargo für die Begehung der Espacio en Blanco que me gustaría eliminar. Así se definieren el indice para buscar la desinencia en y.

pos(p[length(p)],'u s')+1)Bestimmen Sie die Anzahl der Zeichen für Imprimir. si el pronombre no termina en so usolo se imprime un cáracter. De esta manera suprimimos la segunda letra de an en enen el caso de un pronombre de tercera persona singular: él, ella, usted.

Ausgabe

Geben Sie hier die Bildbeschreibung ein

Level River St.
quelle
1

Perl, 243 Zeichen

Diesmal konzentrieren wir uns auf die Hash-Suche. Ich bin ziemlich überrascht, dass ich nicht kleiner werden konnte.

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

Und wenn die Eingabevalidierung nicht wichtig ist, 186 Zeichen:

$_=<>;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
quelle
Ist dies eine verbesserte Antwort auf Ihre letzte Antwort?
Nrubin29
Ich habe 3 verschiedene Antworten mit 3 verschiedenen Methoden gepostet. Die beste Anzahl von Zeichen ist der reguläre Ausdruck.
Skibrianski
Ich habs. Danke für die Einsendungen!
Nrubin29
1

Perl, 155 Zeichen

Diesmal nur ein paar reguläre Ausdrücke. Sie können kürzeren Code erhalten, indem Sie die Dinge leicht neu anordnen, sodass das Pronomen nach dem Verb steht, da wir uns nur wirklich um das Ende des Verbs kümmern:

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

Scheint, als ob das Obige derzeit der Gewinner des Codes ist, der den Bonus ignoriert.

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
quelle
1

Bash, 301 309 (Bugfix) 307 299 einschließlich neuer Zeilen

Nicht großartig im Vergleich zu den anderen da draußen. Könnte verbessert werden.

Es nutzt einige bequeme Zufälle aus.

Der Bugfix basiert darauf, dass kein spanisches Verb irgendwo "ii" hat, da beim Umgang mit Vosotros mit -ir-Verben Zeichen gespeichert werden. Bitte korrigieren Sie mich, wenn das falsch ist.

Nimmt eine gültige Eingabe an: Das erste Argument ist das Kleinbuchstabenpronomen mit allen erforderlichen Akzenten. Das zweite Argument ist der Infinitiv des Verbs. Keine Stammänderungen implementiert. Gibt das konjugierte Verb in Kleinbuchstaben ohne Akzente aus.

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

Erklärt. `` ist eine obskure Notation für das $( )Speichern eines Zeichens.

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

Holen Sie sich das Verb Ende

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

Holen Sie sich das erste Zeichen der Verbende

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

Holen Sie sich den Verbstamm

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

Verbstamm + o. $ o ist unsere Ausgabe

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

nimm den Stamm + den ersten Buchstaben des Endes + mos

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

Stamm + erster Buchstabe der Endung + ist (keine Akzente)

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

In allen Szenarien mit Ausnahme der beiden oben genannten verhalten sich -ir-Verben wie -er-Verben. ändere $ f in e, wenn es i ist.

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

Stamm + $ f + s

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

wenn der letzte Buchstabe der Endung s ist. Dies schließt ellos, ellas, ustedes ein, die alle die gleichen Enden haben. Wie praktisch.

o="$s$f"n;

Stamm + $ f + n

else o=$s$f;fi

Wir gehen von einer gültigen Eingabe aus, daher sind die einzigen anderen Möglichkeiten Él, Ella und Usted, alle mit denselben Endungen

fi
tr -s i <<< $0

Druckausgabe, Entfernen von doppelten i (die angezeigt werden, wenn Sie Vosotros mit einem ir-Verb verwenden)


quelle
0

Perl, 298 Zeichen

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

oder wenn wir Vorsicht walten lassen und eine gültige Eingabe annehmen können, 246 Zeichen:

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

Testausgabe:

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
quelle
Ich denke, es wäre in Ordnung, eine gültige Eingabe anzunehmen, aber das habe ich vorher nicht angegeben. Was denkt ihr?
Nrubin29
@ nrubin29 Wenn Sie nicht angegeben haben, dass wir ungültige Eingaben verarbeiten müssen, gehen wir davon aus, dass wir nicht damit umgehen müssen. (Es wäre am besten gewesen, in der Frage explizit anzugeben, dass wir nicht damit umgehen müssen.) Wenn wir damit umgehen müssten, müssten Sie angeben, wie. Dies ist Code Golf, praktisch alle Antworten hier können mit ungültiger Eingabe gebrochen werden. Auch Rusher und ich diskutierten, ob es notwendig war, das gesamte Pronomen in den Kommentaren zu der Frage zu analysieren (Er hat seinen Teil gelöscht, aber meiner ist immer noch da.) Übrigens, Sie haben absolut die richtige Entscheidung getroffen und gesagt, dass wir nicht damit umgehen mussten Akzente.
Level River St
Ich werde den Richtlinien hinzufügen, dass gültige Eingaben angenommen werden können, solange dies nicht als "Ändern der Regeln" gilt. Ich will niemanden mehr verärgern. Wann akzeptiere ich eine Antwort? Nach einer Woche?
Nrubin29
-1

Java - zu lang

Ich werde mich nicht einmal die Mühe machen zu zählen. Wenn jemand dies besser Golf spielen möchte, tun Sie dies bitte. Ich werde schließlich die Herausforderung des Stammwechsels umsetzen.

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
quelle