Befunge adalah bahasa pemrograman esoterik 2 dimensi. Ide dasarnya adalah bahwa perintah (satu karakter) ditempatkan pada kisi 2 dimensi. Aliran kontrol berjalan melintasi kisi, menjalankan perintah yang dilewatinya, dan mengubah arah saat menyentuh panah ( >^<v
). Perintah berbasis stack; lihat daftar ini . Lihat juga http://esolangs.org/wiki/Befunge .
Spesifikasi untuk Befunge-98 tersedia.
Masalah
Tulis program yang mengubah program Befunge menjadi representasi yang lebih ringkas. Misalnya, program berikut mencetak 0
:
> 0 v
> @ .
^ <
Dalam hal ini, itu bisa dipadatkan tanpa mengubah perilaku program dengan menghapus barisan ruang, untuk diberikan
>0v
>@.
^ <
Transformasi yang lebih canggih dapat memutar atau mencerminkan urutan perintah dan menghilangkan perintah aliran kontrol yang tidak perlu untuk memadatkan program. Misalnya, dengan program ini:
>12345v
6
v....7<
.
.
.
@
Anda mungkin memasukkan ujung program ke dalam lubang:
>12345v
>...@ 6
^....7<
Sebagai contoh pertama, program yang paling ringkas mungkin adalah
>0.@
Anda dapat menggunakan transformasi apa pun selama program keluaran memberikan hasil yang sama.
Program input
Program input adalah program Befunge-98 yang valid.
Anda dapat mengasumsikan bahwa program input bersifat deterministik. Artinya, tidak menggunakan perintah yang membaca keadaan eksternal: perintah input pengguna &
dan ~
, pengacak ?
, dan perintah kode modifikasi diri p
dan g
.
Anda dapat menganggap program input berakhir.
Mencetak gol
Ini bukan kode golf, tetapi masalah untuk menulis program yang melakukan kode golf.
Input adalah seperangkat kasus uji (program Befunge yang memenuhi batasan input di atas). Skor total adalah jumlah skor untuk kasus uji.
Skor untuk setiap test case
Skornya adalah area lambung cembung dari sel-sel yang tidak kosong dalam program keluaran, di mana setiap sel diperlakukan sebagai kotak yang empat sudutnya adalah titik-titik kisi dalam bidang Cartesian. Misalnya, sebuah program dari
> v
@ <
mendapat skor 9,5.
Jika program Anda tidak berakhir dalam jumlah waktu dan memori yang masuk akal pada input tertentu, skornya adalah dari program input. (Ini karena Anda dapat dengan mudah menambahkan pembungkus pembatas waktu yang membuat output program input tidak berubah jika program Anda tidak berakhir dalam waktu.)
Jika program kasus uji memiliki hasil yang berbeda (atau gagal berakhir) setelah diproses dengan program Anda, skornya adalah skor program input ditambah penalti 100 poin.
sumber
.
berarti bilangan bulat keluaran, tetapi jika Anda mulai dari kiri atas, maka tidak ada bilangan bulat di tumpukan ke keluaran..
menghasilkan bilangan bulat. Tetapi juga, ketika tidak ada parameter yang cukup pada stack, befunge berpura-pura ada jumlah nol yang cukup di sana sebagai gantinya. Jadi contoh kedua akan ditampilkan000
.g
danp
tidak diizinkan (maaf, lupa tentang itu; diedit).Jawaban:
Saya menghabiskan waktu lama naik pesawat untuk mengkodekan yang satu ini. Saya telah menulis kompiler befunge pseudo yang menjalankan program befunge, mengekstrak blok dasar, dan menjabarkannya dalam representasi yang ringkas.
Tautan ke program .
Ketika dijalankan pada program 99 botol ini:
Ini menghasilkan output berikut:
Ini sebenarnya tidak jauh lebih kompak dari sumbernya, tetapi mungkin akan lebih baik pada program yang lebih besar / sparser.
Program ini ditata dengan area perutean di sebelah kiri dan isi blok dasar di sebelah kanan. Blok dasar biasanya diletakkan dalam jumlah baris yang genap sehingga pintu masuk dan keluar berdampingan dengan area routing. Di akhir setiap blok dasar, gadget
#^_v
dan varian, yang ditata dari kanan ke kiri, melakukan cabang bersyarat dan rute mengalir ke kolom. Di awal setiap blok dasar, kolom ini dirutekan ke dalam baris untuk blok dasar tujuan.Selain itu, jika output pendek, itu hanya menghasilkan output secara eksplisit, seperti ini:
Saya belum melakukan apa pun untuk mengoptimalkan blok dasar sendiri, hanya tata letak. Melakukan.
Jadi, di mana tesnya?
sumber
Sed, 5 karakter
Jadi, bahkan jika ini bukan codegolf, inilah solusi yang akan memiliki rasio codelength to score yang agak bagus, tetapi tidak harus skor yang baik.
Ini hanya menghapus garis kosong.
sumber
"
). Setiap baris kosong di jalan harus diperlakukan sebagai karakter spasi. Jika kami mencetak string itu, kode yang Anda hasilkan tidak memiliki spasi dalam output!b a
. Tetapi setelah pemendekan Anda, itu akan dicetakba
.