Kode Gray adalah urutan angka-angka biner dari bitwidth di n
mana angka-angka berturut-turut hanya berbeda dalam satu bit (lihat contoh output).
Input contoh:
3
Contoh output:
000
001
011
010
110
111
101
100
Catatan:
- Pertanyaan ini tampaknya memiliki penipuan tetapi tidak, karena pertanyaan itu bukan kode-golf, dan menuntut output yang berbeda. Akan membantu untuk memeriksa jawabannya.
- Anda dapat mengasumsikan variabel
n
yang berisi input.
Jawaban:
JavaScript (77)
Versi yang lebih ramah-browser (console.log dan prompt ()):
sumber
for(i=0;i<(l=1<<n);i++)console.log((i^(i>>1)|l).toString(2).slice(1));
Python 2 (47)
Ekspresi
i/2^i
untuki
nomor kode abu-abu ke-'adalah dari jawaban ini . Untuk menambahkan angka nol di depan yang memanjangn
, saya menambahkan2**n
sebelum mengkonversi ke string biner, membuat string dengan panjangn+1
. Kemudian, aku memotong terkemuka1
awalan dan jenis nomor0b
dengan[3:]
.sumber
K (ngn / k) , 10 byte
Cobalah online!
sumber
!
mengejutkan saya. sangat keren !APL (Dyalog Classic) , 11 byte
Cobalah online!
n⍴2
adalah2 2...2
- vektorn
berduaan⍳
adalah indeksn
-dimensi array dengan bentuk2 2...2
- yaitu, array 2 × 2 × ... × 2 dari vektor bersarang. Seperti kita menggunakan 0-indexing (⎕IO←0
), mereka semua adalah vektor biner dengan panjangn
.,
ratakan 2 × 2 × ... × 2 bentuk, jadi kami mendapatkan vektor 2 n vektor biner↑
"mix" - ubah vektor vektor menjadi 2 yang solid matriks n × n . Ini terlihat seperti ini:0,
menambahkan nol di sebelah kiri matriks2≠/
menghitung pairwise (2
) xor (≠
) sepanjang dimensi terakhir (/
sebagai lawan dari⌿
); dengan kata lain, setiap elemen di-xor-ed dengan tetangga kanannya, dan kolom terakhir menghilangsumber
Japt ,
1412 byteDicukur dua byte berkat produk ETH .
Cobalah online!
sumber
ù
digunakan. KarenaN.z(n)
pembagian integer dengan default arg = 2, Anda dapat menyimpan dua byte dengan2pU Ç^z)¤ùTU
: Coba online!Python - 54
Didasarkan pada suatu algoritma dari referensi yang diberikan dalam tantangan:
Tidak Disatukan:
sumber
PowerShell (168)
Amatir PowerShell kembali dengan upaya lain di golF! Semoga kamu tidak keberatan! Paling tidak pertanyaan-pertanyaan ini menyenangkan, dan pengalaman belajar untuk boot. Dengan asumsi n telah dimasukkan, kita memiliki:
Karena PowerShell yang saya gunakan hanya 2.0, saya tidak bisa menggunakan cmdlet bit yang bisa membuat kode lebih pendek. Jadi saya mengambil keuntungan dari metode berbeda yang dijelaskan dalam sumber pertanyaan , membalik array dan menambahkannya ke dirinya sendiri, menambahkan 0 ke depan bagian atas, dan 1 ke bagian bawah.
sumber
F #
(86)(84)(80)Ini mungkin bisa diperbaiki lebih lanjut.
Perhatikan juga, jika dijalankan di FSI, Anda harus
open System;;
terlebih dahulu. Jika Anda ingin menghindari impor itu, (dan jika Anda tidak peduli dengan urutan nilai dicetak), Anda dapat menggunakan versi 82 karakter ini:sumber
Ruby -
4239Algoritma yang sama, bahasa yang berbeda:
Beralih dari
#map
ke#times
sebagai @voidpigeon menyarankan untuk menyimpan 3 karakter.sumber
[*0...2**n].map
bisa Anda gunakan(2**n).times
.J, 24 byte
Cobalah online!
Implementasi langsung dari algoritma "XOR dengan setengah lantai sendiri". Perhatikan bahwa
22 b.
XOR.sumber
MATL , 10 byte
Cobalah online!
Metode "XOR n with n >> 2" yang bagus.
W
- menghitung 2 ^ (input) (mendapat input secara implisit):q
- membuat rentang angka dari 0 hingga 2 ^ n - 1t
- menduplikasi rentang itu2/k
- MATL tidak memiliki bithift, jadi bagi (setiap angka) dengan 2 dan lantaiZ~
- elemen XOR hasil itu dengan array 0 ke 2 ^ n - 1 asliB
- konversi setiap angka dalam hasil ke biner(Secara implisit menampilkan output.)
sumber
K (ngn / k) , 25 byte
Cobalah online!
|:\x
adalah "scan terbalik x". berlaku mundur ke x sampai output sama dengan input, dan menunjukkan setiap iterasi. mengembalikan (0 1; 1 0) pada pass pertama.0 1,''
adalah "0 1 masing-masing bergabung". bergabung dengan 0 untuk setiap nilai 1 elem, dan 1 untuk setiap nilai 2 elem, memberi ((0 0; 0 1); (1 1; 1 0)) pada pass pertama,/
adalah "gabung", dan ratakan ke daftar.(x-1){...}/0 1
adalah "apply {func} over0 1
x-1 times". mengambil output dari iterasi terakhir sebagai inputsumber
APL (22)
Ini menghasilkan matriks n-by-2 ^ n yang berisi bit sebagai barisnya:
Penjelasan:
{
...}⍣(n-1)⍪0 1
: jalankan fungsinyan-1
kali dengan input awal matriks(0 1)T
(yang merupakan kode abu-abu 1-bit)(0,⍵)
: setiap baris⍵
dengan0
awalan,⍪
: diatas dari,1,⊖⍵
: setiap baris⍵
dengan1
awalan, dalam urutan terbaliksumber
Jq 1.5 ,
105100 byteAsumsikan N memberikan input. misalnya
Diperluas
Cobalah online!
sumber
Japt , 10 byte
Cobalah online!
sumber
T-SQL 134
Tantangan ini meminta untuk mengembalikan kekuatan Cartesian dari {(0), (1)}. Cuplikan ini membangun kode yang akan mengeksekusi produk Cartesian sebanyak {(0), (1)} n kali.
sumber