В английском языке существительные могут принимать две разные формы в зависимости от того, являются ли они единственными (одним) или множественным числом (что-либо еще). Например, мы бы сказали «1 собака», но «2 собаки», «0 собак», «57 собак» и так далее.
На русском языке есть три категории. Вместо «1 собака, 2 собаки, 5 собак» на русском языке это будет «1 собака, 2 собаки, 5 собак».
Категории делятся по следующей логике:
- «Singular»: используется для 1 и любого числа, заканчивающегося на 1, за исключением чисел, заканчивающихся на 11.
- Примеры: 1 собака, 21 собака, 101 собака
- «Несколько»: используется для 2, 3 и 4, а также для любого числа, оканчивающегося на 2, 3 или 4, за исключением чисел, оканчивающихся на 12, 13 и 14.
- Примеры: 2 собаки, 3 собаки, 4 собаки, 32 собаки, 43 собаки, 104 собаки
- «Многие»: все, что не считается «Единственным» или «Мало».
- Примеры: 0 собак, 5 собак, 11 собак, 13 собак, 25 собак, 111 собак, 114 собак
Соревнование
Если задан целочисленный ввод в диапазоне [0, 1000], верните, 1
если он принадлежит категории «единственное число», 2
если он принадлежит категории «несколько» и 5
если он принадлежит категории «многие».
Ваша программа может быть функцией или может использовать STDIN. Вы можете распечатать в STDOUT или вернуть значение из функции
Это сложная задача для гольфа , поэтому выигрывает решение с наименьшим количеством байтов.
источник
1
,2
и5
в частности? Кроме того, почему я не могу использовать коды выхода?Ответы:
Python 2 , 36 байт
Попробуйте онлайн!
Та же длина арифметически:
Давайте сначала посмотрим на более простой код, который не учитывает подростков.
Здесь мы хотим отобразить одну цифру на выход, который работает как
Но вместо того, чтобы взять
n
по модулю 10 (%10
), мы можем сделатьn%-10
, что сопоставляется с интервалами,[-9..0]
чтобы дать остатки:Это многообещающе, потому что первые две записи
0
и-9
находятся далеко друг от друга, и их нужно отправлять на разные выходы. Также-10
можно сократить до~9
.Отсюда деление на этаж
/-3
дает куски по 3 с правильной стартовой точкойЧтобы получить желаемый результат, нам просто нужно отобразить
0->5, 1->5, 2->2, 1->1
, что мы делаем с выбором строки'5521'[_]
.Теперь нам также нужны числа, заканчивающиеся на 11-15, чтобы всегда давать
5
. Сначала мы делаем это, определяя, является ли цифра десятками1
. Принимаяn/10
для удаления последнюю цифру, мы применяем,%~9
как и прежде, чтобы получить результатыдля соответствующих окончательных цифр. Цифра 1, которую мы хотим обнаружить, сопоставляется с экстремальным значением
-9
. Этаж делится-9
на 1, а все остальное на 0.Наконец, мы делаем так, чтобы этот индикатор
1
всегда выдавал выход 5. Это делается путем сдвига битового результатаn%~9/-3
вправо на индикатор. Результат0,1,2,3
всегда сдвигает бит вправо на 0 или 1, что дает желаемый результат 5.источник
Python 2 , 45 байт
Попробуйте онлайн!
источник
(s+'5'*10+s*9)
110 символов?Perl 5 , 26 байт
25 байт кода +
-p
флаг.Попробуйте онлайн!
Для еще одного байта, есть
$_=/(?<!1)[1-4]$/?2-/1$/:5
.Пояснения: (в 27-байтовой версии; 26 довольно симметрична)
И «единственное число», и «несколько» заканчиваются «не 1, за которым следует цифра от 1 до 4» (проверено с помощью
(?<!1)[1-4]$/
). В этом случае результат равен 2 минус 1, если число заканчивается на 1 (2-/1$/
). В противном случае результат, если 5.источник
JavaScript (ES6),
5349484039383736 байтПопытайся
источник
1[1-4]
может быть1.
и/1$/.test(s)
может быть+s%10==1
. Никогда не забудь одинарную+
!+
вообще,s%10
следует преобразоватьs
в число.n%10
->n%5
сохраняет байтЖеле ,
1918 байтМонадическая ссылка, принимающая и возвращающая неотрицательные целые числа.
Попробуйте онлайн! или посмотрите три группы от 0 до 1000 включительно в этом наборе тестов .
Как?
источник
05AB1E ,
3819 байтИспользует трюк с индексом из ответа Питона Рода
Попробуйте онлайн!
объяснение
источник
PHP> = 7.1, 44 байта
Онлайн версия
источник
<?=$argn[-2]!=1&($m=($argn+9)%10)<4?2-!$m:5;
.Сборка MCxxxx , 123 байта
Заметка:
TiO не поддерживает этот язык, который используется в игре Zachtronics Shenzhen I / O , поэтому нет ссылки для проверки этого.
Объяснение:
Эта функция принимает вход через порт XBus x0 и выводит через порт x1. Это слишком долго для выполнения на MC4000, но хорошо вписывается в память MC6000. Порты XBus для тех, кто не знаком, позволяют передавать дискретные пакеты цифровых данных.
Одна часть информации, которая может быть полезна при чтении этого: в сборке MCxxxx инструкции по тестированию устанавливают флаг, который указывает, какую ветвь следует взять. Строки, начинающиеся с,
+
выполняются только в том случае, если последний тест вернул значение true, а строки, начинающиеся с,-
выполняются только в том случае, если тест был ложным.Построчно:
Замечание по поводу оценки: сборка MCxxxx сама по себе не имеет функций, но она настолько близка к функции, насколько вы можете ее получить - это программа, которая помещается в один исполнительный узел, принимает входные данные через один порт и выводит через другой. В результате я оценил это как функцию (т.е. без подсчета байтов, необходимых для создания действительного файла эмулятора MCxxxx).
источник
Сетчатка ,
2521 байтПопробуйте онлайн! -4 байта благодаря Нейлу.
источник
!`.$
для извлечения последнюю цифру. Попробуйте онлайн!Haskell ,
6258 байтПопробуйте онлайн!
объяснение
Это создает следующую строку:
5122255555555555555551222555555122255555512225555551222555555122255555512225555551222555555122255555 ...
Который является таблицей, где ячейка
n
содержит ответ дляnth
числа. Таблица верна только для первых 100 элементов, следовательноmod
.источник
f n|s<-"5122255555"=(s++('5'<$[0..9])++cycle s)!!mod n 100
Скала, 110 байт
источник
Turtlèd, 35 байт
Попробуйте онлайн!
Эта функция требует, чтобы ввод начинался с>, что, я думаю, нормально, потому что python2 использует ввод наполовину регулярно, и для этого нужны кавычки.
Объяснение:
источник
>
Служит ли это цели в Turtled или это произвольный символ, который вы добавили к вводу?