Ikan tercinta yang berenang melalui kode > <> (bahasa pemrograman esoterik) telah dikeluarkan dari lingkungan alaminya. Perubahan ini telah membuatnya tidak mampu bergerak seperti biasanya: apa yang dulunya adalah gerakan toroidal telah dibatasi pada gerakan kiri-ke-kanan yang sederhana. Tetapi program <> masih ditulis seolah-olah ikan mampu bergerak melalui mereka. Adalah tugas Anda, programmer terkasih, untuk menulis sebuah program untuk membuat linierisasi program>>. Dan lakukan dalam byte sesedikit mungkin; ikan tidak memiliki ingatan yang sangat besar.
Gerakan di> <>
Dalam> <>, gerakan adalah toroidal dan satu karakter pada satu waktu. Ini berarti bahwa ikan (penunjuk) dapat "membungkus" dari ujung garis kembali ke awal. Di> <>, ikan juga mampu bergerak dari atas ke bawah, dari bawah ke atas, dan dari kanan ke kiri, berbeda dengan cara kebanyakan penunjuk bergerak. Jadi pola pergerakan ini akan valid:
>>>^ >>>v
>>>^ v
dan itu akan berakhir pada loop tak terbatas (looping kembali ke garis atas setelah melewati bagian bawah tanpa batas).
Ikan bergerak dalam kisi panjang sama dengan max (panjang baris) dan tinggi sama dengan jumlah baris.
Bagaimana Anda mengetahui ke arah mana ikan bergerak? Perintah-perintah ini mengubah vektor arah gerakan (mis. (-1,0)
Berarti kanan-ke-kiri):
Command | Direction Change
---------------------------
> | (1,0) (default)
< | (-1,0)
^ | (0,1)
v | (0,-1)
/ | (x,y) -> (y,x)
\ | (x,y) -> (-y,-x)
| | (x,y) -> (-x,y)
_ | (x,y) -> (x,-y)
# | (x,y) -> (-x,-y)
; | (0,0)
Sebagaimana dicatat, ikan mulai bergerak dari kiri ke kanan, yaitu dengan vektor arah (1,0)
. Ikan mulai menguraikan perintah mulai dengan perintah pertama yang dilihatnya dan mengubah arahnya jika perintah cocok dengan salah satu pengubah arah yang disebutkan di atas.
Ikan berhenti bergerak ketika melihat a ;
dan mengakhiri program.
Memasukkan
Input akan menjadi program yang valid (misalnya tidak berulang) yang diberikan melalui STDIN. Anda juga dapat membaca file jika Anda mau. Garis-garis dari setiap program tidak akan harus memiliki panjang yang sama.
Input diberikan sebagai string, dengan baris baru memisahkan setiap baris dalam program.
Program tidak akan berulang, yang juga berarti mereka akan selalu berakhir dengan a ;
.
Keluaran
Keluaran akan menjadi program yang dilinearisasi. Artinya, Anda harus mengembalikan semua karakter (termasuk pengubah arah) yang akan dilihat ikan jika menjalankan program "secara normal." Ini semua karakter dalam jalurnya ke;
.
Jika input memiliki garis dengan panjang yang tidak sama dan ikan pada akhirnya bergerak sepanjang garis yang lebih pendek dari panjang garis terpanjang, Anda harus memperlakukan itu seolah-olah ikan bergerak di atas ruang (lihat kasus uji).
Mereka yang akrab dengan> <> akan tahu bahwa pengubah arah bukan satu-satunya cara untuk melakukan gerakan di dalamnya, tetapi demi kesederhanaan memperlakukan input seolah-olah mereka adalah satu - satunya cara untuk mempengaruhi gerakan.
Aturan
- Celah standar berlaku
- Anda dapat menulis program atau fungsi lengkap
- Input diberikan melalui STDIN atau file sebagai string berisi baris program yang dipisahkan oleh baris baru (
\n
)- Anda dapat mengambil input secara berbeda, sesuai alasan (jangan ragu untuk bertanya kepada saya apakah Anda memiliki jenis input tertentu dalam pikiran). Anda mungkin tidak mengisi input dengan spasi sehingga panjang garis cocok.
- Merujuk ini meta posting tentang masukan fleksibel. Seperti halnya postingan, konsensus umum harus sefleksibel mungkin dengan alasan.
- Output adalah string tunggal melalui STDOUT atau dikembalikan oleh fungsi (tergantung pada apa yang Anda pilih untuk dilakukan, lihat Aturan 2)
Uji Kasus
v >v
>abcv//;
gfed<^ih
v>abcv<defghi^//>v;
v >v
>abcv//;
gfed<^
v>abcv<defg ^//>v;
abcdef;
abcdef;
abcd|;
abcd|dcba;
abcd#;
abcd#dcba;
abcd\;
_
abcd\_\dcba;
^;
>abcde/
^jihg<
^ >abcde/ <ghij^a;
;
;