Beberapa orang bersikeras menggunakan ruang untuk tabulasi dan indentasi.
Untuk tabulasi, itu tidak dapat disangkal salah. Menurut definisi, tabulator harus digunakan untuk tabulasi.
Bahkan untuk lekukan, tabulator secara obyektif lebih unggul:
Ada konsensus yang jelas di komunitas Stack Exchange.
Menggunakan satu ruang untuk lekukan secara visual tidak menyenangkan; menggunakan lebih dari satu itu boros.
Seperti yang diketahui oleh semua pembuat kode
golf, program harus sesingkat mungkin. Tidak hanya menghemat ruang hard disk, waktu kompilasi juga berkurang jika byte lebih sedikit harus diproses.Dengan menyesuaikan lebar tab 1 , file yang sama terlihat berbeda di setiap komputer, sehingga semua orang dapat menggunakan lebar indentasi favoritnya tanpa mengubah file yang sebenarnya.
Semua editor teks yang baik menggunakan tabulator secara default (dan definisi).
Saya berkata begitu dan saya selalu benar!
Sayangnya, tidak semua orang mendengarkan alasan. Seseorang telah mengirimi Anda file yang melakukan kesalahan pada TM dan Anda harus memperbaikinya. Anda bisa melakukannya secara manual, tetapi akan ada yang lain.
Sudah cukup buruk bahwa spacer membuang-buang waktu berharga Anda, jadi Anda memutuskan untuk menulis program sesingkat mungkin untuk mengatasi masalah tersebut.
Tugas
Tulis program atau fungsi yang melakukan hal berikut:
Baca satu string baik dari STDIN atau sebagai baris perintah atau argumen fungsi.
Identifikasi semua lokasi di mana ruang telah digunakan untuk tabulasi atau indentasi.
Jalankan spasi adalah lekukan jika terjadi di awal garis.
Jalankan dua ruang atau lebih adalah tabulasi jika bukan lekukan.
Sebuah tunggal ruang yang tidak lekukan mungkin atau mungkin tidak telah digunakan untuk tabulasi. Seperti yang diharapkan ketika Anda menggunakan karakter yang sama untuk tujuan yang berbeda, tidak ada cara mudah untuk mengatakannya. Karena itu, kami akan mengatakan bahwa ruang tersebut telah digunakan untuk kebingungan .
Tentukan lebar tab 1 yang paling panjang memungkinkan semua ruang yang digunakan untuk tabulasi atau lekukan dapat diganti dengan tabulator, tanpa mengubah tampilan file.
Jika input tidak mengandung tabulasi, atau lekukan, tidak mungkin untuk menentukan lebar tab. Dalam hal ini, lewati langkah selanjutnya.
Dengan menggunakan lebar tab yang ditentukan sebelumnya, ganti semua ruang yang digunakan untuk tabulasi atau indentasi dengan tabulator.
Juga, bila memungkinkan tanpa mengubah tampilan file, ganti semua ruang yang digunakan untuk kebingungan dengan tabulator. (Jika ragu, singkirkan ruang.)
Kembalikan string yang dimodifikasi dari fungsi Anda atau cetak ke STDOUT.
Contohnya
Semua ruang
a bc def ghij
adalah tabulasi.
Setiap run of space mengisi string sebelumnya dari karakter non-space hingga lebar 5, sehingga lebar tab yang benar adalah 5 dan output yang benar 2 adalah
a--->bc-->def->ghij
Dua ruang pertama dari
ab cde f ghi jk lm
adalah tabulasi, yang lain kebingungan.
Lebar tab yang benar adalah 4, jadi output yang benar adalah 2
ab->cde>f ghi>jk lm
Ruang terakhir tetap tidak tersentuh, karena akan diberikan sebagai dua ruang jika diganti oleh tabulator:
ab->cde>f ghi>jk->lm
Semua kecuali satu ruang
int main( ) { puts("TABS!"); }
adalah lekukan, yang lainnya adalah kebingungan.
Level indentasi adalah 0, 4 dan 8 spasi, sehingga lebar tab yang benar adalah 4 dan output yang benar adalah 2
int --->main( ) --->{ --->--->puts("TABS!"); --->}
Ruang dalam
( )
akan dirender sebagai tiga ruang jika diganti dengan tabulator, sehingga tetap tidak tersentuh.Dua ruang pertama dari
x yz w
lekukan, yang lain kebingungan.
Lebar tab yang tepat adalah 2 dan output yang benar 2 adalah
->x>yz w
Ruang terakhir akan dirender sebagai dua ruang jika diganti dengan tabulator, sehingga tetap tidak tersentuh.
Dua ruang pertama dari
xy zw
adalah lekukan, tiga lainnya adalah tabulasi.
Hanya lebar tab 1 yang memungkinkan untuk menghilangkan semua spasi, sehingga output 2 yang benar adalah
>>xy>>>zw
Semua ruang
a b c d
kebingungan.
Tidak ada terpanjang mungkin lebar tab, sehingga benar keluaran 2 adalah
a b c d
Aturan tambahan
Masukan akan seluruhnya terdiri dari karakter ASCII yang dapat dicetak dan umpan garis.
Anda dapat berasumsi bahwa terdapat paling banyak 100 baris teks dan paling banyak 100 karakter per baris.
Jika Anda memilih STDOUT untuk output, Anda dapat mencetak satu line linefeed tunggal.
Aturan standar kode-golf berlaku.
1 Lebar tab didefinisikan sebagai jarak karakter antara dua penghentian tab berurutan , menggunakan font monospasi.
2 Panah seni ASCII mewakili tabulator Stack Exchange menolak untuk me-render dengan benar, di mana saya telah mengirimkan laporan bug. Output aktual harus mengandung tabulator aktual.
programs should be as short as possible
Saya percaya saya telah menemukan saudara lelaki Arthur Whitney yang telah lama hilang !!