Latar Belakang
Ya, fisika bitstring adalah hal yang nyata . Idenya adalah untuk membangun teori fisika baru menggunakan hanya serangkaian bit yang berevolusi di bawah aturan probabilistik ... atau sesuatu. Meskipun membaca beberapa makalah tentang itu, saya masih cukup bingung. Namun, alam semesta bitstring membuat kode golf kecil yang menyenangkan.
Program Universe
Fisika Bitstring terjadi di alam semesta yang disebut program . Pada setiap langkah evolusi alam semesta, ada daftar L
bitstring yang terbatas dengan panjang tertentu k
, dimulai dengan daftar dua elemen di [10,11]
mana k = 2
. Satu timestep diproses sebagai berikut (dalam pseudocode mirip-Python).
A := random element of L
B := random element of L
if A == B:
for each C in L:
append a random bit to C
else:
append the bitwise XOR of A and B to L
Semua pilihan acak adalah acak seragam dan tidak tergantung satu sama lain.
Contoh
Contoh evolusi 4 langkah mungkin terlihat seperti berikut. Mulai dengan daftar awal L
:
10
11
Kami memilih secara acak A := 10
dan B := 10
, yang merupakan baris yang sama, yang berarti kita perlu memperluas setiap string L
dengan bit acak:
101
110
Selanjutnya, kita pilih A := 101
dan B := 110
, dan karena mereka tidak sama, kami menambahkan XOR mereka ke L
:
101
110
011
Kemudian, kita memilih A := 011
dan B := 110
, dan menambahkan XOR mereka lagi:
101
110
011
101
Akhirnya, kami memilih A := 101
(baris terakhir) dan B := 101
(baris pertama), yang sama, jadi kami memperluas dengan bit acak:
1010
1100
0111
1010
Tugas
Tugas Anda adalah mengambil integer nonnegatif t
sebagai input, mensimulasikan semesta program untuk t
timesteps, dan mengembalikan atau mencetak daftar yang dihasilkan L
. Perhatikan bahwa t = 0
hasil dalam daftar awal [10,11]
. Anda dapat menampilkan L
sebagai daftar daftar bilangan bulat, daftar daftar nilai boolean atau daftar string; jika output beralih ke STDOUT, Anda juga dapat mencetak bitstrings satu per baris dalam beberapa format yang masuk akal. Urutan bitstring signifikan; khususnya, daftar awal tidak boleh [11,10]
,[01,11]
atau semacamnya. Baik fungsi dan program penuh dapat diterima, celah standar tidak diizinkan, dan jumlah byte terendah menang.
Jawaban:
Pyth,
2726 byteCobalah online: Demonstrasi
Penjelasan:
sumber
xVFK
setara denganxMK
.xVFK
sama denganxMCK
, jumlah byte yang sama.CJam,
42403837 byte1 byte disimpan oleh Sp3000.
Penjelasan
Buat status awal sebagai nomor basis-2:
Dan kemudian lakukan loop utama dan cukup cetak hasilnya di akhir:
Uji di sini.
sumber
Julia,
141129 byteTidak ada yang pintar. Membuat fungsi tanpa nama yang menerima integer sebagai input dan mengembalikan array array. Untuk menyebutnya, berikan nama, mis
f=t->...
.Penjelasan + tidak dikumpulkan:
Contoh:
Disimpan 12 byte berkat ML!
sumber
A=something;B=something else to A,B=something,something else
:t->(L=Any[[1,0],[1,1]];for i=1:t r=1:length(L);A,B=L[rand(r)],L[rand(r)];A==B?(for j=r L[j]=[L[j],rand(0:1)]end):(push!(L,A$B))end;L)
A
danB
secara terpisah sebenarnya sama panjang dengan menugaskan mereka bersama, jadi saya meninggalkan bagian itu apa adanya. Sekali lagi terima kasih atas saran Anda!Python 2, 141
Saya mencoba beberapa metode berbeda, tetapi yang terbaik yang bisa saya dapatkan relatif mudah. Terima kasih kepada @ Sp3000 untuk 15 karakter atau lebih (dan telah mengajari saya tentang keberadaan
int.__xor__
).sumber
Python 2,
127122Dengan asumsi string bit python dari bentuk
'0b1'
dll OK:Hanya nuansa ringan di sini adalah penggunaan fakta bahwa XOR (A, B) = 0 iff A = B.
Terima kasih kepada @ Sp300 untuk memperpendek
for
loop penutupsumber
Pyth, 34
Penggunaan dikurangi untuk menerapkan setiap iterasi. Saya akan menjelaskan ketika saya selesai bermain golf.
Coba di sini
sumber
K,
465346 bytePotongan yang baik dari ukuran (sekitar 7 byte) dari ini adalah untuk fakta bahwa K tidak memiliki
xor
operator, jadi saya harus mengimplementasikannya sendiri. Awalnya, saya menggunakan daftar string, diikuti dengan menyadari bahwa itu sangat bodoh. Jadi sekarang saya memotong 7 byte lagi!Sebelum:
@ JohnE menunjukkan dalam komentar bahwa keadaan awal seharusnya hardcoded, yang biaya 7 byte tambahan. : /
sumber
(1 0;1 1)
- program Anda menerima ini sebagai masukan.JavaScript ( ES6 ) 152
Sebuah fungsi, menggunakan string (dengan angka harus lebih pendek, tetapi dalam operasi bit javascript terbatas pada integer 32 bit).
Uji di Firefox menggunakan cuplikan di bawah ini.
sumber
K,
454138 byteStruktur jawaban saya sangat mirip dengan @ kirbyfan64sos, tetapi alih-alih string saya menggunakan vektor 1/0 dan saya menghindari kebutuhan untuk conditional (
:[ ; ; ]
) dengan cara mengindeks ke dalam daftar.Beberapa langkah:
Edit:
Disimpan empat byte dengan cara yang lebih ringkas untuk membangun alam semesta awal:
Sunting2:
Saya lupa bahwa "pilih" dapat mengambil daftar sebagai argumen yang benar:
Jadi saya bisa menyederhanakan bagian dari ini. Kredit di mana sudah jatuh tempo, Kirby punya trik ini sebelum saya melakukannya.
sumber
Javascript,
241233 byteItu agak lama.
sumber
for(b=prompt(a=[[1,0],[1,1]]),R=Math.random;b--;){c=a.length;d=a[c*R()|0];e=a[c*R()|0];if(d+""==e+"")for(f=0;f<c;f++)a[f].push(2*R()|0);else{for(h=0,g=[];h<d.length;)g.push(d[h]^e[h++]);a.push(g)}}alert(a.join("\n"))
menghasilkan output yang diinginkan 3/5 saat itu.for(b=prompt(a=[[1,0],[1,1]]),R=Math.random;b--;){c=a.length;d=a[c*R()|0];e=a[c*R()|0];if(d+""==e+"")for(f=0;f<c;f++)a[f].push(2*R()|0);else{g=[];for(h=0;h<d.length;h++)g.push(d[h]^e[h]);a.push(g)}}alert(a.join("\n"))
bekerja 90% dari waktu.T-SQL (2012+), 1019
Saya benar-benar menyesal ini tidak kompetitif, tetapi jujur saya tidak berpikir saya bisa mendapatkan ini untuk bekerja dan harus mempostingnya begitu saya lakukan. Saya memang mencoba golf sedikit :)
Untuk menangani konversi biner / integer, saya harus membuat beberapa fungsi skalar (513 byte).
A
beralih dari integer ke string bit.B
melakukan yang sebaliknya.Lalu ada prosedurnya.
@C
adalah jumlah langkahSepuluh ribu iterasi memakan waktu sekitar 2 menit dan mengembalikan 9991 baris
sumber
Pyth - 37 byte
Jelas, cukup ikuti psuedocode. Mungkin bisa banyak golf.
Coba di sini online .
sumber
O2
bukanO1
.O1
memberi Anda nomor acak dari rentangU1 = [0]
.0
.Mathematica, 106 byte
sumber
Perl, 102
Coba saya .
sumber
R, 186
Tidak ada yang ajaib di sini. Masukkan nilai untuk
t
di konsol R dan jalankan skrip. Sulit untuk "bermain golf" dengan kode R tetapi ini versi yang lebih mudah dibaca:sumber
sample
ke variabel. misalnyas=sample
, kemudian gunakan s daripada sampel. Sayangnya saya pikir metode Anda menambahkan bit acak dilapply
akan berakhir dengan satu sampel acak ditambahkan ke semua item dalam daftar.lapply(L,function(x)append(x,sample(0:1,1)))
tampaknya bekerja, tetapi dengan biaya. Anda dapat menggantikan Andaas.numeric
dengan1*
yang seharusnya mendapatkan kembali.Ruby, 82
Cukup mudah. Dibandingkan dengan bahasa non-golf lainnya, ruby tampaknya cocok dengan perpustakaan standarnya yang besar.
Output sampel untuk t = 101010:
sumber