Мой учитель всегда дает мне самый сложный набор математических задач для домашней работы. Как: pg. 546: 17-19, 22, 26, pg. 548: 35-67 odd, 79, 80-86 even
. И я хочу знать заранее, сколько времени отводится на мою домашнюю работу, но я не хочу разбираться со всем этим. Вот почему ваша задача - запрограммировать это для меня.
Характеристики
- Вы получите строку, детализирующую проблемы, которые я должен выполнить как args, stdio и т. Д.
- Они будут разделены запятыми (возможно,
comma-space
разделены) - Он будет включать в себя отдельные проблемы в виде только числа (например
79
) - И диапазоны в форме
17-18
(опять же, вам приходится иметь дело с необязательными пробелами) - Диапазоны включают оба конца
- К диапазонам можно добавить суффикс
odd
илиeven
, который вы должны принять во внимание. - К набору диапазонов / страниц будет добавлен номер страницы в форме
pg. 545:
, опять же, с необязательными пробелами. Вы можете спокойно их игнорировать, так как вам нужно решить проблемы со всеми страницами. - Текст может быть в верхнем или нижнем регистре, но не будет и то и другое.
- Возврат, стандартный вывод и т. Д. Количество проблем, которые я должен сделать для домашней работы.
- Поскольку это код-гольф , выигрывает самый короткий код в байтах!
Тестовые случаи
pg. 546: 17-19, 22, 26, pg. 548: 35-67 odd, 79, 80-86 even -> 27
pg. 34: 1 -> 1
PG. 565: 2-5,PG.345:7 -> 5
pg. 343: 5,8,13 - 56 even,pg. 345: 34 - 78,80 -> 70
pg.492: 2-4 odd,7-9 even -> 2
code-golf
natural-language
Maltysen
источник
источник
2-4 odd
? Кажется, это вызывает некоторые проблемы для более простых подходов.pg.492: 2-4 odd,7-9 even -> 2
22-26,25-30
?Ответы:
CJam,
6158514846434138 байтПроверьте контрольные примеры в интерпретаторе CJam .
Как это работает
источник
Perl - 47 байт
Изменено, чтобы пройти новый контрольный пример.
оригинал
Perl - 36 байт
Считая Шебанг как 4, ввод берется из стандартного ввода.
Образец использования
Предостережения
Для четных / нечетных диапазонов ожидается, что хотя бы одна из конечных точек соответствует четности диапазона. Так , например,
11-19 odd
,11-20 odd
, и10-19 odd
все будут правильно подсчитаны как 5, но10-20 odd
будет чрезмерно подсчитывали как 6.источник
pg. 20: 13-15 even
? илиpg. 20: 13-14 even
?*
на один персонаж короче&&
, что делает для легкого улучшения:$\+=/\d+ ?-/*($'-$&>>/o|e/i)+1for@F}{
lc=~
.T^
часть, но как-то пропустил, чтоlc
изменило дело$'
. Предшественникlc
был$'
бы немного короче. Это все еще должно работать для любого подхода:lc$'!~(T^lc$_%2)
или($_%2x9^lc$')!~T
!~T
хотя гений, спасибо!Python 2,
259253249239 байтПопробуй здесь
Это, вероятно, еще можно играть в гольф больше.
Редактировать: Исправлена ошибка, из-за которой мой не работал так,
2-4 even
как я ожидал. Затем сделал корректировку для этого исправления. Это исправление спасло мне четыре байта!Изменить: теперь использует
input()
и +2 байта для двух кавычек, которыми пользователь должен окружить ввод.Менее гольф (с комментариями!: D):
Я надеюсь, что эти комментарии помогут некоторым. Я все еще не совсем уверен, правильно я объяснил эту последнюю сложную строку или нет.
источник
s=raw_input()
и удалив некоторые отступы.Pyth,
43424442 байтаПопробуйте онлайн: демонстрация или тестовая привязь
Я думаю, что я все еще могу нарезать один или два байта.
объяснение
источник
JavaScript (консоль Spidermonkey) - 139
Проще проверить в командной строке.
Ungolfed:
источник
[,from,to]
просто быть[from,to]
?r.exec
, который содержит всю совпавшую строку.Коэффициент - 488 байт:
источник
Баш
344 315 306 294 262 252 242240Я не думаю, что я играл в гольф столько, сколько возможно, но неплохо для первого представления. Комментируемая версия ниже.
Запустите тестовые случаи:
В зависимости от того, как я прочитал правила, можно сохранить еще 4 байта. Если четное / нечетное всегда в нижнем регистре,
${1,,}
можно изменить на$1
источник
JavaScript ( ES6 ), 149
Запустите фрагмент в Firefox для проверки
источник
С ++
226224222Я знаю, что опаздываю на вечеринку, но это казалось забавной проблемой, и меня беспокоило отсутствие записей, использующих языки семейства Си.
Итак, вот функция C ++, не использующая регулярное выражение или подстановку строк, а просто простая математика:
Ungolfed :
Я не говорил, что это будет читабельно, не так ли? :) Тернарные операторы адские. Я старался изо всех сил (вроде) отформатировать его, так что я надеюсь, что это поможет хоть немного.
Использование :
источник
Python 2 - 163 байта:
Попробуй здесь
Ввод должен быть дан внутри кавычек
Объяснение:
Общий подход состоит в том, чтобы преобразовать существующий ввод в действительный python, а затем оценить это. Каждое значение, разделенное запятыми, преобразуется в массив, который затем добавляется вместе, и длина дает окончательный результат.
Например, при вводе
12-15 odd,19
перед оценкой подстановка регулярного выражения будет производить:Чтобы сломать это дальше:
15+1 if 15.0 else 12+1
Этот бит будет гарантировать, что второй аргумент range () является правильным в зависимости от того, задан ли диапазон или одно значение (если \ 3 пусто, \ 3.0 будет иметь значение false).if x%2!="oe".find("o")
В зависимости от значения, найденного на расстоянии двух символов от последней цифры в диапазоне ((?=.(.))
в регулярном выражении - посмотрите на два символа без их использования), возможны три результата:x%2!="oe".find("o")
оценивается какx % 2 != 0
(только нечетное совпадение)x%2!="oe".find("e")
оцениваетx % 2 != 1
(только соответствует)x%2!="oe".find("[")
оценивается какx % 2 != -1
(этот символ может быть множественным, так как он находится всего в двух символах от последней цифры, но будет o или e, если предполагается нечетное / четное)источник