Tantangan
Anda harus menulis program lengkap yang mengambil tujuh angka dari STDIN, dan mencetak sejarah dua dimensi dari automaton seluler (CA) ke STDOUT. Ini golf kode.
Pemformatan Input Input akan terdiri dari tujuh bilangan bulat / string yang dipisahkan oleh koma. Angka pertama adalah jumlah aturan menurut kode Wolfram (nama standar untuk setiap aturan). Yang kedua adalah konfigurasi awal awal. Yang ketiga dan keempat menggambarkan pola apa dan berapa kali harus ditambahkan ke kiri konfigurasi awal. sebagai padding. Yang kelima dan keenam melakukan hal yang sama untuk sisi kanan. Angka terakhir adalah jumlah generasi untuk menjalankan simulasi.
Jadi, contoh inputnya adalah 90,11,0,4,0,4,5
. Ini akan memberi tahu program Anda bahwa Anda menjalankan aturan 90 . Itu juga harus memberitahu program bahwa Anda ingin konfigurasi awal 11
dengan string 0
ditambahkan 4 kali untuk kedua ujungnya, sehingga pola awal yang sebenarnya adalah 0000110000
. Ini juga memberi tahu program Anda untuk menjalankan simulasi ini selama 5 generasi.
Output Program Anda harus mencetak seluruh array sel setiap generasi (dipisahkan oleh baris baru), sehingga outputnya adalah diagram ruang-waktu dari CA. Untuk setiap generasi, keadaan setiap sel ditentukan oleh keadaannya dan keadaan sel di sebelah kiri dan kanan langsung, sesuai dengan aturan yang diberikan sebagai input. Simulasi harus membungkus ujung-ujungnya. Hal pertama yang dicetak haruslah array awal sebagai gen. 0.
Input 90,11,0,4,0,4,5
harus menghasilkan output berikut setepat mungkin.
0000110000
0001111000
0011001100
0111111110
1100000011
0110000110
Perhatikan bahwa kondisi awal tidak termasuk dalam lima generasi. Perhatikan juga bahwa simulasi membungkus ujung-ujungnya.
Lebih banyak contoh
memasukkan:
184,1100,01,2,01,1,4
keluaran:
0101110001
1011101000
0111010100
0110101010
0101010101
memasukkan:
0,1011,1,0,0,1,2
keluaran:
10110
00000
00000
Informasi lebih lanjut tentang cara kerja 1D CA dan bagaimana mereka diberi nomor
sumber
Jawaban:
Golfscript,
77 7370 karakterTerima kasih kepada @Howard, yang menunjukkan cara menyimpan 4 karakter.
sumber
48-
->1&
dan saya pikir juga tiga lagi. Anda dapat menghilangkan)
sebelum blok (tidak menambah penghitung) dan karena itu juga menyimpan dua muncul terakhir.APL (153 karakter)
Dan dalam bentuk yang kurang mudah dibaca, sedikit lebih pendek:
Contoh:
Saya yakin ada ruang untuk perbaikan (saya bahkan menemukan beberapa perubahan saat menulis posting ini!), Tetapi beberapa di antaranya bisa melibatkan perubahan mendasar, dan saya tidak tahan lagi menatap APL. Varian APL yang digunakan di sini adalah Dyalog APL .
sumber
Ruby,
165159 karakterSunting: Saya menemukan beberapa tempat untuk peningkatan kecil.
Contoh dijalankan:
sumber
C,
303 305 301 294292305 Sunting: oops. Lupa itu
calloc()
butuh dua argumen. Itu meledak pada input yang lebih besar.301 Sunting: Ah HA! Menggunakan
calloc()
boo-boo saya untuk menghemat 2 byte lebih banyak dengan menaikkan ukuran blok dari memori yang diminta.294 Sunting: Rusak 300! Dieliminasi salah satu
strcat()
dan tweak beberapa loop. Harus menggunakan mengunyah maksimal, yang menyenangkan untuk dikatakan sebagai penggunaan.292 Sunting: Tidak perlu
+2
alokasi memori.Saya menggunakan jawaban luser droog sebagai ide dasar, tetapi mengubah algoritma pembungkusan, serta banyak mengutak-atik dan memfaktorkan konstanta.
sumber
C,A,
! :)brk()
? lalu dip=s+C+1;
suatu tempat.+++
!%[01]
untuk%s
! -9 (... bertahun-tahun kemudian)C (
487484418 dengan spasi dihapus)* Turun 66 dengan bantuan dari JoeFish *
naskah
sumber
int
variabel Anda mendunia dan menghapus#include
:r,A,B,C,n,i,j; main(){char *s...
for
loop Anda :for(;A--;)strcat(s,a);
A
danC
nanti jadi Anda tidak perlu mendeklarasikani
atau tidakB
sama sekali.p=malloc((C=strlen(s))+1); --C; strcpy(p,s); for(A=0;A<n;A++){
Maaf, saya akan berhenti sekarang :)--C;
:p=malloc((C=strlen(s)-1)+2);
. Saya pikir kode golf lebih menyenangkan daripada membuat kode itu!#include
karenascanf
variadic. Tetapi mungkin tidak apa-apa karena hanya dipanggil sekali. ... Mesin lama saya mati kemarin, dan saya masih menginstal Cygwin. Saya akan memasukkan perubahan itu segera setelah saya bisa mengujinya. Terima kasih!