Вчера, играя с моим ребенком, я заметил номер в его игрушечном поезде:
Таким образом, у нас есть которые можно разделить на или
Очень простая задача: если в качестве входных данных ввести неотрицательное число, верните непротиворечивые значения истинности и фальси, которые показывают, можно ли каким-то образом разбить строковое представление числа (в базе 10 и без начальных нулей) на числа, являющиеся степенями 2 ,
Примеры:
4281 truthy (4-2-8-1)
164 truthy (16-4 or 1-64)
8192 truthy (the number itself is a power of 2)
81024 truthy (8-1024 or 8-1-02-4)
101 truthy (1-01)
0 falsey (0 cannot be represented as 2^x for any x)
1 truthy
3 falsey
234789 falsey
256323 falsey (we have 256 and 32 but then 3)
8132 truthy (8-1-32)
Tests for very large numbers (not really necessary to be handled by your code):
81024256641116 truthy (8-1024-256-64-1-1-16)
64512819237913 falsey
Это код-гольф , поэтому победит самый короткий код для каждого языка!
int
типа (4 байта), но на самом деле я не против, если ваш код не поддерживает очень большие числа. Просто укажите в своем ответе ограничения вашего кода.101
(ложно из-за 0) ... или это все еще должно быть правдой (1 - 01
)?101
случай с текущими ответами, и они все возвращаютсяtrue
, потому что они могут быть разделены на1-01
две степени, так что я буду считать, что этот случай правдив.log2(n)
, не содержит ли десятичные цифры после запятой. 2) Проверьте, еслиn AND (n-1) == 0
. 3) Создайте список квадратов и проверьте, есть лиn
в этом списке.Ответы:
05AB1E ,
98 байт-1 байт благодаря @Emigna , используя
Z
(max) для списка 0 и 1, чтобы имитироватьany
команду для1
(truey).Попробуйте онлайн или проверьте все контрольные примеры . (ПРИМЕЧАНИЕ.
т
Заголовок100
должен получить только первые 100 степеней 2 чисел вместо первого входного значения степеней 2 чисел. Он также работает с входным значением степени 2, но довольно неэффективно и может тайм-аут на TIO, если вход достаточно велик.)Объяснение:
источник
.œ.²1%O0å
Хорошо , мое решение было (9 байтов). Моя не удалась0
, однако..²1%O0
это тоже очень умно. Я думал об использовании,log2
как это.²DïQ
, но это потребовало бы карты вокруг него, чтобы сделать это для каждого числа, и это действительно не работало для крайнего случая0
.JavaScript (Node.js) , 54 байта
Попробуйте онлайн!
источник
JavaScript (Node.js) ,
696458 байтПопробуйте онлайн!
Введите как число. Логическая часть довольно запутанная, поэтому понятия не имею, как ее распутать и от чего избавиться
q
.-11 байт при проверке степени 2.
источник
JavaScript (Node.js) ,
7569 байт-6 байт, спасибо @Arnauld. Максимум 32-битная поддержка
Попробуйте онлайн!
Ввод в виде строки.
источник
Желе , 9 байт
Проверьте набор тестов!
альтернатива
Не работает для больших тестовых случаев из-за проблем с точностью.
Проверьте набор тестов!
Как?
Программа I
Программа II
источник
Python 2 ,
7270 байтПопробуйте онлайн!
источник
JavaScript, 59 байт
Попробуйте онлайн!
Создает регулярное выражение типа
/^(1|0*2|0*4|0*8|0*16|0*32|…|0*1)+$/
степеней 2 и проверяет егоs
.Разумеется, работает только с точностью до чисел JavaScript: в конечном итоге термины в регулярном выражении будут выглядеть
1.2345678e30
(илиInf
). Но так как степени 2 легко точно представить в плавающей точке, они никогда не будут неправильными целыми числами, что, я думаю, было бы более дисквалифицирующим.@tsh сохранил 14 байтов. Neato!
источник
Python 2 , 85 байт
Попробуйте онлайн!
источник
Perl 6 ,
282423 байта-4 байта благодаря Джо Кингу
Попробуйте онлайн!
Управляет полномочиями до 2 31 .
источник
0*
из интерполированной частиAPL (NARS), 154 символа, 308 байтов
Функция для упражнения это ч. Алгоритм не кажется экспоненциальным или факториальным ... тест:
источник
Python 2 , 57 байт
Попробуйте онлайн!
источник
Python 2 , 86 байт
Попробуйте онлайн!
источник
Рубин , 55 байт
Попробуйте онлайн!
Выходные данные -
0
если true иnil
если false.источник
Рубин , 49 байтов
Попробуйте онлайн!
Работает только в теории. Принимает навсегда для больших значений
n
источник
PHP, 101 байт
Кажется, не могу получить это ниже 100; но я мог бы получить его до 100, если бы
101
был ложный случай.варианты:
PHP 5 или старше, 95 байт
источник
Красный ,
212211 байтПопробуйте онлайн!
Еще одна длинная отправка, но я не совсем недоволен, потому что нет встроенного средства для поиска всех подстрок в красном.
Более читабельно:
источник
Аксиома, 198 байт
разгрызть и проверить
источник
Japt
-!
, 12 байтПринимает ввод в виде строки.
Попытайся
источник
0
случае выходаtrue
и , следовательно , случаи , такие как1010
также выходtrue
.C # 157 байт
Вы можете попробовать это онлайн
источник
APL (NARS), 70 символов, 140 байтов
тест:
я не пытаюсь делать другие более большие числа ... я должен отметить, что P не является нормальным разделом, но это один раздел, где все элементы являются подмножеством, которые имеют член все подряд, например
обратите внимание, что отсутствует элемент ((ac) (b)) или лучше ,, ¨ ('ac') 'b'
источник
POSIX ERE, 91 байт
Это полностью измена, основанная на больших числах текста (не обязательно, чтобы их обрабатывал ваш код) в вопросе; он обрабатывает все значения в диапазоне размеров примеров. Очевидно, что может быть расширен до полного диапазона 32- или 64-битных целочисленных типов за счет размера. Я в основном написал это как демонстрацию того, как проблема естественным образом соответствует инструменту. Веселое упражнение - переписать его как программу, которая генерирует ERE для произвольного диапазона, а затем сопоставляет его.
источник
C (gcc) ,
-DA=asprintf(&c,
+ 108 = 124 байтаПопробуйте онлайн!
Это создает регулярное выражение степеней от 2 до 2 ** 32, а затем сопоставляет входную строку с ним.
источник
Powershell, 56 байт
Тестовый скрипт:
Выход:
Объяснение:
Создает регулярное выражение типа
^(0*1|0*2|0*4|0*8|0*16|0*32|…)+$
степеней 2 и проверяет его на аргументы.источник
JavaScript (Node.js) , 56 байт
Попробуйте онлайн!
источник