pengantar
Alice adalah bahasa 2-d oleh Martin Ender yang memiliki dua mode eksekusi yang berbeda, kardinal dan ordinal . Ketika instruksi pointer melewati melalui cermin (baik /
atau \
), itu beralih dari satu mode ke mode yang lain.
Dalam tantangan ini kita akan fokus pada mode ordinal , di mana perintah beroperasi pada string dan penunjuk instruksi bergerak secara diagonal, memantul ke tepi kode.
Program sederhana yang hanya beroperasi dalam mode ordinal dapat ditulis dalam gaya yang cukup ringkas, seperti dalam contoh berikut:
/fbd/
@aec\
Berikut IP dimulai dalam mode kardinal dari sel pertama akan timur, melewati cermin pertama dan mulai bergerak diagonal dan memantul, mengeksekusi perintah a
, b
dan c
. Ini kemudian bertemu cermin utara-timur yang membuatnya pergi ke selatan ke arah cermin lain dan kemudian mulai memantul kembali ke arah barat, menghadapi perintah d
, e
, f
, dan akhirnya @
, yang berakhir program.
Struktur semacam ini cukup kompak, tetapi tidak mudah untuk menulis dan memelihara (menambahkan satu perintah mungkin memaksa kita untuk menyusun ulang sebagian besar kode!), Jadi saya ingin Anda membantu saya dengan pemformatan.
Tugas
Diberikan urutan perintah, di mana setiap perintah adalah karakter ASCII tunggal yang dapat dicetak, menyusun ulang mereka pada dua baris sehingga bagian pertama dari urutan dapat dibaca mulai dari karakter pertama dari baris kedua dan kemudian bergerak selalu secara diagonal ke kanan, sementara bagian kedua dapat dibaca dengan mengambil karakter yang tersisa dari kanan ke kiri. Jangan khawatir tentang cermin dan simbol terminasi, saya akan menambahkannya sendiri.
Jadi, misalnya, diberi input abcdef
Anda harus menampilkan
fbd
aec
Jika inputnya panjangnya aneh, Anda harus menambahkan spasi tunggal (yang merupakan noop di Alice) di mana saja, selama urutan perintah yang dijumpai tetap sama. Anda juga dapat memilih untuk menghasilkan dua garis yang berbeda panjangnya oleh satu karakter, dalam hal ini yang lebih pendek dianggap memiliki satu ruang di ujungnya.
Aturan
Ini adalah kode-golf , jawaban terpendek, dalam byte, menang!
- Anda dapat input / output melalui salah satu metode input / output default
- Input terdiri dari satu baris karakter ASCII yang dapat dicetak
- Baris baru satu trailing diizinkan dalam output
- Beberapa output dari program Anda mungkin tidak memiliki perilaku yang sepenuhnya benar ketika dijalankan sebagai program Alice (misalnya jika ruang padding dimasukkan ke dalam string literal). Anda tidak perlu khawatir dengan situasi ini
- Celah standar dilarang
Uji kasus
--Input
abcdef
--Output
fbd
aec
--Input
123
--Output
2
13
OR
31
2
OR
3
12
OR
32
1
--Input
O
--Output
O
OR
O
--Input
"Hello, World!"o
--Output
oH!lloo
""edlr,W
--Input
i.szR.szno
--Output
o.zz.
inssR
--Input
" ^^} .~[}.~~[}{~~{}[^^^^.""!}"r.h~;a*y'~i.*So
--Output
o *^i}'.*[;.h~r}}~"{.[^
"S .^~ y~a}~~.["{!~"}^^^
(Odd length, your solution may be different)
Jelly ,
2322 byte-1 byte berkat Leo (kiri bawah mungkin padding)
Program lengkap mencetak hasilnya (tautan monadik mengembalikan daftar daftar karakter).
Cobalah online! atau lihat test suite .
Bagaimana?
sumber
JavaScript (ES6), 104 byte
Bekerja dengan meniru jalur eksekusi dan mengisi perintah saat berjalan.
sumber
1&~i
mencapai zig-zag vertikal, sedangkani+i>l?l-i:i
mencapai cermin di tengah jalan. Setelah semua perintah dimasukkan ke posisi eksekusi yang diinginkan, array kemudian dikumpulkan bersama untuk menghasilkan hasil yang diinginkan.