У меня есть простая задача, которую относительно легко реализовать с помощью кода. Ваша цель - написать программу, которая будет выводить время, написанное на испанском языке, с учетом времени в формате ЧЧ: ММ. Многие люди, вероятно, не знают, как это сделать, поэтому я уточню.
Время на испанском довольно логично. Обычно это соответствует схеме «Es la / Son las (час) y (минуты)». Часы представлены в 12-часовом формате, и «Es la» используется только в том случае, если час равен 1 (т. Е. Один час). Минуты это другая история. Если минута меньше 30, то она представлена, как показано выше. Однако, если минута больше 30, то час округляется, а минута вычитается. Например, 7:35 переводится как «8 часов минус 25 минут». Еще несколько примеров будут приведены ниже. Список необходимых испанских номеров можно найти здесь . На некоторых номерах есть акценты, но они не обязательны.
Примечание: источник говорит «uno», но чтобы быть грамматически правильным, он должен быть «una». Это не должно повлиять на какие-либо ответы до сих пор.
Примечание 2: Кроме того, «Cero» не является необходимым. Если ваша программа выдает «Es la una» или «Son las tres», это нормально для меня. Извините за эти изменения правил.
правила
- Ввод будет предоставлен через STDIN или эквивалент на вашем языке.
- Нет чтения из внешних библиотек.
- Ваш код может делать что угодно с неверным вводом.
Бонусы
- -10, если ваш код добавляет эти дополнительные фразы - «y cuarto» для: 15, «y media» для: 30 и «menos cuarto» для: 45 (округлено в большую сторону).
- -15 если ваш код может обрабатывать AM и PM, отвечая соответственно "de la mañana" и "de la tarde".
- -15, если ваш код может переводить текущее время, если ввод не предоставлен.
счет
- Это вызов кода-гольфа, и его будут оценивать байты, а не символы.
Примеры
Вход: 8:10
Выход:Son las ocho y diez.
Вход: 6:45
Выход:Son las siete menos quince (or cuarto).
Вход: 1:29
Выход:Es la una y veintinueve.
Вход: 12:55
Выход:Es la una menos cinco.
Дайте мне знать, если есть что-то, чтобы указать здесь. Это мой первый вопрос, поэтому он определенно не идеален.
Es la una y cero
довольно повторяющийся, так что я вижу вашу точку зрения. Я не уточнил это, так что, думаю, все будет хорошо. Спасибо за ответ.01:21
в качестве контрольного примера, потому что по крайней мере один ответчик был смущен тем, что вы сказали о una vs uno .Ответы:
JavaScript (ES6) 308
316Исправление ошибки Edit2 Edit забыл требовать бонус
Как программа с I / O через всплывающее окно
В качестве тестируемой функции
Тест в консоли FireFox / FireBug
Выход
источник
Да, наименее ожидаемый язык, который появится на соревнованиях по гольфу, закодированный худшим в мире гольфистом, вернулся!
Java - 676 байт (716-10-15-15)
Golfed:
Ungolfed:
Имеет дело с
quarto
иmedia
, с AM / PM и не имеет ввода. Так что я могу получить все бонусы, даже если бы я не реализовал эти функции, у меня был бы еще более низкий балл, лол. facepalmsисточник
Питон 3: 294 символа - 10 = 284
Это дает бонус в десять баллов за использование «cuarto» и «media»
Мы читаем часы и минуты как
int
s. Если минуты больше 30, мы переходим к следующему часу, отсчитываем минуты от 60 и меняем соединение на «menos».В списке
d
есть переводы испанских чисел до 15. Мы сделатьd[0]
бы ,''
чтобы предотвратить такие вещи , как «diecicero». Это делается путем неловкого вызоваsplit(' ')
с начальным пробелом; регулярныйsplit
просто проигнорирует это. Случай с нулевой минутой обрабатывается позже.Чтобы получить числа выше 15, мы объединяем строку из десяти цифр с соответствующей строкой из одной цифры.
15
и30
пишутся как «СМИ» и «Cuarto» бесплатно.Python 3 сохраняет одну сеть символов над Python 2: -4
input
вместо вместоraw_input
+2 для паренов в печати, +1 для//
.источник
una
вuno
, теперь должно работать.PHP,
351349360 - 15 = 345 байтЭта программа не является командной строкой: она принимает ввод через $ _GET [0]. Возможно, вам придется отключить уведомления в вашем php.ini. Теперь поставляется с автоматическим временем без ввода, благодаря Niet the Dark Absol.
Используемые хитрости:
~(...)
сохраняет один байт путем побитового инвертирования строки, так как вам не нужны кавычки, так как PHP обычно предполагает, что все ASCII от 0x80 до 0xFF являются строками.<?=preg_filter(...,...)
: Это<?=
ярлык для записи<? echo
.preg_filter()
обычно применяет замены к строке с помощью регулярного выражения, но мы можем использовать модификатор depreciated / e, чтобы оценить полученную строку как код PHP. Следовательно, вместо того, чтобы разбивать входную строку на две отдельные переменные, мы можем использовать обратные ссылки ($ 1 и $ 2) на соответствующую входную строку, сохраняя большое количество байтов.источник
$_GET[0]?:date(~·Å–)
чтобы вычесть 3 из вашего счета.C ++:
474...422411 байтЭта версия выкупает бонус cuarto / media (-10).
Моя первая попытка игры в гольф! Постараюсь улучшить это в эти выходные.
Ungolfed:
источник
m%=10
Lua, 450 - 10 (cuarto / media) - 15 (manana / tarde) = 425
H>=12
сH<12
и переключение на зависимую экспрессию вокруг.table.concat
заменой строковых операций и добавлением предложения @ edc65, в итоге добавив 22 байта.function
тела в основной кусок уменьшило длину на целых 15 байтов .источник
Es la una y uno
D - 484 байта
источник
Es la una y uno
Python 3, 409 байт
источник
'string1 string2 string3'.split()
d[j]if i<31 else d[(j+1)%12]
доd[(j+(i>30))%12]
. В общем, если ваши две альтернативы имеют схожую структуру, вы часто можете сделать простое выражение, равное каждому соответствующему в зависимости от логического значения.Руби, 313 (338 - 15 - 10)
Это решение переводит текущее время, когда не было введено никаких данных, и добавляет три фразы «y cuarto», «y media» и «menos cuarto».
источник
Son las ocho y diecioch
Баш 423
(433 - 10 = 423, без диакритических знаков и cuarto мы могли бы спуститься до 381)
источник
Perl - 297 - 10 + 1 = 288 (считая
p
флаг)Редактировать: благодаря @guifa, теперь я могу получить бонус :)
Вот один и тот же код в несколько строк для удобства чтения:
источник
Es la una y uno
Scala 652 байта - 25
источник
Pyth :
277больше234 - 10 (бонус cuarto / media) = 224 байтаТеперь уменьшено более 50 байтов от оригинала!
Безумно скучаю по Пифу, но это потому, что есть некоторые необработанные данные. Возможно, можно играть в гольф еще дальше. Использует очевидную технику разбиения задачи на часы, y / menos, десятки цифр минут и единицы цифр минут, а затем переводит числа с использованием массива перевода, а все остальное - с использованием троицы.
История гольфа
источник
":"
и"i"
, используйте\:
и\i
вместо.