Perang suci telah diperebutkan ruang vs tab. (Dan tentu saja ruang, menjadi superior secara objektif, menang.) - Alex A.
S ome PEO p le masih menolak untuk sebuah ccept yang WHI c h adalah cl e Arly s upreme. Anda baru saja menerima sebuah file dengan menggunakan incor ulang ct, b iklan, dan inf e bentuk rior dari WHI t espace, dan sekarang t dia cont e nts dari file r e tercemar dan hancur.
Anda memutuskan untuk menunjukkan kepada orang yang mengirim file kepada Anda betapa salahnya mereka — dengan kekerasan.
Deskripsi
Seperti judulnya, tantangan Anda adalah mengambil file yang berisi satu tab atau lebih:
this is an evil tab onoes
dan dengan kejam menghancurkannya menjadi beberapa bagian:
this is an evil tab
o
n
o
e
s
Perhatikan bahwa perangkat lunak Stack Exchange mengubah tab literal menjadi empat spasi (karena benar), sehingga tab dalam pos ini akan ditampilkan sebagai empat spasi. Input untuk program Anda, bagaimanapun, akan berisi tab yang sebenarnya.
Tantangan
Solusinya harus mengambil string tunggal sebagai input, yang mungkin mengandung ASCII yang dapat dicetak, baris baru, dan tab. Akan selalu ada setidaknya satu tab di input.
Outputnya harus string yang sama, dengan aturan berikut diterapkan:
Mulai kursor pada koordinat (0,0) dan dengan arah kanan. Koordinatnya adalah (kolom, baris), indeks-nol, dan arahnya adalah ke mana Anda harus memindahkan kursor setelah mencetak karakter.
Untuk setiap karakter dalam string:
Jika itu adalah baris baru, pindah ke koordinat (0, n), di mana n adalah jumlah baris baru dalam string sejauh ini (termasuk yang ini), dan reset arah ke kanan.
Jika itu tab, output dua spasi, putar arah kursor 90 derajat searah jarum jam , dan output dua spasi lagi, secara efektif "memecah" tab menjadi dua. Berikut adalah contoh visual, di mana tab direpresentasikan sebagai
--->
dan spasi sebagai·
:foo--->bar--->baz
menjadi
foo··· · b a r · · zab··
Jika tidak, cukup keluarkan karakter pada kursor dan gerakkan kursor satu langkah ke arah saat ini.
Karena Anda membaca string dari awal hingga akhir, ada kemungkinan Anda harus menulis "di atas" karakter yang ada — ini tidak apa-apa. Misalnya input
foo--->bar
spaces are superior
harus menghasilkan keluaran dari
foo
b
spaces are superior
r
Anda dapat memilih apakah "tab rusak" harus menimpa karakter lain — maksud awalnya adalah tidak ada, tetapi speknya ambigu, jadi ini keputusan Anda.
Selanjutnya, setelah menerapkan aturan-aturan ini, Anda juga bisa
menambah atau menghapus spasi tambahan sebanyak yang Anda inginkan.
tambahkan maksimum satu baris baru.
Masukan tidak akan pernah mengandung spasi tambahan; itu juga tidak akan mengandung baris baru atau akhir. Anda juga dapat selalu berasumsi bahwa Anda tidak akan pernah perlu menulis ke kolom atau baris kurang dari 0 (yaitu dari layar).
Kasus cobaan
Tab pada test case ini diwakili --->
karena jika tidak SE akan melahapnya.
Memasukkan:
Test case. Here's a tab--->there's a tab--->everywhere a tab--->tab--->this is some more text
blah
blah
blah blah blah blah blah blah--->blaah--->blaah--->blah--->blaaaaah--->blah--->blah--->blah--->blah--->blah
Keluaran:
Test case. Here's a tab
blah
blah t
blah blah blah blah blah blah
blaablah
r b
e l b
h 'h a l
a sa a a
l l h h
this is some mobe tbxt
haalhalb
b a
a b
t
bat a erehwyreve
Animasi mewah:
Aturan
- Ini adalah kode-golf , jadi kode terpendek dalam byte akan menang!
(0,0)
maksud Anda, kami perlu menghapus konsol terlebih dahulu, atau Anda hanya maksudkan posisi default kursor dengan itu?