Gambarlah jalan semut Langton .
Deskripsi
Kotak di pesawat berwarna beragam baik hitam atau putih. Kami secara sewenang-wenang mengidentifikasi satu kotak sebagai "semut". Semut dapat melakukan perjalanan dalam salah satu dari empat arah mata angin pada setiap langkah yang diambilnya. Semut bergerak menurut aturan di bawah ini:
- Di kotak putih, putar 90 ° ke kanan, balikkan warna kotak, maju satu unit
- Di kotak hitam, belok kiri 90 °, balikkan warna kotak, maju satu unit
Spesifikasi
- Input: bilangan bulat N antara 0 dan 725 (inklusif).
- Keluaran: kisi 17 x 17 yang mewakili "jalur" semut pada langkah N.
Aturan
- Semut mulai menghadap ke kanan (jam 3).
- Semut mulai di tengah grid.
- Gunakan
_#@
untuk kotak putih, kotak hitam dan semut. - Grid awalnya sepenuhnya putih.
- Anda dapat membuat program lengkap atau fungsi pada bahasa yang ditafsirkan.
- Masukan dengan stdin atau argumen.
Contohnya
Pembaruan: keluaran case = 450 salah.
N = 0
_________________
_________________
_________________
_________________
_________________
_________________
_________________
_________________
________@________
_________________
_________________
_________________
_________________
_________________
_________________
_________________
_________________
N = 1
_________________
_________________
_________________
_________________
_________________
_________________
_________________
_________________
________#________
________@________
_________________
_________________
_________________
_________________
_________________
_________________
_________________
N = 450
_________________
_________________
___________##____
____##______##___
___#__##___##_#__
__###_#@#__#__#__
__#_#_#_#__#_#___
_____###___#_____
_____#___________
_____#__###______
___#_#_#__#_#_#__
__#__#_#____###__
__#_##__##___#___
___##______##____
____##___________
_________________
_________________
Jawaban:
GolfScript - 67 karakter
solusi Python hallvabo adalah yang paling mirip dengan ini, jadi saya hanya akan menjelaskan perbedaan utama.
Papan disimpan sebagai string bukan array. Ini agar kita dapat memperbarui nilai di papan tulis dengan karakter yang lebih sedikit (karena string selalu datar), dan mendapatkannya ke format output yang diinginkan mudah.
Posisi semut bertambah dengan rumus
((d&1)*17+1)*((d&2)-1)
(yaitu.1&17*)\2&(*
), di mana d adalah arah. Kami menggunakan variabel6
sehingga kami dapat melewati inisialisasi.sumber
:6
- sangat hipster. Saya benci debugging kode Anda :-)Ruby 1.9, 104 karakter
Input melalui argumen fungsi.
m
r*r>1
alih - alihr.abs>1
String#scan
untuk menghasilkan output. Mengubah==
ke>
String#tr
dengan bersyaratsumber
Python, 123
Hanya sedikit pengerjaan ulang solusi Python saya dari http://golf.shinh.org/p.rb?Langtons+Ant .
sumber
GolfScript
969489Bahasa kebencian favorit saya adalah kembali dengan sekelompok bytecode semi-readable.
Versi 89, saya akhirnya berhasil mengintegrasikan @ ke loop output.
Versi 94:
Berkomentar:
Edit, saya mungkin juga membuat versi besar, begini 59 * 59 dan 10500 iterasi:
.
sumber
Windows PowerShell,
119118sumber
PHP,
350309307312174161166159151149147144143Tidak disatukan
350 -> 309: Berbagai teknik kompresi dengan for () loop, juga diperbarui untuk menampilkan output yang benar.
309 -> 307: Konversi main untuk () loop ke while ().
307 -> 312: Lupa mengubahnya untuk menggunakan argv.
312 -> 174: Diprogram ulang berdasarkan jawaban lain.
174 -> 161: Tidak lagi default seluruh array.
161 -> 166: Argv menang lagi.
166 -> 159: Tidak perlu mendefinisikan ulang argv [1].
159 -> 151: Tidak lagi default apa pun, PHP melakukannya secara otomatis.
151 -> 149: Menghapus satu set tanda kurung, urutan operasi menghilangkan kebutuhan.
149 -> 147: Perpendek yang terakhir untuk () loop, kawat gigi tidak diperlukan.
147 -> 144:Terakhir untuk () loop sekarang adalah loop sementara ().
144 -> 143: Menggunakan variabel sementara untuk menyimpan karakter.
sumber
C,
166162Di sini terjemahan dari pendekatan Delphi saya ke C, memamerkan betapa kompaknya C. Saya meminjam trik newline bersyarat dari fR0DDY (terima kasih sobat!):
Versi indentasi dan komentar terlihat seperti ini:
sumber
"_@#"[g[i]]
dana+=(1-(d&2))*(1+(16*(d&1)))
(1+d%2*16)
menghemat beberapa karakter.Delphi, 217
Kode indentasi & komentar berbunyi seperti ini:
Memasukkan:
Keluaran:
sumber
C 195 Karakter
http://www.ideone.com/Dw3xW
Saya mendapatkan ini untuk 725.
sumber
p+=t+4;x+=a[p%4];
alih-alihp=(p+t+4)%4;x+=a[p];
menyimpan tiga karakter.sed, 481 karakter
Dapat dikurangi menjadi 478 karakter dengan menghapus baris pertama dan berjalan dengan
-n
Membutuhkan N baris untuk input, mis. saat dijalankan sebagai
output:
sumber
Perl, 110 karakter
Angka dibaca dari baris pertama STDIN. Sisa input diabaikan.
Sedikit lebih mudah dibaca:
Suntingan
(112 → 111) Tidak perlu memperbarui
$d
dengan nilai modulo-4.(111 → 110) Sekarang dapat menyejajarkan
$d
kenaikanTambahan (109 karakter)
Kami dapat membuat satu karakter lebih pendek jika Anda senang memiliki kasus
N=0
kegagalan khusus (itu tidak menampilkan@
karakter untuk semut). Semua input lain berfungsi dengan benar:Perbedaannya adalah bahwa kita sekarang menggunakan
%f
alih-alih@f
agar kita dapat menggunakan indeks negatif, dan kita beralih dari-144..144
bukan0..288
. Menghemat harus diinisialisasi$p
.sumber
Mathematica, 94 karakter
sumber
> <>, 122 byte
Dengan risiko sedikit necromancy, saya pikir menulis jawaban di> <> akan menjadi tantangan yang menarik ...
Program ini mengharapkan sejumlah langkah untuk dihitung agar ada pada tumpukan sebelum dieksekusi.
sumber