Tulis skrip yang berfungsi dengan baik ketika baris kosong hadir dalam alur logika program, tetapi hancurkan atau menyebabkan perilaku yang tidak terduga saat baris tersebut dihapus.
Hindari celah standar dan jawaban bodoh. Program Anda harus melakukan sesuatu yang "berguna," bahkan jika yang dilakukannya hanyalah menambah beberapa bilangan bulat.
Menghapus baris kosong dari string multiline tidak masuk hitungan, kecuali jika output yang diharapkan dari string multiline itu seharusnya tidak berubah secara teknis (yaitu: jika Anda menghapus semua baris kosong yang cocok ^$
).
Kebodohan ruang kosong juga tidak diizinkan; jangan lakukan hal-hal aneh dengan carriage return, tab, spasi, dll.
popularity-contest
underhanded
Naftuli Kay
sumber
sumber
Jawaban:
Javascript
Membuka sembulan peringatan dengan "Halo, Dunia!" jika ada baris kosong, jika tidak ada peringatan "0".
Demo
Penjelasan:
arguments.callee
adalah referensi ke fungsi anonim yang dijalankan sendiri.Menambahkan array kosong (
[]
) melemparkan fungsi ke string, yang memberi Anda kode sumbernya.indexOf
kembali-1
jika string tidak ditemukan.Melakukan operasi bitwise not (
~
) menghasilkan-1
diubah menjadi0
, yang merupakan nilai falsey.sumber
arguments.callee
berisi sumber fungsi.arguments.callee
.arguments.callee
. Bahkan membuatnya lebih pendek.C
Program 8 bola ajaib ini akan tetap bekerja tanpa garis kosong, tetapi akan sedikit lebih menentukan - tidak ada jawaban netral yang akan muncul di output.
Penjelasan
sumber
Befunge-93
Program befunge pertama saya :)
Bunyinya dua angka dari input dan mencetak jumlahnya. Jika Anda menghapus baris kosong, itu tidak akan mencetak apa pun.
Penjelasan:
v
menetapkan arah ke bawah untuk mengeksekusi kode&
membaca integer+
menambahkan angka bersama-sama#
melompati perintah selanjutnya.
mencetak integer dari tumpukan@
berakhir programSeperti yang tertulis,
#
lompati baris kosong dan ikuti.
. Beli ketika Anda menghapus garis kosong,.
dilewati.Tampaknya ada juru bahasa yang bagus di http://befunge.aurlien.net/
sumber
Ruby / Shell
Berfungsi dengan baik jika baris baru di atas, jika tidak, baris komentar pertama ditafsirkan oleh shell sebagai shebang cacat.
sumber
ruby youranswer.rb
, itu tidak akan mencari shebang karena sudah dijalankan di interpreter ruby, tetapi jika Anda menjalankannya sebagai./youranswer.rb
tidak akan berjalan sama sekali karena tidak ada shebang ..ruby youranswer.rb
, yang dapat berguna untuk mengatur switch baris perintah yang diperlukan dalam file. Jadi tanpa baris baru yang saya dapatkanruby: no Ruby script found in input (LoadError)
Scala
Jika Anda menghapus garis kosong, tidak ada output yang akan dicetak. Yang terbaik, karena tumpukan Anda akan meluap jika Anda benar-benar menelepon
IntWrapper
.sumber
GolfScript
Menghitung GCD dari dua bilangan bulat bukan nol. Menghapus garis kosong akan merusak program.
Cobalah online.
Bagaimana itu bekerja
Ini adalah implementasi GolfScript dari algoritma Euclidean:
Hanya ada satu masalah kecil:
sumber
#
,{
dan}
tidak dapat digunakan sebagai nama variabel, karena mereka adalah bagian dari sintaks. Setiap token lainnya baik-baik saja, termasuk string..:-1
menyimpan input ke-1
, bukan tanda minus itu sendiri? Hmm ...Sintaks Templat MediaWiki
Tentukan Templat: Foo as
Di halaman lain,
sumber
LaTeX (backref)
Kode LaTeX berikut menggunakan kutipan dan kutipan berisi daftar halaman, di mana entri tersebut dikutip. Ini dia halaman pertama. Paket
hyperref
juga menambahkan tautan PDF, referensi halaman belakang berwarna merah, tautan kutipan berwarna hijau.Tetapi LaTeX tidak memerlukan baris kosong, baris kosong terlihat berlebihan dan contohnya masih akan bekerja tanpanya
hyperref
dan baris kosong:Namun tautan dan referensi kembali hilang, jadi kami masukkan kembali:
Tetapi sekarang contohnya rusak dan tidak dapat dikompilasi lagi:
Apa yang terjadi? Paket
hyperref
(atau paket yang lebih tepatbackref
, yang diambil olehhyperref
) ingin mendapatkan di akhir entri bibliografi untuk menambahkan daftar referensi kembali. Tetapi sintaks di LaTeX hanya menyediakan awal entri dengan\bibitem
, akhirnya bisa di mana saja. Dalam paket darurat inibackref
telah ditambahkan batasan yang\bibitem
harus mengakhiri entri dengan garis kosong. Kemudian paket tersebut dapat didefinisikan ulang\bibitem
untuk menempatkan referensi kembali di akhir entri.Karena baris kosong tidak ada, TeX terus mencarinya, tetapi malah menemukan akhir file dan mengeluarkan pesan kesalahan.
sumber
C (semi-dikaburkan)
Program kecil ini mengambil nomor pada baris perintah dan menghitung faktorialnya. Namun, ini juga berisi fungsionalitas mutakhir AI untuk verifikasi runtime yang diikuti oleh standar pengkodean perusahaan, termasuk penggunaan spasi kosong dan baris kosong yang benar. Menghapus baris kosong akan memicu algoritme untuk menolak program yang tidak terpelihara dengan baik.
Tidak ada garis lanjutan atau trigraph di mana pun. Saya percaya itu adalah ANSI C99 yang valid.
Karena matematika canggih yang terlibat, jika Anda kompilasi dengan
gcc
, ingatlah untuk menggunakan-lm
.Spoiler
sumber
tcc -run
vfry
tidak diperluas dalam definisi fungsi yang benar-benar membuat saya bingung.C
Program ini berfungsi seperti yang diharapkan (seperti yang dijelaskan dalam komentar) kecuali baris kosong sebelumnya
foo = 5;
dihapus.Sayangnya, saya mengalami kesalahan hampir persis seperti ini dalam kode produksi sekali.
Contoh ini menggunakan
do { ... } while (0)
idiom untuk membuat pernyataan multiline dalam makro (lihat https://stackoverflow.com/questions/257418/do-while-0-what-is-it-good-for ). Ini juga menggunakan karakter backslash untuk menyebarkan#define
lebih dari beberapa baris, mudah berbaris jauh dari pandangan. Namun, itu juga melakukan dua hal yang salah:while (0)
, sedangkan idiom biasanya menghilangkan ini#define
Dengan ini di tempat, menghapus baris kosong sebelum
foo = 5;
penyebab yang tugas akan dieksekusi setelah ituprintf
, tetapi juga setelah setiap doa dariFROB
makro. Akibatnya, output setelah menghapus baris kosong adalah:sumber
C / C ++
Mengembalikan kesuksesan dan dapat digunakan sebagai implementasi untuk true . Jika baris kosong dihapus, Anda dapat menggunakannya sebagai implementasi untuk false .
sumber
PowerShell
Fungsi ini akan menambah dua angka.
Menghapus baris kosong akan menyebabkan fungsi gagal dengan:
Unexpected token '$b' in expression or statement.
Penjelasan
sumber
TeX
Tanpa baris kosong, "halo" tidak akan dicetak.
Penjelasan
TeX memperlakukan baris kosong sebagai istirahat paragraf, dan
\everypar
dieksekusi pada awal paragraf baru.sumber
Jawa
sumber
Math.pow
?Math.pow
dan mencetak hasilnya juga melakukan sesuatu bukan?Perl 5
Kode ini dicetak
Hello, World!
. Menghapus baris kosong malah memberikan kesalahan sintaksis.Penjelasan:
sumber
Batch
Kode ini akan menampilkan
Hello
dan di baris berikutnyaWorld
. Ketika salah satu atau kedua baris kosong dihapus, tidak menghasilkan apa-apa sama sekali.Ada penjelasan di sini .
sumber
Rubi
Penghapusan baris pertama akan menyebabkan kesalahan:
sumber
Python
Tidak tahu apakah ini termasuk dalam celah standar, saya melihat daftar itu dan tidak melihat ini.
Menjalankan ini secara teratur kembali
Menjalankannya tanpa baris kosong pada baris 4, yaitu seperti di bawah ini:
tidak mengembalikan apa pun.
sumber
Python 2.x
Program ini menghasilkan karakter kelima dari string yang dimasukkan.
Ini sama sekali tidak tersembunyi. Jika Anda menghapus baris kosong, itu memberi karakter keempat dan keenam jika Anda menambahkan satu.
sumber
Tcl
Fungsi yang menambahkan dua angka (dan memeriksa apakah baris baru telah dihapus):
Tidak ada yang disembunyikan di sini, ia melakukan apa yang dikatakannya, jadi saya tidak membuat spoilerisasi penjelasannya. Fungsinya
info
adalah pisau introspeksi tentara swiss (apa bahasa lain menyebut refleksi).info body
mengembalikan kode sumber suatu fungsi (jika tidak ditulis dalam C atau assembly).Saya harus mengakui bahwa ini membuat saya bingung sampai saya melihat solusi javascript.
sumber
C
Dengan baris kosong,
a
adalah variabel lokal a dan tanpa itu parameter makro ...sumber
Secara teknis bukan masalah "kode", tetapi masalah server. Jika ini dikirim ke Apache dari skrip CGI (yang dapat dihasilkan dengan bahasa apa pun yang Anda suka), itu akan mengirim respons HTTP ke klien:
Di sisi lain, ini akan gagal karena tidak ada ruang kosong setelah header.
sumber
JavaScript
Fungsi
whereami
merespons dengan posisi saluran panggilan, relatif terhadap posisinya sendiri dalam kode sumber.Jika ada baris kosong dalam
whereami
fungsi dihapus. Outputnya adalahNaN line(s) confusing me
. (Menambahkan garis tidak merusaknya)sumber
Perl
sumber
Eskrip
Karena bug dalam
escript
implementasi, eskrip yang valid harus memiliki panjang setidaknya tiga baris dan baris pertama harus berupa baris shebang atau baris kosong. Jadi skrip berikut harus memiliki dua baris kosong di mana yang pertama harus yang pertama:Atau harus rusak dalam dua baris tetapi masih harus memiliki garis kosong pertama.
Kalau tidak, Anda akan mendapatkan
sumber
Rubi
Mencetak
2+2=4
, tetapi memberikan kesalahan sintaksis tanpa baris ketiga kosong.%q
memungkinkan setiap karakter non-kata berfungsi sebagai pembatas string, bahkan karakter baris baru. Jadi tiga baris pertama kode sebenarnya setara denganprint %q"2+2="
, atau adilprint "2+2="
. Karena baris baru setelah2+2=
digunakan sebagai pembatas kutipan, itu juga tidak diuraikan sebagai pembatas baris , jadi Anda perlu yang lain segera setelah itu.sumber
Insomnia (kedua versi)!
Kode ini mencetak ~ (jangan tanya kenapa, susah tidur itu aneh). Jika Anda menghapus garis kosong, itu mencetak a sebagai gantinya.
Ngomong-ngomong surat pertama itu adalah duri .
sumber
C ++
Ini adalah trik klasik dan agak bodoh. Anda akan tahu apa itu ketika Anda melihatnya, ini hanya ada di sini demi penyelesaian. Karena itu, saya menandai ini sebagai jawaban wiki komunitas.
Mengapa ini berhasil?
sumber
??/
artinya\
,??//
artinya\/
, dan karena garis tidak berakhir\
, tidak ada kelanjutan garis. Yang kedua adalah bahwa perilaku itu persis sama terlepas dari apakahreturn 0;
dieksekusi, karena itu adalah perilaku standar ketika eksekusimain
mencapai penutupan}
.I know people always use this in these kinds of question
itulah sebabnya kami menjadikannya celah standarTempel ini ke file html, dan buka di browser Anda. Ini cukup sederhana, tetapi sedikit rumit karena dibutuhkan jumlah baris kosong dalam dokumen dan membuat indeks array untuk memanggil fungsi yang menunjukkan peringatan.
Yang ini melanggar aturan batas. Secara teknis JavaScript tidak memiliki string multiline, yang merupakan satu-satunya alasan ini berfungsi.
Karena Anda dapat memiliki kesalahan sintaksis dalam satu tag skrip tanpa mengganggu tag skrip lainnya, ini menunjukkan hasil positif hanya jika ada kesalahan pada halaman. Kesalahan mencegah peringatan kedua agar tidak menyala karena ada di tag skrip yang sama.
sumber
Rubi
Rahasianya adalah baris baru, benar-benar tab, kemudian baris baru. Saya tidak tahu apakah ini penting tetapi saya pikir itu golok. Karakter setelah
%
tab juga merupakan tab, tetapi karena alasan tertentu tidak muncul seperti tab. Saya menggunakan notasi persen Ruby untuk membuat string, yang menambahkan 2 argumen pertama yang diteruskan ke skrip. Ada lebih banyak tentang itu di sini: http://teohm.com/blog/2012/10/15/start-using-ruby-percent-notation/sumber
\n
harus hadir dan harus penting agar program berjalan seperti yang diharapkan.