Некоторое время я сталкивался с проблемой при подсчете пальцев, в частности, то, что я могу сосчитать только до десяти. Мое решение этой проблемы состояло в том, чтобы посчитать двоичные числа на пальцах, поднять мой большой палец на один, мой указательный палец на два, большой палец и указательный палец на три и т. Д. Однако, когда мы добираемся до нас, мы сталкиваемся с небольшой проблемой. номер четыре. В частности, это требует, чтобы мы подняли средний палец, что приводит к довольно неудачному жесту, который обычно не принимается в обществе. Этот тип номера является грубым числом . Мы подходим к следующему грубому номеру в 36, когда мы поднимаем большой палец на нашей второй руке и средний палец нашей первой руки. Определение грубого числа - это любое число, которое в соответствии с этой системой подсчета приводит к тому, что мы ставим толькосредний палец любой руки. Как только мы передадим 1023 (максимальное число, достижимое для одного человека двумя руками по пять пальцев в каждой), предположим, что мы продолжим работу с третьей рукой, добавив дополнительные руки по мере необходимости.
Твое задание:
Напишите программу или функцию, которая получает входные данные и выводит истинное / ложное значение в зависимости от того, является ли этот ввод грубым числом.
Входные данные:
Целое число от 0 до 10 9 (включительно).
Выход:
Истинное / ложное значение, которое указывает, является ли ввод грубым числом.
Тестовые случаи:
Input: Output:
0 ---> falsy
3 ---> falsy
4 ---> truthy
25 ---> falsy
36 ---> truthy
127 ---> falsy
131 ---> truthy
Подсчет очков:
Это код-гольф , поэтому выигрывает самая низкая оценка в байтах.
источник
assume we continue with a third hand
Когда дело доходит до грубости, командная работа заставляет мечту работать.Ответы:
APL (dzaima / APL) , 5 байтов
Попробуйте онлайн!
4∊
является 4 членом32⊤
к основанию-32?источник
Регулярное выражение (ECMAScript), 37 байт
Ввод одинарный, как длина строки
x
s.^((?=(x+)(\2{31}x*))\3)*(x{32})*x{4}$
Попробуйте онлайн!
источник
JavaScript (SpiderMonkey) , 23 байта
Попробуйте онлайн!
Это тривиальное решение, вы просто хотите конвертировать в базу 32 и проверить, есть ли в ней 4.
JavaScript (SpiderMonkey) , 26 байт
Попробуйте онлайн!
Интересно, что
/4/.test(...)
стоит на один байт больше, чем....match(4)
.источник
Japt , 5 байт
Попробуйте онлайн!
объяснение
источник
Рубин,
3619 байтПопробуйте онлайн!
Сохранено 17 байт с помощью метода @tsh .
источник
100010011111
00100
.->n{n.to_s(32)=~/4/}
?10001
, вторая00111
и третья11
? Ни у кого из них только средний палецAPL + WIN, 10 байт
Запрашивает ввод целого числа
Отмечая, что шесть рук необходимы для представления 10 ^ 9 преобразований в вектор из 6 элементов базового представления 32 и проверяет, существует ли 4 в каком-либо элементе.
источник
Perl 6 , 16 байт
Попробуйте онлайн!
Проверяет, есть ли
4
в базе 32 представление числа. Возвращает либо Nil как false, либо Match, содержащий a4
.источник
Python 2 ,
3432 байтаПопробуйте онлайн!
2 байта благодаря тш
источник
Машинный код x86, 17 байт
Вышеуказанные байты определяют функцию, которая принимает число в качестве входных данных в
EAX
регистре и возвращает результат в виде логического значения вEAX
регистре (EAX
== 0, если входное значение не является грубым числомEAX
;! = 0, если входное значение является грубым числом ).В читаемой человеком сборочной мнемонике:
Попробуйте онлайн!
источник
idiv
, хотя. Я не вижу каких-либо дополнительных улучшений в этом. Но посмотрите мой ответ : 14 байтов для цикла сдвига, который использует MOV / AND / SUB / JZ, чтобы проверить 5 младших битов на хамство.Юлия 1,0 25 байт
Попробуйте онлайн!
Юлия 1,0 , 26 байт
Альтернатива, которая на 1 символ короче, но на 1 байт длиннее, что тоже плохо, что
∈
требует 3 байта в юникоде.Попробуйте онлайн!
источник
n->n%32...
для своего первого ответа на 2 байта короче?05AB1E , 5 байтов
Порт ответа @ Adám APL (dzaima / APL) .
Попробуйте онлайн или проверьте все контрольные примеры .
Объяснение:
источник
₆
что 36, а не 32.Католик , 4 байта
Принимает число в виде строки со значением 256.
Попробуйте онлайн!
Тестирование
источник
<<
и,>>
и это позволяет числам больше 255 в них, как показано в наборе тестов.C # (интерактивный компилятор Visual C #) , 31 байт
Выходы, выбрасывая исключение. Способ преобразования одного числа из десятичного в другое основание состоит в том, чтобы разделить десятичное число на это основание несколько раз и взять остаток как цифру. Это то, что мы делаем, и мы проверяем, имеет ли какая-либо из цифр значение 4 в base-32;
Попробуйте онлайн!
источник
n>31
->n>0
J , 12 байт
Попробуйте онлайн!
источник
R ,
5048 байтовПопробуйте онлайн!
Теперь используется аккуратный матричный подход (любезно предоставлено @Giueseppe). Он генерирует матрицу 5x7 битов, преобразует ее в серию из 32 целых чисел и проверяет любые 4.
источник
intToBits
тогда, но мы можем работать с ним,ints
вместо того, чтобыraw
заканчивать тем, что сохранили байт - посмотрите, например, на этоintToBits
4
в числе base-32, составляет, о-о, 29 байтов .Python 3 , 43 байта
Проверяет каждый 5-битный блок, чтобы увидеть, является ли он грубым (равен 4).
Попробуйте онлайн!
источник
C (gcc) , 34 байта
Попробуйте онлайн!
источник
Древесный уголь , 6 байт
Попробуйте онлайн! Ссылка на подробную версию кода. Вывод
-
s в зависимости от того, насколько грубое число. Объяснение:Я использую строковое базовое преобразование, чтобы избежать необходимости разделять числовые литералы для
32
и4
.источник
Приборка , 18 байт
Попробуйте онлайн! Проверяет,
4
является ли элементbase(32,x)
(базовое преобразование).источник
Haskell , 31 байт
Попробуйте онлайн!
источник
Cubix , 26 байтов
Попробуйте онлайн!
Оборачивается на куб с длиной ребра 3 следующим образом
Смотреть это беги
Довольно простая реализация, без всех перенаправлений, которые она делает:
IS
запускает программу нажатием ввода и 32 в стек%4-!
получает остаток и проверяет, равен ли он 4 вычитанием1O@
вывод 1, если это было 4 и остановка;;,
очистить стек и сделать целочисленное делениеp;?
очистить дно стека и проверить результат div на 0O@
если результат div нулевой вывод и остановкаs
поменяйте местами вершину стека и начните с шага 2 вышеисточник
MATL , 8 байт
Попробуйте онлайн!
источник
G
(не уверен, почему я включил его в первую очередь), но это только один байт (спасибо, что заметил это!). Переход32YA52
на32_YA4
такое же количество байтов не так ли?'32_YA4'n'32YA52'n-
Пакет,
7745 байтовОсновано на этих хитростях . Объяснение: Необходимо проверить только 6 рук из-за ограниченного диапазона (30 бит) входного сигнала, который требуется поддерживать. Магическое число
m
эквивалентно111111
основанию 32, так что первая операция переключает грубые биты во входном номере. Затем остается выяснить, какая из 6 раздач сейчас равна нулю.источник
машинный код x86, 14 байт
(Тот же машинный код работает в 16-битном, 32-битном и 64-битном режимах. В 16-битном режиме он использует AX и DI вместо EAX и EDI в 32- и 64-битном режиме.)
Алгоритм: проверьте младшие 5 битов
x & 31 == 4
, затем сдвиг вправо на 5 битов и повторите, если результат сдвига не равен нулю.Вызывается из C в
char isrude(unsigned n);
соответствии с соглашением о вызовах System V. x86-64. 0 - правда, не-0 - ложь (это asm, а не C 1 ).Это использует преимущества краткой формы
op al, imm8
для AND и SUB. Я мог бы использоватьXOR al,4
для получения 0 на равенстве, но SUB работает быстрее, потому что он может слиться с JZ в один и тот же ответвление в семействе Sandybridge.Интересный факт: использование флага-результата смещения более чем на 1 будет медленным на семействе P6 (передний конец останавливается, пока смена не сойдет), но это нормально.
Сноска 1: Это функция на ассемблере, и в x86 asm есть и то,
jz
и другоеjnz
, поэтому в соответствии с мета я могу выбрать любой путь Я не собираюсь, чтобы это соответствовало C истина / ложь.Оказалось, что удобно возвращаться в AL вместо EFLAGS, поэтому мы можем описать функцию для компилятора C без оболочки, но мой выбор истины / фальши не ограничен использованием вызывающей стороны C для тестирования.
источник
ES6,
313026 байтНе стесняйтесь высказывать идеи о том, как уменьшить это дальше, если таковые имеются.
источник
test
, вы можете сохранить два байта, сопоставив их4
как число и разрешивmatch
преобразовать это в строку, а затем получить RegExp для вас. ,Сетчатка 0.8.2 , 31 байт
Попробуйте онлайн! Ссылка включает в себя тестовые случаи. Выходы ноль, если число не является грубым. Работает путем преобразования входных данных в унарное, а затем в унарно-кодированное основание 32 и подсчета числа
4
s в результате.источник
Java 8,
4033 байтаПорт ответа @ Adám APL (dzaima / APL) .
Попробуйте онлайн.
Объяснение:
источник
> <> , 28 байт
Выходы 4 для грубых чисел выдают исключение для грубых чисел.
Попробуйте онлайн!
источник
Wolfram Language (Mathematica) ,
37 байтов36 байтов29 байтов-2 байта Джонатан Фрех
Попробуйте онлайн!
31-байтовое решение:
Попробуйте онлайн!
источник
...#...&
часто используется в Mathematica).[n]
в конце вам не нужен , только&
. Кроме того, поскольку записи имеют историю редактирования, хорошо пропустить предыдущие записи, и соглашение для старых оценок<s>40</s> <s>36</s>
Java 8,
282221 байтВдохновленный ответом @ kevin-cruijssen . Работает только на 2 руки.
Попробуйте онлайн!
Объяснение:
источник