(Название с благодарностью @ChasBrown)
Фон
Эта проблема вдохновлена вопросом, который я недавно разместил на бирже стека Puzzling . Пожалуйста, не стесняйтесь переходить по ссылке, если вас интересует оригинальный вопрос. Если нет, то я не буду утомлять вас деталями здесь.
Факты
Каждый печатный стандартный символ ASCII имеет десятичное значение от 32 до 126 включительно. Их можно преобразовать в соответствующие им двоичные числа в диапазоне от 100000 до 1111110 включительно. Когда вы суммируете биты этих двоичных чисел, вы всегда получите целое число от 1 до 6 включительно.
Соревнование
Учитывая целое число от 1 до 6 включительно в качестве входных данных, напишите программу или функцию, которая будет выводить в любом приемлемом формате все печатаемые стандартные символы ASCII, где сумма битов их двоичного значения равна входному целому числу.
Примеры / Тестовые случаи
1 -> ' @'
2 -> '!"$(0ABDHP`'
3 -> '#%&)*,1248CEFIJLQRTXabdhp'
4 -> ''+-.3569:<GKMNSUVYZ\cefijlqrtx'
5 -> '/7;=>OW[]^gkmnsuvyz|'
6 -> '?_ow{}~'
Справочная реализация Python без заглави доступна здесь (TIO) .
Правила
- Предположим, что ввод всегда будет целым числом (или строковым представлением целого числа) от 1 до 6 включительно.
- Вы можете написать программу для отображения результатов или функцию для их возврата.
- Выходные данные могут быть в любом приемлемом формате, но должны быть согласованы для всех входных данных . Если вы решите вывести строку в кавычках, то для всех входных данных должны использоваться одинаковые кавычки.
- Стандартные лазейки запрещены как обычно.
- Это кодовый гольф, поэтому выигрывает самый короткий код на каждом языке.
63
vs?
)?'
по умолчанию использует одинарные кавычки ( ) для строкового представления строки, но использует двойные кавычки ("
), если строка содержит одинарные кавычки и не содержит двойных кавычек. , Не то чтобы этот конкретный случай имел большое значение, так как вам, вероятно, лучше возвращать реальную строку вместо ее представления, и вы все равно можете использовать одинарные кавычки в такой строке для ввода, но я чувствую, что стоит упомянуть здесь.« »
)? : DОтветы:
Сборка 8088, IBM PC DOS,
353029 байтМашинный код:
Листинг:
Автономная исполняемая программа для ПК с DOS, введите номер из командной строки. Выход отображается в окне консоли.
Загрузите и протестируйте ABCT.COM (AsciiBitCounT).
источник
Сборка CP-1610 ( Intellivision ), 20 DECLEs 1 = 25 байтов
Принимает в R0 и указатель на выходной буфер в R4 . Записывает все соответствующие символы в буфер и помечает конец результатов с помощью NUL .N
Выход для N = 2
NB. Открывающая круглая скобка очень похожа на открывающую квадратную скобку в шрифте Intellivision. Хотя оба персонажа различны.
скриншот с jzIntv
1. Код операции CP-1610 кодируется 10-битным значением, известным как «DECLE». Длина этой процедуры составляет 20 DECLE, начиная с 4819 долларов США и заканчивая 482 долларов США (в комплекте).
источник
Python 2 , 62 байта
Попробуйте онлайн!
источник
sum(map(int,bin(i)[2:]))==n
может статьbin(i).count('1')==n
экономить 7 байт.05AB1E , 8 байтов
Попробуйте онлайн!
объяснение
источник
Perl 6 ,
4134 байтаПопробуйте онлайн!
Блок анонимного кода, который принимает число и возвращает строку допустимых символов.
Объяснение:
Мы можем использовать это, чтобы получить цифровую сумму нашего двоичного числа, анализируя ее как десятичное число и модулируя на 9, что допустимо, потому что диапазон чисел, который мы используем, гарантированно будет иметь менее 9 бит. В этом помогает Perl 6 автоматическое приведение двоичной строки к десятичному числу при использовании в числовом контексте.
источник
Желе , 8 байт
Попробуйте онлайн!
источник
JavaScript (Node.js) , 60 байт
Используя трюк по модулю Джо Кинга
Попробуйте онлайн!
JavaScript (Node.js) ,
7069 байтПопробуйте онлайн!
комментарии
источник
Брахилог , 7 байт
Попробуйте онлайн!
Предикат, который функционирует как генератор , получает входные данные через свою выходную переменную и создает каждый символ через свою входную переменную. Потому что брахилог.
источник
Japt , 9 байт
Попробуйте или проверьте все входы
источник
Excel (2016 или более поздняя версия), 76 байт
Принимает входные данные от A1, выводит в любую ячейку, вы положили эту формулу Это формула массива, поэтому вам нужно нажать Ctrl+ Shift+, Enterчтобы ввести ее. «2016 или более поздняя версия» вызвана тем, что ей нужна
CONCAT
функция (устаревшийCONCATENATE
не будет принимать массив в качестве аргумента).источник
C (стандартная библиотека),
7467 байтИспользование только стандартных библиотечных функций. Спасибо @gastropner за улучшение от 74 до 67 байт.
Попробуйте онлайн!
источник
f(1)
футляре (потому что++i
пропускает его).R ,
7768 байтПодход, используя для цикла
-9 байт благодаря Джузеппе
Попробуйте онлайн!
Ранее:
R ,
78 6966 байт-12 байт благодаря Джузеппе
Превращает числа от 32 до 126 в матрицу битов, а затем суммирует по строкам, чтобы найти, какие из них соответствуют входному числу.
Попробуйте онлайн!
источник
intToBits(x)>0
а неas.single
|0
и получил ошибку и просто предположил, что логические операторы не будут работать.sapply
вместоmatrix
Java 10,
9897947067 байт-24 байта благодаря NahuelFouilleul .
Попробуйте онлайн.
Объяснение:
Содержит непечатаемый символ со значением Юникода
127
.источник
n.bitCount
. :)Java 8,
13171 байт-60 байт, спасибо всем в комментариях
Возвращает
java.util.stream.IntStream
кодовые точкиПопробуйте онлайн!
Используя HashSet, 135 байтов. Возвращает
Set<Object>
:Попробуйте онлайн!
источник
Long.toBinaryString(i)
может бытьLong.toString(i,2);
C # (интерактивный компилятор Visual C #) , 86 байт
Спасибо @ExpiredData за предоставленную мне идею использовать
Sum()
! Когда я вернусь к своему ПК, я заменю строку"0123456"
непечатаемыми, сохраняя три байта.Попробуйте онлайн!
источник
Sum()
!Dyalog APL Extended,
2422 байтаПопробуйте онлайн!
-2 байта благодаря ngn
Альтернатива 22 байта в обычном Dyalog APL от ngn:
Попробуйте онлайн!
источник
(
expr)∘=
->⎕=
expr⎕ucs 32+⍸⎕=32↓+/↑,⍳7⍴2
(⎕io ← 0)Python 2 , 69 байт
Попробуйте онлайн!
источник
Gaia , 10 байт
Попробуйте онлайн!
источник
J ,
3127 байт-4 байта благодаря Галену
Попробуйте онлайн!
Оригинальный ответ
Попробуйте онлайн!
2#:@i.@^8:
производит двоичные числа от 0 до 255 (2 ^ 8
это 256)1#.
подводит итоги]=
создает двоичную маску, показывающую, где сумма равна исходному вводуa.#~ mask
использует эту двоичную маску для фильтрации полного алфавита ASCII Ja.
&(95{.32}.])
но перед этим возьмите только элементы 32 ... 126 из алфавита и маскиисточник
[:u:32+[:I.]=1#.32#:@+i.@95
для 27 байтовi.@95
Perl 5
-a
,5043 байта@NahuelFouilleul сохраняет 7 байтов
Попробуйте онлайн!
источник
"@F"
вместо$F[0]
%9
трюк @JoKingК (нгн / к) , 20 байтов
Решение:
Попробуйте онлайн!
Объяснение:
Оценивается справа налево:
источник
6502 сборки (NES), 22 байта
Машинный код:
Монтаж:
Полная программа . Протестировано с FCEUX 2.2.3, должно работать на любом стандартном эмуляторе NES.
Вдохновлен ответом Райана Рассела. Ввод данных по адресу процессора $ 60. Выводится в память блока обработки изображений консоли.
источник
Wolfram Language (Mathematica) , 70 байт
Попробуйте онлайн!
источник
PowerShell , 83 байта
Попробуйте онлайн!
Принимает ввод
$n
, строит диапазон от32
до126
и вытаскивает те числа, где|?{}
: число,convert
edToString
в базе2
; преобразованнаяt
оЧарАрраy
;group
едь в0
с и1
с; взять[1]
индекс этой группировки; взяв.count
их, и проверив, что все в порядке-eq
с нашими входными$n
данными. Эти числа затем выводятся какchar
-array и оставляются на конвейере. Вывод неявный, с символами новой строки между элементами.источник
Рубин , 48 байтов
Попробуйте онлайн!
источник
Древесный уголь , 10 байт
Попробуйте онлайн! Ссылка на подробную версию кода. Объяснение:
источник
PHP , 72 байта
Попробуйте онлайн!
источник
count_chars(decbin($x),1)[49]
можно простоdecbin($x)%9
Красный , 92 байта
Попробуйте онлайн!
источник
Октава с пакетом коммуникаций, 32 байта
Попробуйте онлайн!
источник
Фактор , 94 байта
Попробуйте онлайн!
источник