Stwórz program, który symuluje podstawowe bramki logiczne.
Wprowadzanie: słowo pisane wielkimi literami, po których następuje 2 1-cyfrowe liczby binarne, oddzielone spacjami, np OR 1 0
. Bramy OR
, AND
, NOR
, NAND
, XOR
, i XNOR
są potrzebne.
Dane wyjściowe: Jakie dane wyjściowe wprowadzonej bramki logicznej otrzymają dwie liczby: 1 lub 0.
Przykłady:
AND 1 0
staje 0
XOR 0 1
się 1
OR 1 1
staje się 1
NAND 1 1
staje0
To jest codegolf, więc wygrywa najkrótszy kod.
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
źródło
źródło
Odpowiedzi:
Galaretka ,
1310 bajtówWypróbuj online!
Odpowiedź Porta Petera Taylora.
źródło
*256%339%2
) .Python 2 , 38 bajtów
Wypróbuj online!
Dobry stary łańcuch modulo zastosowany do sumy wartości ASCII ciągu wejściowego, dzięki czemu rozwiązanie jest po prostu zbyt dobre. Całkowita wartość ASCII jest odrębna dla każdego możliwego wejścia, z wyjątkiem tych, które dają
0 1
i1 0
dają ten sam wynik, co działa, ponieważ wszystkie użyte bramki logiczne są symetryczne.*3
Oddziela się inaczej sąsiadujące wartości wejściowych, które różnią się tylko w bitach, ponieważ te sprawiają, że trudno modyfikacji łańcucha się rozdzielić. Długość i rozmiar liczb w łańcuchu modów tworzy w przybliżeniu odpowiednią ilość entropii, aby zmieścić 18 wyjść binarnych.Krótsze rozwiązanie jest z pewnością możliwe przy użyciu
hash(s)
lubid(s)
, ale unikałem ich, ponieważ są zależne od systemu.Python 2 , 50 bajtów
Wypróbuj online!
Nieco bardziej zasadnicze rozwiązanie. Każda bramka logiczna daje inny wynik dla każdej liczby zer na wejściu, kodowana jako liczba 3-bitowa od 1 do 6. Każda możliwa bramka logiczna jest odwzorowywana na odpowiednią liczbę przez wzięcie
(s*9)[35]
, które wszystkie są odrębne. Ponieważ kończy się toOR
czytaniem jednego z bitów, aby postać mogła być0
lub1
, ale okazuje się, że działa, aby sprawdzić, czy tak0
, a a i1
tak poprawnie da1
wynik.źródło
*a%b%c%d%e%2
, nic naprawdę sprytnego. Jedyną interesującą rzeczą było postawienie*
przed modami; Nie próbowałem innych formatów.JavaScript (ES6), 39 bajtów
Wypróbuj online!
W jaki sposób?
Nie możemy analizować spacji
parseInt()
niezależnie od tego, z jaką bazą pracujemy. Zamiast tego wstrzykuje się reprezentację ciągu wejściowego w formacie 64. Może to generować=
znaki wypełniające (których nie można przeanalizować za pomocąparseInt()
żadnego z nich), ale z pewnością są one umieszczone na końcu łańcucha i można je bezpiecznie zignorować.źródło
NOR
?NOR
. Teraz naprawione.CJam (13 bajtów)
Zakłada, że dane wejściowe nie zawierają końcowego nowego wiersza.
Zestaw testów online
To tylko prosty skrót, który mapuje 24 możliwe dane wejściowe na 17 różnych, ale spójnych wartości, a następnie wyszukuje je w skompresowanej tabeli.
Python 2 (36 bajtów)
To tylko część powyższej odpowiedzi CJam. Zestaw testowy przy użyciu frameworka testowego xnor.
źródło
05AB1E ,
1312108 bajtówAlternatywne obliczenia Port @mazzy wymienione w komentarzu do jego odpowiedzi Powershell (
*256%339%2
zamiast*108%143%2
).Wypróbuj online lub sprawdź wszystkie przypadki testowe .
Wyjaśnienie:
Zobacz moją wskazówkę 05AB1E (rozdział Jak kompresować duże liczby całkowite? ), Aby zrozumieć, dlaczego tak
Ƶï
jest339
.źródło
Węgiel drzewny , 32 bajty
Wypróbuj online! Link jest do pełnej wersji kodu. Objaśnienie: Skompresowany ciąg rozwija się do listy obsługiwanych operacji, tak że indeks danej operacji jest następnie przesuwany w prawo zgodnie z danymi wejściowymi, a wyodrębniony bit staje się wynikiem.
Wersja 74-bajtowa działa dla wszystkich 16 operacji binarnych, które arbitralnie nazwałem następująco: ZERO I MNIEJ DRUGIEJ WIELKIEJ PIERWSZEJ XOR LUB NOR XNOR NFIRST NGREATER NSECOND NLESS NAND NZERO.
Wypróbuj online! Link jest do pełnej wersji kodu.
źródło
Mathematica, 55 bajtów
Czysta funkcja. Bierze ciąg jako dane wejściowe i zwraca
True
lubFalse
dane wyjściowe. PonieważOr
,And
,Nor
,Nand
,Xor
, iXnor
są Zabudowy, używamyToCamelCase
do zmiany operatora Pascal przypadku, konwertować je do równoważnej symbolu, i zastosować go do dwóch argumentów.źródło
J , 21 bajtów
Wypróbuj online!
Port Python 2 w roztworze XNOR .
J , 30 bajtów
Wypróbuj online!
Niektórzy trochę zabawy z eval
".
i biblioteki standardowej (który już zawiera poprawneAND
,OR
,XOR
).J , 41 bajtów
Wypróbuj online!
Więcej podejścia w stylu J.
Jak to działa
Ukryta jest tutaj bardzo ogólna sztuczka J. Często pożądana funkcja ma strukturę „Wykonaj F na jednym wejściu, wykonaj H na drugim, a następnie wykonaj G na obu wynikach”. To powinno działać jak
(F x) G H y
. W milczącej formie jest to równoważne z(G~F)~H
:Jeśli
G
jest to asymetryczny prymityw, po prostu zamień lewy i prawy argument funkcji docelowej, a my możemy zapisać bajt.Przejdźmy do powyższej odpowiedzi:
źródło
PowerShell,
3634 bajtówZainspirowany przez xnor , ale sekwencja
*108%143%2
jest krótsza niż oryginalna*3%61%37%9%7%2
Skrypt testowy:
Wynik:
źródło
*16%95%7%2
nie dlaXNOR
przypadków, choć. Można użyć @ nedla2004 's*6%68%41%9%2
, która jest krótsza niż 2 bajty @xnor jest jedna, choć.xnor
. Myślę, że*108%143
to jest bardziej atrakcyjne :) Poza tym jest fajna para*256%339
. Ta para jest jeszcze lepsza dla języków, które potrafią pracować z bitami i bajtami.*256%339
.Perl 6 , 20 bajtów
Wypróbuj online!
Port podejścia Maddy . Alternatywnie
*256%339%2
działa również.Perl 6 , 24 bajtów
Wypróbuj online!
Port odpowiedzi xnora . Spróbuję znaleźć krótszy, ale myślę, że to chyba najlepsza z możliwych.
źródło
JavaScript (Node.js) ,
10694 bajtówWypróbuj online!
Link do kodu i wszystkich 24 przypadków.
+9 za zapomnienie do zmapowania skrzynki XNOR.
źródło
console.log(f("AND", 1, 1));
Java 10,
3028 bajtówPort odpowiedzi Powershell @mazzy .
Wypróbuj online.
źródło
JavaScript (Node.js) , 45 bajtów
Tylko część doskonałej odpowiedzi xnor na Python 2 opublikowanej za zgodą, proszę podać tę odpowiedź zamiast tego.
Wypróbuj online!
źródło
Attache , 55 bajtów
Wypróbuj online!
Raczej brutalne rozwiązanie. Konwertuje dane wejściowe na odpowiednie polecenie Attache i ocenia je. (Attache ma wbudowane funkcje dla każdej z 6 bramek logicznych).
źródło
Ruby , 20 bajtów
Wypróbuj online!
Jak to działa:
Zasadniczo to samo co odpowiedź Petera Taylora, ale Ruby to ułatwia. Magiczna liczba jest inna, ale pomysł był taki sam.
źródło