Сколько из вас все еще использует свой сустав, чтобы определить, будет ли месяц иметь полные 31 день или меньше?
Ваша задача - написать программу, которая подсчитывает, сколько месяцев в месячном диапазоне имеют полные 31 день, а сколько - менее 31 дня, «считая суставы».
Предоставлено: amsi.org.au
вход
Пара месяцев, первый из которых не обязательно должен быть в хронологическом порядке перед вторым, в любом подходящем формате. Например: 201703 201902
- с марта 2017 года по февраль 2019 года. Пожалуйста, опишите формат ввода, который вы выбрали. Обратите внимание, что входные данные должны включать все годы от 1 до 9999. Указанный диапазон месяцев включает как начальный, так и конечный месяцы.
Выход
Два целых числа: количество месяцев в данном диапазоне с 31 днем и количество месяцев в диапазоне с менее чем 31 днем.
Пример: 14 10
- 14 суставов, 10 канавок (это означает, что в этом месячном диапазоне у нас есть 14 месяцев, которые имеют полные 31 день, и 10 месяцев, которые имеют менее 31 дня).
Например, для ввода, где второй месяц в диапазоне находится хронологически перед первым 201612 201611
, вы должны вывести пару из нуля.
Примеры ввода и вывода
| Input | Output |
|---------------|-------------|
| 201703 201902 | 14 10 |
| 201701 202008 | 26 18 |
| 000101 999912 | 69993 49995 |
| 201802 201803 | 1 1 |
| 201601 201601 | 1 0 |
| 201612 201611 | 0 0 |
правила
- Вы можете выбрать любой язык, который вам нравится
- Один вход на строку
- Это код-гольф , поэтому выигрывает самый короткий код в байтах!
- Победитель будет выбран 9 апреля
- Применяются стандартные лазейки
- PS: это мой первый вопрос в PCG, в нем могут быть некоторые несоответствия. Не стесняйтесь редактировать и подтверждать то, что вам непонятно.
201612 201611
.Ответы:
Желе , 21 байт
Принимает участие как
[[y, m], [y, m]]
.Попробуйте онлайн!
Как это работает
источник
JavaScript (ES6),
70686764 байтаПринимает ввод как два целых числа в
yyyymm
формате с синтаксисом каррирования(a)(b)
. Выводит массив из двух целых чисел[knuckles, grooves]
.Отформатировано и прокомментировано
Контрольные примеры
NB . Третий контрольный пример не включен в этот фрагмент, поскольку он не будет работать, если в вашем браузере не включена оптимизация Tail Call.
Показать фрагмент кода
источник
Python 2 ,
92908680 байтПопробуйте онлайн!
Еще 6 путем преобразования в лямбду, спасибо @math_junkie за идею. Теперь выводит список, содержащий два числа.
Предыдущая не лямбда-версия (86 байт)
Попробуйте онлайн, старый!
2 сохранено благодаря @ovs за помощь в избавлении от
len(k)
. Я не думал об использованииNone
.Ввод представляет собой список целых чисел в формате
y1,m1,y2,m2
Некоторая заслуга благодаря @KeerthanaPrabhakaran, который получил
bin(2741)[2:]
раньше, чем я, который экономит 1 байт по сравнению с жестким кодированием двоичной строки.источник
len(k)
от последнего кусочка. Спасибо.PHP ,
259256249248237221 байтOutgolfed по aross : /codegolf//a/114512/38505
Формат ввода:
yyyymm,yyyymm
Попробуйте онлайн!
Старые версии
Попробуйте онлайн!
Попробуйте онлайн!
Попробуйте онлайн!
Попробуйте онлайн!
Попробуйте онлайн!
источник
Пакет, 93 байта
Принимает два параметра в формате ymm (т.е. 101 - 999912). Предыдущее 129-байтовое решение на основе цикла:
источник
Python 3,5 (
164162154152150148140137 байт)repl.it
принимает входные данные в виде ггггмм ггггмм
выводит вывод в виде number_of_knuckles number_of_grooves
источник
n=int
а также, возможно, немногоexec
дурачества.2773&1<<r%12-1>0
вместоint('101010110101'[r%12-1])
print([k,t-k])
asprint(k,t-k)
приведет к желаемому результату,(k,g)
уменьшая тем самым 2 байта!split(' ')
наsplit()
Python 2 ,
147,146,142 байтаПопробуйте онлайн!
Сломать код,
источник
if-else
предложения поиском в массиве. См. Этот пост для деталейPHP,
1201039796 байтЗапустите так:
объяснение
Tweaks
$e
, просто сравните напрямуюисточник
$x++
а не+$x++
также работает.$x
неинициализированным строка будет2017-12month
, что неопознанный формат и результаты в 1970+
в строке.PowerShell , 96 байт
Попробуйте онлайн!
Принимает ввод как форму
2017-03
. Использует встроенные библиотеки дат .NET и выполняет циклический переход от входных данных$a
к$b
, увеличивая каждую итерацию$x++
и добавляя ее,$z
если текущим.Month
является-in
2,4,6,9,11
(т. Е. Месяц не является 31-дневным). Затем мы выводим наши общие месяцы за вычетом не 31-дневных месяцев$x-$z
и не 31-дневных месяцев$z
.Выпускает ошибку
0001-01
в9999-12
тестовом случае, потому что .NET поддерживает только годы9999
, поэтому окончательный.AddMonths(1)
вариант вызывает переполнение. Тем не менее выводит правильные значения, потому что это не прекращающаяся ошибка; это просто приводит к выходу из цикла.Вероятно, было бы короче сделать это арифметически, как в ответах на Python или JavaScript, но я хотел показать подход, использующий встроенные модули .NET.
источник
Баш , 113 байт
Попробуйте онлайн!
нужен гольф ...
принимает входные данные как
2016-03
2018-10
выходы:
ungolfed:
источник
Swift, 151 байт
input - это массив из двух целых чисел в формате согласно примеру
источник