Это продолжение этой проблемы со стороны Аднана . Если вам нравится этот вызов, скорее всего, вам понравится и другой. Проверьте это!
Тест множественного выбора с 8 вопросов , каждый из которых 4 варианта могут иметь ответы: BCADBADA
. Преобразованный в четыре различных массива, с истиной и ложью, если текущая буква является ответом, это будет выглядеть так
Q#: 1 2 3 4 5 6 7 8
B C A D B A D A
A: [0, 0, 1, 0, 0, 1, 0, 1]
B: [1, 0, 0, 0, 1, 0, 0, 0]
C: [0, 1, 0, 0, 0, 0, 0, 0]
D: [0, 0, 0, 1, 0, 0, 1, 0]
Это может быть сжато, используя немного логики. Каждый из вариантов A
, B
, C
и D
может быть представлена двумя истинных / ложных значений показано ниже:
A: 1 0
B: 0 1
C: 0 0
D: 1 1
Используя эту логику, мы можем сжать четыре вектора выше до двух:
1 2 3 4 5 6 7 8
B C A D B A D A
[0, 0, 1, 1, 0, 1, 1, 1]
[1, 0, 0, 1, 1, 0, 1, 0]
То есть, решение теста просто: 00110111
, 10011010
. Объединяя их, мы получаем двоичное число
0011011110011010
или 14234
десятичное число. Используйте это десятичное значение для проверки вашего теста!
Вызов
Возьмите число N
в (включительно) диапазоне [0, 65535]
и выведите строку с ответом на тест с множественным выбором.
Тестовые случаи:
14234
BCADBADA
38513
ABBDCAAB
0
CCCCCCCC
120
CBBBBCCC
65535
DDDDDDDD
39253
ABCDABCD
Вывод может быть в верхнем или нижнем регистре букв, но вы не можете использовать другие символы.
источник
A=10, B=01
, а затемC=nor(A,B)
, иD=and(A,B)
, вдохновленный вызовом Аднана. Оглядываясь назад, возможно, было бы лучше сделать это наоборот, но хорошо ... Слишком поздно ...Ответы:
Желе , 14 байт
Попробуйте онлайн! или проверьте все контрольные примеры .
Как это работает
источник
05AB1E ,
191816 байтовКод:
Использует кодировку CP-1252 . Попробуйте онлайн!
Объяснение:
Во-первых, мы добавляем
65536
к числу (žH
это определенная константа65536
), которое также является10000000000000000
двоичным. Это должно дополнить число нулями. Давайте возьмем число14234
в качестве примера.14234 + 65536
равно79770
. Который в двоичном виде это:Мы удаляем первый символ, в результате чего:
Разобьем строку на две части, используя
2ä
:После этого мы заархивируем массив
ø
:Преобразование их обратно в десятичное (используя
C
) приводит к:Теперь нам нужно только проиндексировать его с помощью строки
cbad
. Сжатая версия для этой строки’c‰±’
, которая также может быть проверена здесь . Наконец, мы получаем символы по индексу вышеуказанного массива. Для приведенного выше примера это приводит к:источник
JavaScript (ES6),
5548 байтНерекурсивная версия (55 байт)
Используя регулярное выражение, мы можем сделать:
источник
Python 2, 53 байта
Проверьте это на Ideone .
источник
(n&257)%127
но это дольше. Жаль, что 127 прост. Может быть, вы можете придумать способ оптимизировать его.Сборка CP-1610 , 24 DECLE (30 байтов)
Этот код предназначен для запуска на Intellivision . (1)
Код операции CP-1610 кодируется 10-битным значением, известным как «DECLE». Фактическая функция имеет длину 24 ДЕКАЛА, начиная с
$4809
и заканчивая на$4820
.Регистры процессора, однако , 16-битные, так что он будет поддерживать любое значение входного сигнала в
0x0000
..0xFFFF
.Выход
(1) Учитывая, что по крайней мере один компилятор, несколько эмуляторов и заменяющие ПЗУ файлы без авторских прав находятся в свободном доступе, я думаю, что это не нарушает правила подачи PPCG. Но, пожалуйста, дайте мне знать, если я ошибаюсь.
источник
CJam , 22 байта
Попробуйте онлайн!
объяснение
Приведено в действие волшебством ...
Отображение пар битов на буквы в этой задаче является немного произвольным. Если мы представим
ABCD
на0, 1, 2, 3
(так что мы можем просто добавить их к характеруA
) , то мы хотим следующее отображение:Это отображение может быть вычислено с помощью волшебной маленькой формулы:,
((i1 == i2) + 1) ^ i1
где проверка равенства возвращает0
или1
. Посмотрите на следующую таблицу, где каждый столбец соответствует одному входу, каждая строка соответствует одной операции, и каждая ячейка будет показывать стек в этой точке:Имея это в виду, вот полная разбивка исходного кода:
Альтернативное решение с тем же количеством байтов, которое явно менее волшебно:
И в случае , если это полезно кому - либо, если вы повернуть
i1
иi2
биты обратно в одно число (то есть , если вы хотите отображение0 -> 2, 1 -> 1, 2 -> 0, 3 -> 3
) , это может быть вычислено еще более легко , как(~n - 1) & 3
или(~n - 1) % 4
если ваш язык получает по модулю отрицательных значений правых. Я думаю, что это может быть написано кратко, как3&~-~n
на многих языках. В CJam это оказывается на байт длиннее из-за дополнительного преобразования обратно из базы 2.источник
PHP, 57 байт
Версия без побитовых операторов 70 байт
источник
$i
определяется переменная ?Mathematica,
75736866 байтСпасибо @MartinEnder за сохранение 2 байта.
источник
#+##
иInfix
работать, но использованиеStringPart
неизбежно, потому что глава"C"["B","A","D"][[#+##]]
есть"C"
, а неList
;StringJoin
не работает#
и#2
составлял целые списки.Perl, 42 байта
Включает +1 для
-n
Внесите свой вклад в STDIN:
Просто код:
источник
JavaScript,
113939088 байтБольшое спасибо @Neil за помощь в экономии 20 байт!
-3 байта благодаря @Cyoce
К сожалению, JavaScript не хватает функций , таких как
decbin
,bindec
иstr_pad
что PHP имеет.источник
(65536+n).toString(2).slice(1)
и[+b[i+8]+2*b[i]]
будет короче, например.padStart
Если он будет принят в будущей версии ECMAscript, это приведет к большей экономии.{…;return }
, чтобы использоватьeval("…")
padStart
теперь существует в ECMAScript.MATL, 16 байт
Попробуйте онлайн!
или проверить все контрольные примеры
объяснение
источник
Юлия, 73 байта
Дает функцию f, принимающую N в качестве входных данных и возвращающую ответ в виде строки.
Попытайся
В зависимости от того, считается ли массив символов строкой, можно пропустить соединение ( 67 байт ).
Попытайся
источник
R, 110 байт
Придумали векторизованное решение в R. Это, вероятно, должно быть реализовано благодаря разумному преобразованию int в двоичное преобразование.
источник