Herausforderung
Schreiben Sie eine Funktion, die ein Argument verwendet, das ein Verb ist, und die Vergangenheitsform des Verbs zurückgibt. (Angenommen, das Verb ist regulär)
Vergangenheitsform
Hinweis: Betrachten Sie y weder als Konsonanten noch als Vokale.
Normalerweise wird durch einfaches Hinzufügen ed
nach dem Ende des Verbs die Vergangenheitsform des Verbs erstellt.
Bsp .: jump
→ jumped
, ask
→asked
Es gibt jedoch andere Regeln.
Wenn das letzte Zeichen des angegebenen Verbs ist
e
, fügen Sie einfach hinzud
.Bsp .:
love
→loved
,move
→moved
Wenn das Verb mit einem Konsonanten + endet
y
, ändern Sie esy
zui
und fügen Sie es hinzued
.Bsp .:
study
→studied
,cry
→cried
Wenn das Verb jedoch mit einem Vokal + endet
y
, fügen Sie einfach hinzued
.Bsp .:
play
→played
,stay
→stayed
Wenn ein Verb mit einem Vokal und einem Konsonanten endet, schreiben Sie den Konsonanten noch einmal und fügen Sie hinzu
ed
.Bsp .:
stop
→stopped
,plan
→planned
Wenn ein Verb jedoch mit mehreren Vokalen + einem Konsonanten oder einem einzelnen Vokal + mehreren Konsonanten endet, fügen Sie einfach hinzu
ed
.Bsp .:
look
→looked
,jump
→jumped
Es gibt mehr Regeln, aber wir sollten uns nur um die Regeln kümmern. Zum Beispiel laut der obigen Regel visit
→ visitted
.
Gewinner
Da dies Codegolf ist, gewinnt der kürzeste Code, der die Vergangenheitsform korrekt zurückgibt.
Beispiel (JS, 127)
function f(x){return x.replace(/([^aeiouy])y$/,'$1i').replace(/([^aeiouy][aeiou])([^aeiouy])$/,'$1$2$2').replace(/e$/,'')+'ed'}
Antworten:
sed, 76 zeichen
Zählt ein sed-Skript als Funktion für dieses Problem?
quelle
Mathematica 43 Zeichen
Verwendung:
Ebenfalls:
quelle
Groovy - 111 Zeichen
quelle
Perl 5 (82 Zeichen):
Ich bin sicher, dass es verbessert werden kann.
quelle
C -
120119 ZeichenIm typischen C-Stil aktualisiert die Funktion f einen vorhandenen Zeichenfolgenpuffer, vorausgesetzt, der Aufrufer hat genügend Platz für bis zu drei zusätzliche Zeichen reserviert. Das zweite Argument sollte mit 0 angegeben werden. Die Deklaration der globalen Statusvariablen
l
ist in der Gesamtzahl der Zeichen enthalten.Erläuterung: Die Funktion durchläuft die Zeichen rekursiv. Das zweite Argument
i
kodiert, welche der drei vorhergehenden Zeichen in den unteren drei Bits Konsonanten waren. Wenni==5
die letzten drei Zeichen am Ende der Zeichenfolge ein Konsonant, ein Vokal und ein Konsonant waren, muss das letzte Zeichen dupliziert werden. Wenn Bit 1 voni
angibt, dass das vorletzte Zeichen ein Konsonant war und das letzte Zeichen 'y' ist, wird das 'y' durch 'i' ersetzt.quelle
Scala 199
273ZeichenAufruf:
Mein erster Ansatz war viel länger, indem ich die if-else-Kaskade auf eine Liste => auf eine Funktion verschob:
Vielleicht ist der Ansatz interessant. Entgolfet und erklärt:
quelle
Ruby, 101 Zeichen
Kann wohl kleiner sein.
Verwendung:
quelle
f=->(x){...}
von Ruby 1.9 , um kürzeren Code zu erhalten. Auchaeiouy
meiner Meinung nach sollte eine Konstante sein.Poop - 72 Zeichen
quelle
Python - 147
quelle