Buat program yang mensimulasikan gerbang logika dasar.
Input: Kata all-caps diikuti oleh 2 1 digit angka biner, dipisahkan oleh spasi, seperti OR 1 0
. Gerbang OR
, AND
, NOR
, NAND
, XOR
, dan XNOR
diperlukan.
Output: Apa output dari gerbang logika yang dimasukkan akan diberi dua angka: 1 atau 0.
Contoh:
AND 1 0
menjadi 0
XOR 0 1
menjadi 1
OR 1 1
menjadi 1
NAND 1 1
menjadi0
Ini codegolf, jadi kode terpendek menang.
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
sumber
sumber
Jawaban:
Jelly ,
1310 byteCobalah online!
Jawaban Port of Peter Taylor.
sumber
*256%339%2
) .Python 2 , 38 byte
Cobalah online!
Rantai modulo yang bagus diterapkan pada jumlah nilai ASCII dari string input, membuat solusi yang hanya overfitting. Nilai ASCII total berbeda untuk setiap input yang mungkin, kecuali bahwa mereka dengan
0 1
dan1 0
memberikan hasil yang sama, yang berhasil karena semua gerbang logika yang digunakan adalah simetris.Yang
*3
memisahkan nilai-nilai yang berdekatan untuk input yang hanya berbeda dalam bit, karena ini membuat sulit bagi rantai mod untuk berpisah. Panjang dan ukuran angka dalam rantai mod menghasilkan kira-kira jumlah entropi yang tepat agar sesuai dengan 18 keluaran biner.Solusi yang lebih pendek tentu mungkin menggunakan
hash(s)
atauid(s)
, tapi saya menghindari ini karena mereka tergantung pada sistem.Python 2 , 50 byte
Cobalah online!
Solusi yang sedikit lebih berprinsip. Setiap gerbang logika memberikan hasil yang berbeda untuk setiap hitungan nol dalam input, dikodekan sebagai angka tiga-bit dari 1 hingga 6. Setiap gerbang logika yang mungkin dipetakan ke nomor yang sesuai dengan mengambil
(s*9)[35]
, yang semuanya berbeda. KarenaOR
, ini akhirnya membaca salah satu bit sehingga karakter bisa0
atau1
, tetapi ternyata bekerja untuk memeriksa apakah itu0
, dan1
akan memberikan1
hasil yang benar.sumber
*a%b%c%d%e%2
, tidak ada yang benar-benar pintar. Satu-satunya hal yang menarik adalah menempatkan*
sebelum mod; Saya tidak mencoba format lain.JavaScript (ES6), 39 byte
Cobalah online!
Bagaimana?
Kami tidak dapat memilah ruang
parseInt()
, tidak peduli basis apa yang sedang kami kerjakan. Jadi kami menyuntikkan representasi basis-64 dari string input sebagai gantinya. Ini dapat menghasilkan=
karakter padding (yang tidak dapat diuraikan denganparseInt()
baik), tetapi yang ini dijamin berada di akhir string dan dapat diabaikan dengan aman.sumber
NOR
?NOR
. Sekarang sudah diperbaiki.CJam (13 byte)
Mengasumsikan input tanpa baris baru yang tertinggal.
Test suite online
Ini hanya sebuah hash sederhana yang memetakan 24 input yang mungkin menjadi 17 nilai yang berbeda namun konsisten dan kemudian melihatnya dalam tabel terkompresi.
Python 2 (36 byte)
Ini hanya port jawaban CJam di atas. Test suite menggunakan kerangka kerja pengujian xnor.
sumber
05AB1E ,
1312108 bytePort perhitungan alternatif @mazzy disebutkan dalam komentar pada jawaban Powershell-nya (
*256%339%2
bukan*108%143%2
).Cobalah secara online atau verifikasi semua kasus uji .
Penjelasan:
Lihat ini 05AB1E ujung tambang (bagian Cara kompres bilangan bulat besar? ) Untuk memahami mengapa
Ƶï
adalah339
.sumber
Arang , 32 byte
Cobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan: String terkompresi memperluas ke daftar operasi yang didukung sehingga indeks operasi yang diberikan kemudian bergeser ke kanan sesuai dengan input dan bit dengan demikian diekstraksi menjadi hasilnya.
Versi 74-byte berfungsi untuk semua 16 operasi biner, yang saya sewenang-wenang menyebutkan sebagai berikut: NOL DAN KURANG DUA LEBIH BESAR PERTAMA XOR ATAU NOR XNOR NFIRST NGREATER NSECOND NLESS NAND NZERO.
Cobalah online! Tautan adalah untuk mengucapkan versi kode.
sumber
Mathematica, 55 byte
Fungsi murni. Mengambil string sebagai input dan mengembalikan
True
atauFalse
sebagai output. SejakOr
,And
,Nor
,Nand
,Xor
, danXnor
semua built-in, kami menggunakanToCamelCase
untuk mengubah operator untuk kasus Pascal, mengubahnya menjadi simbol setara, dan menerapkannya pada dua argumen.sumber
J , 21 byte
Cobalah online!
Port solusi xnor's Python 2 .
J , 30 byte
Cobalah online!
Beberapa sedikit bersenang-senang dengan eval
".
perpustakaan dan standar (yang sudah termasuk yang benarAND
,OR
,XOR
).J , 41 byte
Cobalah online!
Lebih banyak pendekatan J-style.
Bagaimana itu bekerja
Trik J yang sangat umum disembunyikan di sini. Seringkali, fungsi yang diinginkan memiliki struktur "Lakukan F pada satu input, lakukan H pada yang lain, dan kemudian lakukan G pada kedua hasil." Maka harus beroperasi seperti
(F x) G H y
. Dalam bentuk diam-diam, itu setara dengan(G~F)~H
:Jika
G
primitif asimetris, cukup tukar argumen kiri dan kanan dari fungsi target, dan kita dapat menyimpan byte.Sekarang ke jawaban di atas:
sumber
Powershell,
3634 byteTerinspirasi oleh xnor , tetapi urutannya
*108%143%2
lebih pendek dari aslinya*3%61%37%9%7%2
Skrip uji:
Keluaran:
sumber
*16%95%7%2
gagal untukXNOR
kasus ini. Anda bisa menggunakan @ nedla2004 's*6%68%41%9%2
, yang merupakan 2 byte lebih pendek dari @xnor ' s satu, meskipun.xnor
. Saya pikir itu*108%143
lebih menarik :) Selain itu, ada pasangan yang baik*256%339
. Pasangan ini bahkan lebih baik untuk bahasa yang tahu cara bekerja dengan bit dan byte.*256%339
.Perl 6 , 20 byte
Cobalah online!
Pelabuhan pendekatan maddy . Atau,
*256%339%2
juga berfungsi.Perl 6 , 24 byte
Cobalah online!
Port jawaban xnor . Saya akan mencari yang lebih pendek, tapi saya pikir itu mungkin yang terbaik.
sumber
JavaScript (Node.js) ,
10694 byteCobalah online!
Tautan ke kode dan semua 24 kasus.
+9 karena lupa memetakan case XNOR.
sumber
console.log(f("AND", 1, 1));
Java 10,
3028 bytePort dari @mazzy menjawab Powershell .
Cobalah online.
sumber
JavaScript (Node.js) , 45 byte
Hanya port jawaban Python 2 xnor yang luar biasa yang diposting atas persetujuan, tolong berikan jawaban itu sebagai gantinya.
Cobalah online!
sumber
Attache , 55 byte
Cobalah online!
Solusi yang agak brutal. Mengonversi input ke perintah Attache yang relevan dan mengevaluasinya. (Attache memiliki built-in untuk masing-masing dari 6 gerbang logika.)
sumber
Ruby , 20 byte
Cobalah online!
Bagaimana itu bekerja:
Pada dasarnya sama dengan jawaban Peter Taylor, tetapi Ruby membuatnya lebih mudah. Angka ajaib berbeda tetapi idenya sama.
sumber