Desafío
Escriba una función que tome un argumento que sea un verbo y devuelva el tiempo pasado del verbo. (Suponga que el verbo es regular)
Pasado
Nota: considere y como consonante ni vocal.
Normalmente, solo agregar ed
después del final del verbo hace que el verbo sea en tiempo pasado.
Ej: jump
→ jumped
, ask
→asked
Sin embargo, hay otras reglas.
Si el último carácter del verbo dado es
e
, simplemente agregued
.Ej:
love
→loved
,move
→moved
Si el verbo termina con una consonante +
y
, entonces cambiey
ai
y agregueed
.Ej:
study
→studied
,cry
→cried
Sin embargo, si el verbo termina con una vocal +
y
, entonces simplemente agregueed
.Ej:
play
→played
,stay
→stayed
Si un verbo termina con una vocal y una consonante, entonces escríbela una vez más y suma
ed
.Ej:
stop
→stopped
,plan
→planned
Sin embargo, si un verbo termina con varias vocales + una consonante o una sola vocal + varias consonantes, entonces simplemente agregue
ed
.Ej:
look
→looked
,jump
→jumped
Hay más reglas, pero cuidemos solo las reglas anteriores. Por ejemplo, de acuerdo con la regla anterior, visit
→ visitted
.
Ganador
Como se trata del código golf, gana el código más corto que devuelve correctamente los tiempos pasados.
Ejemplo (JS, 127)
function f(x){return x.replace(/([^aeiouy])y$/,'$1i').replace(/([^aeiouy][aeiou])([^aeiouy])$/,'$1$2$2').replace(/e$/,'')+'ed'}
Respuestas:
sed, 76 caracteres
¿Un script sed cuenta como una función para este problema?
fuente
Mathematica 43 caracteres
Uso:
También:
fuente
Groovy - 111 caracteres
fuente
Perl 5 (82 caracteres):
Estoy seguro que puede ser mejorado.
fuente
C -
120119 caracteresEn el estilo típico de C, la función f actualiza un búfer de cadena en su lugar, suponiendo que la persona que llama ha reservado suficiente espacio para hasta tres caracteres adicionales. El segundo argumento debe darse como 0. La declaración de la variable de estado global
l
se incluye en el recuento total de caracteres.Explicación: La función itera sobre los caracteres de forma recursiva. El segundo argumento
i
codifica cuáles de los tres caracteres anteriores eran consonantes en sus tres bits inferiores. Al final de la cadena, sii==5
los tres últimos caracteres eran una consonante, una vocal y una consonante, y por lo tanto el último carácter debe duplicarse. De manera similar, si el bit 1 dei
indica que el penúltimo carácter era una consonante y el último carácter es 'y', entonces la 'y' se reemplaza por 'i'.fuente
Scala 199
273caracteresInvocación:
Mi primer enfoque fue mucho más largo, moviendo la cascada if-else a una lista => a una función:
Quizás el enfoque sea interesante. Degolfed y explicó:
fuente
Ruby, 101 caracteres
Probablemente puede ser más pequeño.
Uso:
fuente
f=->(x){...}
para obtener un código más corto. También enaeiouy
mi humilde opinión debería ser una constante.Caca - 72 caracteres
fuente
Python - 147
fuente