Учитывая целое число , вы должны найти минимальное количество битов, которые нужно инвертировать в чтобы превратить его в квадратное число . Вам разрешено инвертировать только биты ниже самого значимого .N
Примеры
- 2 2 0 уже является квадратным числом ( ), поэтому ожидаемый результат равен .
- 11000 → 1100 1 25 = 5 2 1 можно превратить в квадратное число путем инвертирования 1 бита: ( ), поэтому ожидаемый результат равен .
- 23 20 18 30 10110 → 10 0 0 0 16 = 4 2 2 не может быть преобразовано в квадратное число путем инвертирования одного бита (возможные результаты - , , и ), но это может быть сделано путем инвертирования 2 битов: ( ), поэтому ожидаемый результат равен .
правила
- Хорошо, если ваш код слишком медленный или выдает ошибку для больших тестовых случаев, но он должен по крайней мере поддерживать менее чем за 1 минуту.
- Это код-гольф !
Контрольные примеры
Input | Output
----------+--------
4 | 0
22 | 2
24 | 1
30 | 3
94 | 4
831 | 5
832 | 1
1055 | 4
6495 | 6
9999 | 4
40063 | 6
247614 | 7 (smallest N for which the answer is 7)
1049310 | 7 (clear them all!)
7361278 | 8 (smallest N for which the answer is 8)
100048606 | 8 (a bigger "8")
Или в удобном для копирования / вставки формате:
[4,22,24,30,94,831,832,1055,6495,9999,40063,247614,1049310,7361278,100048606]
100048606
TIO, это проблема?Ответы:
Рубин, 74 байта
Попробуйте онлайн!
Это просто генерирует последовательность (которой гораздо больше, чем достаточно), XOR ее с n , а затем принимает либо число 1 в своем двоичном представлении, если число бит меньше чем или равно log 2 n , или n в противном случае. Затем требуется минимальное количество перевернутых битов. Возврат n вместо числа переброшенных битов, когда максимальный переброшенный бит больше, чем log 2 n, предотвращает выбор этих случаев в качестве минимума, так как n[ 12, 22, … , Н2] N журнал2N N N журнал2N N всегда будет больше, чем количество битов, которые у него есть.
Спасибо Piccolo за сохранение байта.
источник
(n^x*x).to_s 2;...
вместо(n^x*x).to_s(2);...
Желе , 12 байт
Попробуйте онлайн!
Проверьте набор тестов!
Монадическая ссылка. Должно быть пригодным для игры в гольф.
Но я слишком глуп, чтобы думать о способе избавиться отЭто мой первый ответ, в котором я успешно использую фильтрацию / отображение / цикл в целом вместе с диадической цепочкой \ o /³
с.объяснение
источник
Шелуха , 20 байт
Попробуйте онлайн!
объяснение
источник
▼mΣfo¬←ṠMz≠ȯfo£İ□ḋπŀ2Lḋ
экономит 2 байта. Покойся с миром, ты идеальный квадратный результат.Perl 6 , 65 байт
Попробуйте онлайн!
Я чувствую себя немного грязным из-за того, что проверяю идеальный квадрат, ища точку в строковом представлении квадратного корня числа, но ... что-нибудь, чтобы сбрить байты.
источник
05AB1E ,
2015 байт-5 байт благодаря @ Mr.Xcoder, использующему порт своего ответа Jelly .
Попробуйте онлайн или проверьте все тестовые случаи (три самых больших тестовых случая удалены, потому что они истекают через 60 секунд; все еще занимает приблизительно 35-45 секунд с другими тестовыми случаями).
Объяснение:
источник
Lnʒ‚b€gË}^b€SOß
. К сожалению, он нарушает ваш тестовый наборJava (JDK 10) , 110 байт
Попробуйте онлайн!
источник
&
вместо логического и&&
Gaia , 18 байт
Рядом с портом моего желе ответ .
Попробуйте онлайн!
Сломать
источник
Брахилог ,
5641 байтОн не побьет рекорды по длине, но думал, что я все равно выложу
Попробуйте онлайн!
источник
сборка x86-64, 37 байт
Bytecode:
Хорошо, это вычисляет даже самый высокий пример менее чем за секунду.
Сердцем алгоритма, как обычно, является xor / popcount.
источник
mov
наxchg
mov %ecx,%eax
), и я не могу позволить% ecx умереть там.Wolfram Language (Mathematica) , 67 байт
Попробуйте онлайн!
BitLength
Pick
BitXor
Min
DigitCount
1
источник
Древесный уголь , 31 байт
Попробуйте онлайн! Ссылка на подробную версию кода. Объяснение:
источник
Желе , 20 байт
Попробуйте онлайн!
источник
Python 2 , 82 байта
Попробуйте онлайн!
источник
Japt
-g
, 20 байтЭто может быть в гольфе.
Попробуйте онлайн!
источник
C (gcc) ,
9391 байтПопробуйте онлайн!
Редактировать: я думаю, что мое оригинальное решение ( попробуйте онлайн! ) Недопустимо, потому что одна из переменных
m
, глобальная для сохранения нескольких байтов без указания типа, была инициализирована внеf(n)
и, следовательно, должна была быть повторно инициализирована между вызовамиРазвернутый и прокомментированный код:
Редактирование:
источник