Сделайте программу, которая имитирует основные логические элементы.
Ввод: слово из заглавных букв, за которым следуют 2 однозначные двоичные числа, разделенные пробелами, например OR 1 0
. Ворота OR
, AND
, NOR
, NAND
, XOR
, и XNOR
необходимы.
Выходные данные: Какой выходной сигнал введенного логического элемента будет иметь два числа: 1 или 0.
Примеры:
AND 1 0
становится 0
XOR 0 1
становится 1
OR 1 1
становится 1
NAND 1 1
становится0
Это Codegolf, поэтому выигрывает самый короткий код.
code-golf
logic-gates
hashing
code-golf
code-golf
number
array-manipulation
integer
code-golf
string
unicode
text-processing
cops-and-robbers
boggle
cops-and-robbers
boggle
code-golf
ascii-art
code-golf
word-puzzle
king-of-the-hill
python
code-golf
sequence
kolmogorov-complexity
code-golf
source-layout
code-golf
string
kolmogorov-complexity
math
number
code-golf
date
code-golf
combinatorics
recursion
game
king-of-the-hill
javascript
code-golf
array-manipulation
code-golf
radiation-hardening
self-referential
code-golf
integer
code-golf
number
code-golf
set-theory
code-golf
sequence
code-golf
string
sorting
natural-language
code-golf
decision-problem
number-theory
primes
code-golf
code-golf
ascii-art
code-challenge
array-manipulation
sorting
rubiks-cube
regular-expression
code-golf
counting
file-system
recursion
code-golf
string
kolmogorov-complexity
color
code-golf
game
code-challenge
permutations
encode
restricted-time
decode
code-golf
math
decision-problem
matrix
integer
palindrome
code-golf
matrix
statistics
king-of-the-hill
king-of-the-hill
python
card-games
code-golf
string
natural-language
code-golf
sequence
number-theory
qazwsx
источник
источник
Ответы:
Желе ,
1310 байтПопробуйте онлайн!
Порт Питер Тейлор ответ.
источник
*256%339%2
) .Python 2 , 38 байт
Попробуйте онлайн!
Хорошая цепочка по модулю применяется к сумме значений ASCII входной строки, создавая решение, которое просто подходит. Общее значение ASCII отличается для каждого возможного входа, за исключением того, что они имеют
0 1
и1 0
дают одинаковый результат, что получается потому, что все используемые логические элементы симметричны.*3
Выделяется в противном случае-смежные значения для входов , которые отличаются только в битах, так как это делает его трудно для мод цепи дробить. Длина и размер чисел в цепочке модов создает примерно правильное количество энтропии для 18 бинарных выходов.Более короткое решение, безусловно, возможно с использованием
hash(s)
илиid(s)
, но я избегал их, потому что они зависят от системы.Python 2 , 50 байт
Попробуйте онлайн!
Несколько более принципиальное решение. Каждый логический вентиль дает различный результат для каждого счетчика нулей на входе, кодируемый как трехбитовое число от 1 до 6. Каждый возможный логический вентиль сопоставляется с соответствующим числом путем взятия
(s*9)[35]
, которые все различны. ПосколькуOR
, это завершает чтение одного из битов, чтобы символ мог быть0
или1
, но оказывается, что он работает, чтобы проверить, если это так0
, и a1
в1
любом случае правильно даст результат.источник
*a%b%c%d%e%2
, ничего действительно умного. Единственной интересной вещью было ставить*
перед модами; Я не пробовал другие форматы.JavaScript (ES6), 39 байт
Попробуйте онлайн!
Как?
Мы не можем анализировать пробелы
parseInt()
, независимо от того, с какой базой мы работаем. Таким образом, вместо этого мы вводим представление base-64 входной строки. Это может генерировать=
символы заполнения (которые не могут быть проанализированы сparseInt()
ни одним из них), но эти гарантированно находятся в конце строки и могут быть безопасно проигнорированы.источник
NOR
?NOR
. Сейчас исправлено.CJam (13 байт)
Предполагается, что ввод без завершающей строки.
Набор онлайн-тестов
Это простой хеш, который отображает 24 возможных входа в 17 различных, но согласованных значений, а затем просматривает их в сжатой таблице.
Python 2 (36 байт)
Это просто порт ответа CJam выше. Тестовый набор с использованием среды тестирования xnor.
источник
05AB1E ,
1312108 байтПорт альтернативного расчета @mazzy, упомянутый в комментарии к его ответу Powershell (
*256%339%2
вместо*108%143%2
).Попробуйте онлайн или проверьте все контрольные примеры .
Объяснение:
Посмотрите эту подсказку 05AB1E (раздел Как сжать большие целые числа? ), Чтобы понять, почему
Ƶï
это так339
.источник
Древесный уголь , 32 байта
Попробуйте онлайн! Ссылка на подробную версию кода. Объяснение: Сжатая строка расширяется до списка поддерживаемых операций, так что индекс данной операции затем сдвигается вправо в соответствии с входными данными, и извлеченный таким образом бит становится результатом.
74-байтовая версия работает для всех 16 бинарных операций, которые я произвольно назвал следующим образом: НОЛЬ И МЕНЬШЕ ВТОРОЕ БОЛЬШОЕ ПЕРВЫЙ XOR ИЛИ NOR XNOR ПЕРВЫЙ NGREATER NSECOND NLESS NAND NZERO.
Попробуйте онлайн! Ссылка на подробную версию кода.
источник
Mathematica, 55 байт
Чистая функция. Принимает строку как ввод и возвращает
True
илиFalse
как вывод. Так какOr
,And
,Nor
,Nand
,Xor
, иXnor
все встроенные модули, мы используем ,ToCamelCase
чтобы изменить оператор в Паскале случае, преобразовать его в эквивалентный символ, и применить его к двум аргументам.источник
J , 21 байт
Попробуйте онлайн!
Порт решения xnor's Python 2 .
J , 30 байт
Попробуйте онлайн!
Некоторые немного удовольствия с Eval
".
и стандартной библиотеки (которая уже включает в себя правильноAND
,OR
,XOR
).J , 41 байт
Попробуйте онлайн!
Более J-стиль подхода.
Как это устроено
Очень общий трюк J спрятан здесь. Часто желаемая функция имеет структуру «Делай F на одном входе, делай H на другом, а затем делай G на обоих результатах». Тогда это должно работать как
(F x) G H y
. В молчаливой форме это эквивалентно(G~F)~H
:Если
G
это асимметричный примитив, просто поменяйте местами левый и правый аргументы целевой функции, и мы можем сохранить байт.Теперь перейдем к ответу выше:
источник
Powershell,
3634 байтаВдохновлен xnor , но последовательность
*108%143%2
короче оригинала*3%61%37%9%7%2
Тестовый скрипт:
Выход:
источник
*16%95%7%2
неудачу дляXNOR
случаев, все же. Вы можете использовать @ nedla2004 «s*6%68%41%9%2
, что 2 байта короче @xnor » ы один, хотя.xnor
. Я думаю, что*108%143
это более привлекательным :) Кроме того, есть хорошая пара*256%339
. Эта пара еще лучше для языков, которые умеют работать с битами и байтами.*256%339
.Perl 6 , 20 байт
Попробуйте онлайн!
Подход порта Мэдди . В качестве альтернативы
*256%339%2
также работает.Perl 6 , 24 байта
Попробуйте онлайн!
Порт ответа от xnor . Я попытаюсь найти более короткий, но я думаю, что это, вероятно, лучшее, что есть.
источник
JavaScript (Node.js) ,
10694 байтаПопробуйте онлайн!
Ссылка на код и все 24 случая.
+9 за забытый на карту случай XNOR.
источник
console.log(f("AND", 1, 1));
Java 10,
3028 байтПорт ответа @mazzy 's Powershell .
Попробуйте онлайн.
источник
JavaScript (Node.js) , 45 байт
Просто порт превосходного ответа Python 2 от xnor, опубликованный с согласия, пожалуйста, вместо этого дайте этот ответ.
Попробуйте онлайн!
источник
Атташе , 55 байт
Попробуйте онлайн!
Довольно грубое решение. Преобразует ввод в соответствующую команду Attache и оценивает ее. (Attache имеет встроенные модули для каждого из 6 логических элементов.)
источник
Рубин , 20 байтов
Попробуйте онлайн!
Как это устроено:
В основном так же, как ответ Питера Тейлора, но Руби облегчает. Магическое число отличается, но идея была та же.
источник