Вызов
Напишите функцию, которая принимает аргумент, который является глаголом, и возвращает прошедшее время глагола. (Предположим, что глагол правильный)
Прошедшее время
Примечание: не считайте y согласным или гласным.
Обычно простое добавление ed
после глагола делает прошедшее время глагола.
Пример: jump
→ jumped
, ask
→asked
Однако есть и другие правила.
Если последний символ данного глагола
e
, просто добавьтеd
.Пример:
love
→loved
,move
→moved
Если глагол заканчивается согласной +
y
, тогда изменитеy
наi
и добавьтеed
.Пример:
study
→studied
,cry
→cried
Однако, если глагол заканчивается гласной +
y
, тогда просто добавьтеed
.Пример:
play
→played
,stay
→stayed
Если глагол заканчивается гласной и согласной, то напишите согласную еще раз и добавьте
ed
.Пример:
stop
→stopped
,plan
→planned
Однако, если глагол заканчивается несколькими гласными + согласной или одной гласной + несколькими согласными, тогда просто добавьте
ed
.Пример:
look
→looked
,jump
→jumped
Есть больше правил, но давайте позаботимся только над правилами. Например, согласно вышеуказанному правилу visit
→ visitted
.
победитель
Поскольку это кодовый гольф, выигрывает самый короткий код, который правильно возвращает прошедшие времена.
Пример (JS, 127)
function f(x){return x.replace(/([^aeiouy])y$/,'$1i').replace(/([^aeiouy][aeiou])([^aeiouy])$/,'$1$2$2').replace(/e$/,'')+'ed'}
Ответы:
sed, 76 знаков
Считается ли сценарий sed функцией этой проблемы?
источник
Mathematica 43 символа
Использование:
Также:
источник
Groovy - 111 символов
источник
Perl 5 (82 символа):
Я уверен, что это может быть улучшено.
источник
C -
120119 знаковВ типичном стиле C функция f обновляет строковый буфер на месте, предполагая, что вызывающая сторона зарезервировала достаточно места для трех дополнительных символов. Второй аргумент должен быть задан как 0. Объявление глобальной переменной состояния
l
включено в общее количество символов.Объяснение: Функция рекурсивно перебирает символы. Второй аргумент
i
кодирует, какие из предыдущих трех символов были согласными в его младших трех битах. В конце строки, еслиi==5
тогда последние три символа были согласными, гласными и согласными, и, следовательно, последний символ должен быть продублирован. Точно так же, если бит 1i
указывает, что второй-последний символ был согласной, а последний символ - «y», то «y» заменяется на «i».источник
Scala 199
273символаПризвание:
Мой первый подход был намного длиннее, переместив каскад if-else в список => в функцию:
Может быть, подход интересен. Дегольфед и объяснил:
источник
Рубин, 101 персонаж
Вероятно, может быть меньше.
Использование:
источник
f=->(x){...}
чтобы получить более короткий код. Такжеaeiouy
ИМХО должно быть постоянным.Корма - 72 символа
источник
Питон - 147
источник