Язык компилятора без произносимой аббревиатуры, сокращенно INTERCAL , является уникальным языком программирования. Среди его невоспроизводимых качеств - бинарные операторы.
Два бинарных оператора INTERCAL - это чередование (также известное как mingle ) и select . Чередование представляется с изменением (¢), а выделение представляется с помощью sqiggle (~).
Чередование работает, беря два числа в диапазоне 0-65535 и чередуя их биты. Например:
234 ¢ 4321
234 = 0000011101010
4321 = 1000011100001
Result: 01000000001111110010001001
Output: 16841865
Выбор работает, беря два числа в диапазоне 0-65535, беря биты в первом операнде, которые находятся в том же положении, что и 1 во втором операнде, и упаковывая эти биты справа.
2345 ~ 7245
2345 = 0100100101001
7245 = 1110001001101
Taken : 010 0 10 1
Result: 0100101
Output: 37
В этом задании вам будет дано двоичное выражение с использованием операции чередования или выбора. Вы должны вычислить результат, используя как можно меньше байтов.
Выражение будет дано в виде строки, разделенной пробелами, состоящей из целого числа в 0-65535, пробела или ¢
или ~
пробела и целого числа в 0-65535.
Вход и выход могут быть через любую стандартную систему (STDIN, функция, командная строка и т. Д.). Стандартные лазейки запрещены.
Примеры:
5 ¢ 6
54
5 ~ 6
2
51234 ¢ 60003
4106492941
51234 ~ 60003
422
Это код гольф - побеждает меньше байтов. Удачи.
РЕДАКТИРОВАТЬ: Поскольку некоторые языки не поддерживают символ изменения (¢) INTERCAL, вы можете использовать вместо него символ больших денег ($) со штрафом в 5 байт.
$
.FIVE ONE TWO THREE FOUR
? И не должно ли вывод быть в римских цифрах?Ответы:
Pyth,
323129 байтПопробуйте онлайн: Regular Input / Test Suite
Спасибо @isaacg за отыгрывание одного байта.
Объяснение:
источник
hMfeT
в ,smmFd
а затем перемещение Дубликатs
за пределами троичной. Кроме того, ваш текущий код составляет 32 байта, а не 33.Python 2,
115112 байтСтрока во второй строке содержит один непечатаемый символ
\x7d
, следующий символ после~
.Все надежды на хорошую одиночную лямбду рушатся форматом ввода. Там, вероятно, лучший способ читать на входе. Ввод как
"51234 ¢ 60003"
через STDIN.Функция
f
объединяет следующие две рекурсивные функции:(-3 байта с помощью @xnor)
источник
(a%2*2+b%2)/3**d
сохраняет 3 символа, но использует дополнениеd=1-c
. У вас есть способ сделать-~(3*c|b%2)
с дополнением? В худшем случае он теряет 2 символа с3-3*d
. Кроме того, форматand-~x+y
может бытьandy-~x
длинным,y
начиная с символа или числа.(b%2+5&4-d)
. Благодарность!CJam, 31 байт
Попробуйте онлайн в интерпретаторе CJam .
Как это работает
источник
JavaScript (ES6), 103
117 119 124Редактировать теперь работает с числами вместо строк
(не считая пробелов, переносов и комментариев)
Протестируйте выполнение сниппета в любом браузере, совместимом с EcmaScript 6 (в частности, не Chrome, не MSIE. Я тестировал на Firefox, Safari 9 мог пойти)
источник
Matlab,
119113 байтовUngolfed:
Примеры:
источник
R 145 байтов
Ungolfed + объяснение:
источник
Python 3,
174166148126Довольно просто, строковые операции, затем преобразование обратно в целое число.
Ограничено числами, которые в двоичном коде имеют 99 цифр (максимум 2 ^ 99-1 = 633825300114114700748351602687).
Спасибо, Sp3000 и Vioz!
Или 165 символов без ограничения:
Ungolfed:
источник
zfill
вместоrjust
дополнения нулямиa,b
, просто поместите егоzip
с*
(i if j=='1'else'') -> i[:j>'0']
if/else
Pyth, 43 байта
Часть меня нервничает, когда отправляет такой длинный ответ Пита на вопрос Исаака ...: oP
Explaination:
источник
C
127123 байта + 5 штрафов = 128scanf
считает символ Unicode более чем одним символом, что сильно усложняет ситуацию, поэтому я применяю 5-байтовый штраф за использование$
.Изменения по сравнению с оригинальной версией:
- Тест на $ или ~ был изменен с
q&2
наq%7
. Это инвертирует значения true / false, что позволяет коду для оператора $ идти перед тем,:
что означает, что набор скобок может быть удален.-
i
Цикл теперь отсчитывает в степенях 2, что длиннее, но допускает>>
замену/
и сохраняет некоторые скобки.Оригинальная версия 127 байт
Я пошел с одной петлей с условностями внутри, чтобы избежать накладных расходов на две петли. В обоих случаях я смещаю права битов операндов вплоть до 1-го бита и строю результат от старшего к младшему значащему биту, смещая его влево (умножая на 2 или 4).
источник
main
причинq
повреждает на моей машине, что странно. Я ожидаю, что настоящая проблема сscanf
, но из-за этого я оставил их как обычные декларации.q
гарантированно будет ноль, но при объявлении в качестве параметра функцииq
содержится 32-битный мусор. Это не было бы проблемой , если я назначен на значениеq
, ноscanf
с"%c"
только переписывает младшие 8 бит мусора, оставляя другие 24 неопределенные. Мне может повезти на другом компиляторе!К5,
5352 байта53-байтовая версия:
Все еще нужно немного больше игры в гольф.
источник
CJam,
6150464134 байтаСпасибо @Dennis за указание на 4-байтовый гольф.
Попробуйте онлайн .
источник
]{}/
это простоХаскелл, 77
ввод дается путем применения ввода к функциям / операторам
?
и¢
определяется в коде (Haskell не может определить оператор~
по техническим причинам).в основном работает старый рекурсивный подход.
источник
J, 173
ожидает одну строку ввода
ожидается завершение ввода после новой строки с EOF
источник
Javascript ES6 (3 аргумента)
141138136121119 байтТест:
Javascript ES6 (1 аргумент)
135133 байтаТест:
PS: Новая строка считается за 1 байт, поскольку она может быть заменена на
;
.источник
Python 3, 157 байт
Полную и пояснительную версию можно найти на моей наклейке .
источник
e
только один раз, не могли бы вы просто встроить это?Mathematica, 155 байт
Оценивает анонимную функцию, принимающую строку в качестве входных данных. Добавлены разрывы строк для ясности.
f
иg
преобразовать в / из базы 2.Riffle
делает именно то, что должно чередоваться . Я хотел использоватьSelect
для выбора, ноCases
лучше, к сожалению. Последняя строка немного обманчива; изменяются пробелы,~
которым является инфиксный оператор Mathematica, а затем строка eval'd.источник