pengantar
XOR adalah gerbang logika digital yang mengimplementasikan atau. Sebagian besar waktu, ini ditampilkan sebagai ^
. Empat kemungkinan hasil dalam biner:
0 ^ 0 = 0
0 ^ 1 = 1
1 ^ 0 = 1
1 ^ 1 = 0
Ini juga bisa dilihat sebagai penambahan modulo 2 dalam biner. Dalam desimal, kita perlu mengkonversi desimal menjadi biner, 35 = 100011
dan 25 = 11001
.Untuk menghitung nilai XOR, kita menempatkannya di atas satu sama lain:
100011
11001 ^
--------
111010 = 58 in decimal
Tugas : Ketika diberi nilai integer N lebih besar dari 1, output tabel XOR dengan ukuran N + 1. Misalnya, N = 5:
0 1 2 3 4 5
1 0 3 2 5 4
2 3 0 1 6 7
3 2 1 0 7 6
4 5 6 7 0 1
5 4 7 6 1 0
Anda dapat melihat bahwa ada satu ruang di depan setiap angka, karena jumlah tertinggi dalam tabel memiliki panjang 1. Namun, jika kita mengambil N = 9, kita mendapatkan kotak berikut:
0 1 2 3 4 5 6 7 8 9
1 0 3 2 5 4 7 6 9 8
2 3 0 1 6 7 4 5 10 11
3 2 1 0 7 6 5 4 11 10
4 5 6 7 0 1 2 3 12 13
5 4 7 6 1 0 3 2 13 12
6 7 4 5 2 3 0 1 14 15
7 6 5 4 3 2 1 0 15 14
8 9 10 11 12 13 14 15 0 1
9 8 11 10 13 12 15 14 1 0
Nilai tertinggi memiliki panjang 2, sehingga nilainya lurus ke panjang 3 (panjang tertinggi + 1).
Aturan:
- Ruang putih terkemuka tidak wajib, hanya jika digunakan (atau tidak) secara konsisten
- Anda harus menampilkan tabel dalam bentuk yang ditunjukkan di atas.
- Padding antar kolom harus sekecil mungkin
- Ini adalah kode-golf , jadi pengiriman dengan jumlah byte paling sedikit menang!
output an XOR table with the size N+1
Jawaban:
MATL , 10 byte
Compiler (dan khususnya program ini) sekarang tampaknya berfungsi di Octave, walaupun masih perlu beberapa perbaikan. Anda dapat menggunakan komit GitHub untuk sementara waktu .
Sunting (30 Mar '16) : Cobalah online!
Contoh
Penjelasan
sumber
Utilitas Bash + BSD, 45
Saya sudah menunggu lama untuk menemukan gunanya
rs
. Ini sepertinya bagus.rs
mungkin perlu diinstal pada sistem Linux. Tapi itu berjalan di luar kotak pada OS X.$1
mengembang ke N, dan dengan demikianecho \$[{0..$1}^{0..$1}]
mengembang keecho $[{0..N}^{0..N}]
eval
diedit:$[0^0] $[0^1] $[0^2] ... $[0^N] ... $[N^N]
rs
(membentuk kembali) membentuk kembali baris ini ke baris N +1.-j
membenarkan kanan, dan-g1
memberikan lebar selokan 1. Ini memastikan tabel hasil akhir memiliki lebar minimal antara kolom.Saya telah menguji hingga N = 1000, yang membutuhkan 3,8 detik. Besar N secara teori dimungkinkan, meskipun bash akan kehabisan memori di beberapa titik dengan penggunaan memori (N + 1) ² dari ekspansi brace.
sumber
JavaScript (ES6) 120
122Edit 2 byte disimpan thx ETHproduk
Fungsi anonim. Catatan: angka dalam tabel dibatasi hingga 7 digit, itu lebih dari wajar mengingat ukuran keseluruhan tabel memungkinkan angka yang lebih besar
Sekarang saya harus menemukan cara yang lebih pendek untuk mendapatkan ukuran kolom maks, menghindari logaritma
Uji
sumber
~m
untuk menangkap ruang ekstra. Menggunakan string template dapat menyimpan dua byte:(z,j)=>`(7 spaces)${i^j}`.slice(~m)
(ignore this padding) ``abc`def`` (ignore this too)
seperti ini:abc`def
C, 114
128 152Edit penghitungan ruang yang disederhanakan, terinspirasi oleh karya Khaled A Khunaifer
Fungsi AC yang mengikuti spesifikasi.
Coba masukkan n sebagai input, default 9
Kurang golf
sumber
C, 103 byte
sumber
Jelly, tidak bersaing
7 byte Jawaban ini tidak bersaing, karena menggunakan fitur yang mengeposkan tantangan.
Cobalah online!
Bagaimana itu bekerja
sumber
R, 38 byte
Biasanya R membutuhkan banyak byte hanya untuk memformat output. Dalam hal ini justru sebaliknya.
outer
yang biasanya mengacu pada produk luar dari dua array, dapat ketika disediakan fungsi melakukan ini melintasi margin vektor. Dalam hal ini, kami menerapkan fungsi XOR bitwisebitwXor
.sumber
CJam,
2927 byteUji di sini.
Penjelasan
sumber
MathCAD, 187 Bytes
MathCAD menangani built in tables dengan mudah - tetapi sama sekali tidak memiliki bitwise Xor, atau decimal ke biner atau biner ke decimal converter. Untuk fungsi iterate melalui nilai yang mungkin. Tempat i, a2, Xa dan Xb ditahan. Loop sementara aktif mengkonversi ke biner, dan saat mengkonversi ke biner juga melakukan fungsi xor (salib kecil dengan lingkaran di sekitarnya). Ini menyimpan nomor biner dalam basis-10 nomor yang terdiri dari 0 dan 1. Ini kemudian dikonversi sebelum disimpan dalam matriks M melalui fungsi penjumlahan.
Ini dapat dengan mudah diturunkan (jika hanya dengan menukar placeholder untuk yang lebih pendek), tapi saya pikir saya akan mempostingnya dan melihat apakah ada yang bisa bermain golf di biner ke desimal konverter lebih dari apa pun.
sumber
k4, 50 byte
Misalnya:
sumber
C, 149 byte
Terperinci
sumber
11..1
dengan yang signifikan pada nilai inputn
, dapat dilakukan dengan terlebih dahulu menemukan kekuatan terdekat 2, kemudian xor dengan nomor sebelumnya,0001 xor 1110 = 1111
for(k=1;k<=n;)k*=2;k--;
. Sekarang saya melihat bahwa ini jauh lebih pendek daripada upaya C saya untuk hal yang sama (milik saya lebih baik untuk kinerja, tetapi kinerja tidak masalah dalam tantangan ini)2^k xor 2^k -1
untukmax{2^k<=n}
atau2^k -1
untukmin{2^k>=n}
. untuk mendapatkan semuanya11..1
di sanaPython 3,
133131 bytesumber
Mathematica, 108 byte
Abaikan kesalahan, hanya saja
Thread
tidak tahu apa yang dilakukannya.sumber
Emacs Lisp, 193 byte
Tidak Disatukan:
Output dikirim ke
*Message*
buffer, yangstdout
jikax
digunakan di dalam skrip.sumber
Python 2, 114 byte
Butuh beberapa mencari untuk menemukan cara untuk melakukan padding lebar variabel dalam
.format()
(beberapa, tidak banyak) dan membuatnya benar-disesuaikan, tapi saya pikir saya punya semuanya untuk spec sekarang. Bisa menggunakan lebih banyak golf dalam perhitungan lebar itu.sumber
Caché ObjectScript , 127 byte
Terperinci:
sumber
Pyke, 8 byte (tidak bersaing)
Penjelasan:
Coba di sini
sumber
Python 2, 77 byte
sumber
J , 10 byte
Cobalah online!
sumber
Excel VBA, 95 byte
Fungsi jendela langsung VBE anonim yang mengambil input dari jangkauan
[A1]
dan keluaran ke konsol.sumber
Basic Kecil , 499 byte
Sebuah skrip yang mengambil input dari
TextWindow
objek dan hasilnya samaCobalah di SmallBasic.com Menggunakan Silverlight dan karenanya harus dijalankan di IE atau Edge
Pilih konsol hitam, lalu ketik bilangan masukan dan tekan Enter.
sumber