Есть известный хитрый алгоритм для подсчета количества установленных битов в 32-разрядном целом числе без знака:
int popcount(unsigned x) {
x = (x & 0x55555555) + ((x >> 1) & 0x55555555);
x = (x & 0x33333333) + ((x >> 2) & 0x33333333);
x = (x & 0x0F0F0F0F) + ((x >> 4) & 0x0F0F0F0F);
x = (x & 0x00FF00FF) + ((x >> 8) & 0x00FF00FF);
x = (x & 0x0000FFFF) + ((x >>16) & 0x0000FFFF);
return x;
}
Я не буду объяснять это здесь. Но представьте себе подобный код для 512-битных целых чисел! Шестнадцатеричные константы будут огромными и образуют симпатичный рисунок. Ваша задача просто напечатать этот точный вывод :
0x55555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555
0x33333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333
0x0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f
0x00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff
0x0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff
0x00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff
0x0000000000000000ffffffffffffffff0000000000000000ffffffffffffffff0000000000000000ffffffffffffffff0000000000000000ffffffffffffffff
0x00000000000000000000000000000000ffffffffffffffffffffffffffffffff00000000000000000000000000000000ffffffffffffffffffffffffffffffff
0x0000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
Нет пробелов, пожалуйста, - хотя один завершающий символ новой строки не является обязательным.
Это код-гольф , поэтому выигрывает самый короткий ответ (в байтах).
Ответы:
05AB1E ,
262221 байт05AB1E использует кодировку CP-1252 .
Попробуйте онлайн!
объяснение
Другие версии, которые могут быть улучшены
источник
Python 2,
524946 байтK-е число задается как
2**512/(2**2**k + 1)
. Это для 512-битного числа, поэтому тривиально расширить шаблон до различной ширины.3 байта сохранены благодаря Денису.
3 байта сохранены благодаря xnor.
источник
l=2;exec"print'0x%0128x'%(2**512/-~l);l*=l;"*9
01010101
,00010001
,00000001
, а затем умножаются на том1
,11
,1111
чтобы получить правильные бинарные шаблоны. Например,01010101
вы можете получить формулу для определенной ширины w, выполнивsum 2^(2*k) for k = 0, w/2 - 1
и выяснив ее(2**w - 1)/3
.PHP,
111110108 байтОдин байт сохранен благодаря @ user59178.
Каков шаблон для 1024 бит? : D
источник
$x<65
вместо$i++<7
. На этот раз я проверил это и все.Сетчатка , 43 байта
Попробуйте онлайн!
объяснение
Это широко использует обычно недоиспользуемую
:
опцию, которая позволяет печатать промежуточные результаты, потому что модифицировать одну строку намного короче, чем создавать весь вывод.Это заменяет пустой ввод с
0x
последующим 1285
с и печатает его для генерации первой строки.Эта строка заменяет
5
s на3
s, чтобы сгенерировать вторую строку, а также печатает ее.Это последняя строка в специальном регистре, и каждые две
3
секунды она превращается0f
в третью строку. Это также запускает цикл через последние два этапа ({
). Однако этот этап ничего не сделает после первой итерации, кроме вывода текущего состояния. В;
подавляет выход в самом конце программы , чтобы избежать дублирования в последней строке.Эта замена теперь преобразует каждую строку в следующую, заменяя каждую другую пару
f
s и0
s. Условие «каждая другая пара» обеспечивается путем сопоставления нуля перед символомf
, что делает невозможным сопоставление последовательных пар, поскольку совпадения не могут перекрываться.источник
Vim, 32 байта
i5<CR>3<Esc>qqYpVrf$<C-V>{yPG1vr0q6@q<C-V>{I0x<Esc>
Мне нужно только вручную написать первое
5
и3
, а макрос позаботится об остальном, «удваивая число битов» при каждом запуске. Порядок шагов в макросе немного странный (создать новуюf
строку, блочную копию, повторно использовать размер визуального блока, чтобы поместить0
s вf
строку), но это самый быстрый вариант, который я нашел.источник
Pyth, 26 байт
Порт моего Python ответа.
источник
J,
4634 байтаЯ работаю над игрой в гольф, но этот ребенок любит оставаться на 46 байтах ...Больше нет! -12 байт благодаря милям!Попробуйте онлайн! : D
Результат
Для этого ответа мне нужен (в идеале) глагол с рангом,
0 1
чтобы использовать его вu"v
определении ранга; Однако, миль заметил, что0 _
было достаточно для выполнения поставленной задачи.Здесь вы видите кучу строковых представлений глаголов с соответствующими им рангами. Это сценарий, который я использовал для его создания.
источник
0 _
хорошо здесь. Вы можете сократить его до 34 байтов с'0x',"1'5','3','0f'(128$#)"{~2^i.7
На самом деле , 25 байтов
Попробуйте онлайн!
Это решение использует тот факт, что
f(n) = 2**512//(2**2**n + 1)
(где//
находится этажное деление) для вычисления значений.Объяснение:
источник
JavaScript (Firefox 30+),
139113112928380 байтНаконец, попал в рекурсивную сладкую точку :-) Использует удобное понимание строки денди, чтобы сэкономить 3 байта
.map
:.replace
также 83 байта:Если бы разрешен начальный символ новой строки, это также будет 80 байтов:
источник
Python 2 , 60 байт
Попробуйте онлайн!
источник
Жевательная резинка , 65 байт
Обязательный Bubblegum ответ.
источник
Хаскелл,
8472 байтаПортирование @ orlp ответ:
94 байта альтернативы без возможности
Text.Printf
:источник
Control.Monad
в REPL. Исправлена.PowerShell v2 +, 68 байт
PowerShell не имеет произвольных целочисленных значений точности без использования
[bigint]
вызовов, и их нелегко преобразовать в шестнадцатеричное, поэтому вместо этого мы рассматриваем это как вызов на основе строк.Первая строка обрабатывает повторение
5
и3
просто умножает строку на128
символы и прикрепляет0x
к передней части.Следующая строка переходит из цикла
$a=1
в7
, каждая итерация выводит другую строку. Опять мы имеем0x
прикрепил на фронт, и мы делаем строковое умножение в середине построить соответствующее число0
иf
сцепляются вместе, а затем делать строковое умножение этого отказа на соответствующее число символов. Обратите внимание, что здесь используется переменная$a
, а не счетчик цикла$_
, поэтому мы можем правильно масштабировать (в противном случае нам нужно было бы выполнить цикл как1,2,4,8,16,32,64|%{...}
, что длиннее).Результирующие строки остаются в конвейере, и вывод через неявный
Write-Output
происходит при завершении программы, с новой строкой между элементами.источник
V , 43 байта
Попробуйте онлайн!
При этом используется одно из самых длинных сжатых регулярных выражений, которое мне когда-либо требовалось в ответе V. Вот более читаемая версия, где я добавил байт для читаемых регулярных выражений и изменил непечатный escape-символ на
<esc>
Объяснение (используя читаемую версию):
источник
JavaScript (ES6),
747270 байтВключает дополнительный завершающий перевод строки.
Показать фрагмент кода
источник
Pyth -
3130 байтЧтобы получить шаблон за исключением
3
«и5
», он кумулятивно уменьшается, каждый раз удваивая куски.Попробуйте это онлайн здесь .
источник
Пакет, 216 байт
источник
Vim 72 байта
TryItOnline!
непечатные:
4
@w
в конце вызывают у меня проблемы, но, поскольку я рассчитывал, что@q
в конце строки произойдет сбой, он также завершится ошибкой @w. Я мог бы попытаться просто запустить q 32 раза и посмотреть, не испортит ли это более поздние строки.источник
C, 146 байтов
Ungolfed:
источник
брейкфук , 211 байт
Попробуйте онлайн!
источник
x
генератор теперь можно вывести из циклаGNU sed 4.2.2 , 77
Попробуйте онлайн.
источник
Руби ,
66 6045 байтПопробуйте онлайн!
Идея, украденная из orlp
источник
C #, 168 байт
источник
Stax , 19 байт
Запустите и отладьте его
Распакованный, размазанный и прокомментированный, это выглядит так.
Запустите этот
источник
/// , 193 байта
Попробуйте онлайн!
источник