Akhiri tab versus perang antariksa
Jadi, ada banyak perdebatan apakah akan menggunakan tab atau spasi untuk indentasi / memformat kode. Dapatkah Anda membantu universitas menyelesaikan perselisihan, dengan pergi ke metode pemformatan unik yang sangat gila .
Tugas Anda adalah menulis program atau fungsi lengkap yang memperluas semua tab menjadi empat ruang. Dan kemudian mengganti serangkaian n spasi terkemuka dengan "/ (n - dua bintang di sini) /". Anda akan menerima input lebih dari beberapa baris dalam format apa pun (array string tunggal string untuk setiap baris baru. Array kolom dll.)
Masukan sampel dicuri tanpa malu-malu . Perhatikan bahwa sejak tab diperluas secara otomatis ke empat spasi di SE, saya mewakilinya sebagai karakter "^", tetapi Anda juga harus menangani tab (codepoint 0x09). Semua karakter "^" mewakili tabulasi.
Calculate the value 256 and test if it's zero
If the interpreter errors on overflow this is where it'll happen
++++++++[>++++++++<-]>[<++++>-]
+<[>-<
Not zero so multiply by 256 again to get 65536
[>++++<-]>[<++++++++>-]<[>++++++++<-]
+>[>
# Print "32"
++++++++++[>+++++<-]>+.-.[-]<
<[-]<->] <[>>
# Print "16"
+++++++[>+++++++<-]>.+++++.[-]<
<<-]] >[>
# Print "8"
++++++++[>+++++++<-]>.[-]<
<-]<
# Print " bit cells\n"
+++++++++++[>+++>+++++++++>+++++++++>+<<<<-]>-.>-.+++++++.+++++++++++.<.
>>.++.+++++++..<-.>>-
Clean up used cells.
[[-]<]l
^this is preceded by a tab
^^two tabs
^^^three tabs etcetera!
Output sampel
Calculate the value 256 and test if it's zero
If the interpreter errors on overflow this is where it'll happen
++++++++[>++++++++<-]>[<++++>-]
+<[>-<
/**/Not zero so multiply by 256 again to get 65536
/**/[>++++<-]>[<++++++++>-]<[>++++++++<-]
/**/+>[>
/******/# Print "32"
/******/++++++++++[>+++++<-]>+.-.[-]<
/**/<[-]<->] <[>>
/******/# Print "16"
/******/+++++++[>+++++++<-]>.+++++.[-]<
<<-]] >[>
/**/# Print "8"
/**/++++++++[>+++++++<-]>.[-]<
<-]<
# Print " bit cells\n"
+++++++++++[>+++>+++++++++>+++++++++>+<<<<-]>-.>-.+++++++.+++++++++++.<.
>>.++.+++++++..<-.>>-
Clean up used cells.
[[-]<]l
/**/this is preceded by a tab
/******/two tabs
/**********/three tabs etcetera!
Karena universitas membutuhkan ruang untuk mengunduh Vim dan Emacs, Anda hanya memiliki sedikit penyimpanan untuk kode Anda. Karenanya ini adalah kode-golf dan kode terpendek menang. Anda dapat mengasumsikan bahwa input terbentuk dengan baik dan garis dengan kurang dari empat spasi (setelah penggantian tab) dapat mengakibatkan perilaku yang tidak terdefinisi.
Penolakan
Strategi pemformatan "luar biasa" ini berasal dari Geobits, dan direproduksi dengan izinnya. Tidak ada programmer yang terluka selama produksi tantangan ini.
/*
, atau dapatkah itu dianggap bukan "masukan yang dibentuk dengan baik"? File sumber C ++ akan menjadi tes yang lebih baik, karena komentar multiline-nya /* */
mungkin akan memecahkan beberapa jawaban yang menggantikan pertama dan terakhir dari spasi utama dengan /
, dan kemudian melanjutkan untuk mengisi spasi dengan *
.
/* */
kode C ++ yang sama , tetapi kali ini di awal baris. Menurut spesifikasi Anda itu harus dibiarkan apa adanya. Di sini jebakannya, dan sudah menemukan jawaban yang salah, bahwa regex seperti say /\** /
digunakan untuk mengisi ruang-ruang antara // dengan tanda bintang akan mengubah garis menjadi /***/
. Saya telah melihat konversi ini juga /*//*/
. Saya menganggap keduanya salah.