Pengaturan
Pertimbangkan kotak berbentuk aneh yang berisi 29 sel bernomor seperti yang ditunjukkan pada Gambar. 1 di bawah ini.
Di dalam kotak 2D ini ada dua spesies hewan berbentuk persegi: shubbles dan smoles. Gbr. 1 (a) menunjukkan beberapa shubble berwarna biru, dan beberapa smoles berwarna merah. Setiap makhluk menempati tepat satu sel kotak. Kotak mungkin berisi antara 0 dan 26 shubble, tetapi akan selalu mengandung dua smoles.
Menjadi sasaran gravitasi, shubble dan smoles duduk di bagian bawah kotak, menumpuk di atas apa pun di bawahnya. Kedua spesies ini sangat malas dan tetap tidak bergerak.
Kotak itu juga berisi kotak, yang digambarkan sebagai kotak hitam, yang menempati tepat satu sel kotak. Stot tidak tunduk pada gravitasi.
Kotak memiliki satu lubang yang terletak di bagian bawah sel 28, seperti yang digambarkan dalam gambar.
Untuk mewakili konfigurasi shubble, smoles, dan stot dalam kotak secara tekstual, kami menggunakan string 29-karakter, satu karakter per sel grid, dalam urutan yang disebutkan, dengan .
mewakili sel kosong, o
mewakili shubble, x
mewakili smole, dan @
mewakili stot. Sebagai contoh, konfigurasi Gambar. 1 (a) diwakili oleh string [email protected]...
.
Manipulasi
Kotak dapat diputar dengan kelipatan 90 °. Saat kotak diputar, shubbles dan smoles tetap diam di dalam sel kisi mereka. Segera setelah rotasi selesai, mereka jatuh langsung ke bawah sampai saya ) mereka diblokir oleh dinding di bawah, ii ) mereka diblokir oleh shubble, smole, atau stot di bawah, atau iii ) mereka jatuh melalui lubang di sel 28 dan keluar dari kotak. Stot tidak jatuh; tetap di selnya saat ini, bahkan jika makhluk hidup di atasnya.
Kotak tidak dapat diputar lagi sampai makhluk selesai jatuh dan telah mencapai konfigurasi stabil baru.
Secara teks, rotasi kotak dilambangkan dengan +
untuk rotasi searah jarum jam 90 °, |
untuk rotasi 180 °, dan -
untuk rotasi berlawanan arah jarum jam 90 °.
Selain itu, stot dapat dipindahkan dalam empat arah kompas dengan penambahan satu sel kisi. Langkah mungkin tidak: i ) menyebabkan tabrakan antara stot dan makhluk (yaitu sel grid tujuan harus kosong), ii ) menyebabkan tabrakan antara stot dan dinding, atau iii ) menyebabkan stot keluar dari kotak melalui lubang di sel 28.
Juga, stot mungkin tidak bergerak jika ada makhluk yang bersandar di atasnya (sehubungan dengan gravitasi saat ini).
Secara teks, gerakan stot dilambangkan dengan <
untuk kiri, >
kanan, ^
atas, dan v
bawah. Stot move selalu ditentukan sehubungan dengan frame "standar" (tidak diputar) yang digambarkan dalam gambar. Artinya, jika stot berada di sel 10, bergerak ^
akan selalu memindahkannya ke sel 5, dan bergerak >
akan selalu memindahkannya ke sel 11. Orientasi kotak tidak mempengaruhi arah gerakan.
Urutan manipulasi dikodekan menggunakan string karakter kiri-ke-kanan. Sebagai contoh, string +<<^-
menunjukkan kotak diputar searah jarum jam 90 °, kemudian stot dipindahkan ke kiri dua kali dan ke atas sekali (sehubungan dengan bingkai standar), maka kotak diputar 90 ° berlawanan arah jarum jam kembali ke orientasi aslinya.
Tantangan
Untuk alasan yang sangat baik (yang tidak bisa saya ungkapkan), kami ingin melepaskan semua shubble dari kotak tanpa mengeluarkan satu pun smole. Untuk mencapai ini, kita dapat menggunakan manipulasi yang dijelaskan di atas.
Sebelum memecahkan masalah ini, penting bagi kita untuk mensimulasikan bagaimana berbagai manipulasi kita akan mempengaruhi isi kotak, yang merupakan fokus dari tantangan ini.
Anda harus menulis sebuah program yang menerima dua argumen dari stdin
(atau yang setara):
- string yang menggambarkan kondisi awal kotak
- serangkaian manipulasi
Anda dapat mengasumsikan bahwa kedua argumen secara sintaksis valid, bahwa kotak dimulai dalam orientasi standar, dan bahwa keadaan awal kotak stabil dan sah.
Program harus menghasilkan ke stdout
(atau setara) baik:
( kasus 1 ) keadaan akhir kotak, dinyatakan sebagai string, jika urutan gerakan legal (tidak melanggar aturan langkah stot) dan tidak menyebabkan smoles keluar dari kotak. Orientasi akhir kotak tidak penting.
( kasus 2 ) tanda seru tunggal
!
,, jika urutan gerakan ilegal atau menyebabkan smoles keluar dari kotak
Mencetak gol
Program yang menang adalah program terpendek berdasarkan jumlah byte , tergantung pada pengganda bonus yang sangat menguntungkan:
klaim pengganda 0,65 jika alih-alih mencetak output yang dikodekan untuk kasus 1, program menghasilkan gambar ASCII dari kotak dalam keadaan akhir dan orientasi, menggunakan karakter spesifik untuk shubble, smoles, stots, dan sel kosong, dan menempatkan
*
di sel tepat di luar lubang di sel 28. Ruang kosong yang mengarah dan tertinggal diabaikan.Misalnya, jika Gambar. 1 (a) diputar 90 °, hasilnya akan menjadi
. . ..... .o... xo.@. *ooo.. x .
klaim pengganda 0,22 jika alih-alih mencetak keluaran yang dikodekan untuk kasus 1, program menghasilkan file gambar atau menampilkan jendela GUI dengan gambar kotak dalam keadaan akhir dan orientasi. Gambar harus dalam gaya Gambar 1 (a), menunjukkan sel-sel kotak, dinding, dan makhluk / stot menggunakan kotak berwarna.
klaim pengganda 0,15 jika alih-alih mencetak keluaran yang disandikan untuk kasus 1, program ini menghasilkan jendela GUI atau GUI animasi yang menunjukkan semua keadaan perantara dalam simulasi pada interval 1 detik. Aturan gambar yang sama dengan untuk pengali 0,22 berlaku. Kerangka pertama animasi harus menggambarkan keadaan awal simulasi. Selain itu, animasi harus menunjukkan status perantara "tersembunyi", yaitu
shubbles / smoles jatuh ke konfigurasi stabil oleh satu sel per bingkai animasi setelah rotasi
kondisi kotak terproteksi 90 ° tengah dalam rotasi 180 °
klaim pengganda 0,12 jika program menghasilkan jendela animasi .gif atau GUI animasi dengan gaya di atas, tetapi berjalan pada 20 fps dan pertunjukan
animasi kotak yang halus dan terus menerus berputar
animasi yang mulus dan terus menerus dari stot yang bergerak, dan shubbles / smoles jatuh ke dalam konfigurasi yang stabil
Shubble yang jatuh melalui lubang di sel 28 harus ditunjukkan keluar dari kotak, dan harus menghilang sekali di luar. Anda dapat memilih waktu Anda sendiri untuk animasi selama tidak lebih dari 1 manipulasi / detik dilakukan.
Skor total adalah floor( base score * multiplier )
. Hanya satu pengali yang dapat diklaim.
Bagaimanapun, ini adalah dunia yang berbau harum. ;)
Jawaban:
MATLAB, yang belum disunat * 0.15
Akan lebih bagus jika seseorang bisa menebak apakah ini berfungsi dengan benar.
Contoh hasil akhir untuk beberapa gerakan acak:
sumber