Tujuan Anda adalah untuk menulis sebuah program atau fungsi yang memasukkan input string yang mewakili path ke file, dan menampilkan nilai yang sebenarnya jika file itu tidak kosong dan tidak mengandung byte yang bukan nol - yaitu, semua bit 0 - - dan nilai falsey sebaliknya.
Saya menyadari ini adalah masalah yang sangat sederhana dan saya kira saya bisa meretas sesuatu, tetapi saya curiga pasti ada cara yang pendek dan elegan untuk melakukannya, dan itu memberi saya ide untuk membuat tantangan dari itu.
Ini adalah kode-golf , jadi kode terpendek dalam byte menang. (Preferensi saya sendiri akan pergi ke solusi tercepat, tapi itu terlalu tergantung implementasi ...)
Pertanyaan terkait : Pad file dengan nol
Motivasi : Ini hanya untuk mengetahui dari mana masalah itu berasal, jika Anda tertarik. Anda tidak perlu membacanya.
Gambar ISO dari CD dan DVD, disalin dengan "dd" atau cara lain, sering berakhir dengan urutan blok tidak berguna yang hanya berisi byte nol. Teknik standar untuk menghapus blok ini diketahui dan sederhana (lihat /unix/74827/ ) tetapi kadang-kadang mereka dapat menghapus data yang tidak berguna karena media dapat berbohong tentang ukurannya sendiri. Jadi saya ingin memeriksa bahwa blok yang dihapus hanya berisi byte nol. Menghapus blok ini penting untuk menentukan versi ISO-gambar yang dinormalisasi.
sumber
'
.GNU sed -zn , 5 byte
File input dilewatkan ke sed sebagai parameter baris perintah. Output sebagai kode pengembalian shell standar - yaitu 0 adalah BENAR, 1 adalah SALAH.
Biasanya
sed
bekerja pada catatan input yang dibatasi-baris baru (AKA "baris").-z
mengubahnya menjadi catatan input yang dibatasi-nul. Jika ada catatan input yang cocok dengan.
regex, makaq
uit dengan kode keluar 1.Cobalah online!
sumber
DOS, 37 byte
Ini membuka file bernama pada command-line, mengembalikan 0 jika kosong atau mengandung non-nol, jika tidak mengembalikan 1.
sumber
Attache , 24 byte
Cobalah online!
Penjelasan
Ini adalah komposisi 4 fungsi, dieksekusi satu demi satu:
FileRead
- mengambil nama file sebagai input, mengembalikan konten file ituOrds
- mengembalikan poin kode ASCII dari setiap karakter dalam daftarMax&0
- ini setara dengan, untuk argumenx
,Max[x, 0]
; ini pada gilirannya menghitung maksimum semua entri dalamx
dan0
(menghasilkan0
daftar kosong)Zero
- ini adalah predikat yang memeriksa apakah angka ini sebenarnya 0, dan mengembalikan boolean itu.sumber
@_@
)C (platform 32bit), 65 byte
Asumsikan ukuran pointer semuanya sama, yang hampir selalu benar. Kembali dengan
0
kode keluar jika berhasil (file hanya berisiNUL
karakter), beberapa nilai lain sebaliknya.Perilaku tidak terdefinisi jika argumen baris perintah bukan jalur ke file yang dapat dibaca.
sumber
int**v
? Saya tidak dapat menemukan kompiler di mana ini tidak segfault tanpa melakukan itu. Juga, Anda dapat menghemat sedikit dengan sengaja melakukan kesalahan , tetapi saya tidak tahu apakah ini pendekatan terbaik.sizeof(void*) == sizeof(int)
(atau lebih umum "platform 32-bit") kemudian ... padaamd64
platform, coba kompilasi dengan-m32
;)-m32
): Coba online!Utilitas Bash + GNU, 26 byte
Nama file input diberikan sebagai parameter baris perintah. Output sebagai kode pengembalian shell standar - yaitu 0 adalah BENAR, 1 adalah SALAH.
Cobalah online!
sumber
Bahasa Wolfram (Mathematica) , 30 byte
Cobalah online!
Penjelasan
Solusi alternatif, 22 byte
Jika file kosong seharusnya lewat, maka ini dapat disingkat menjadi:
Cobalah online!
sumber
Java, 149 byte
sumber
Perl 5, 20 byte
$\=0;exit<>=~/^\0+$/
Mengambil nama file dalam args baris perintah dan mengembalikan respons dalam kode keluar dari program
sumber
Python 3, 59 byte
Mengembalikan 0 untuk kesuksesan (semua byte nol).
Mengembalikan 1 untuk kegagalan (setidaknya satu byte nol, atau file nol panjang).
sumber
APL (Dyalog Unicode) , 14 byte
Program lengkap. Meminta nama file dari stdin.
Cobalah online!
⍞
meminta nama file11 ¯1⎕MAP
memetakan file itu ke array bit yang dikemas⌈/
maksimum (reduksi); float terkecil jika kosong, jika tidak 0 atau 10=
adalah nol sama dengan itu?sumber
Haskell, 49 byte
Tentunya jika impor tidak termasuk, maka itu adalah 26 byte.
sumber
readFile
bukangetContets
. Saya pikir Anda dapat membaca file sebagai String normal, bandingkan dengan=='\0'
(atau lebih baik<'\1'
) dan singkirkanimport
. Seperti yang dapat Anda gunakan fungsi anonim, Anda bisa dropf x=
dan pergi pointfree:(all(<'\1')<$>).readFile
.readFile
, yang akan mengeluarkan pengecualian setelah menemukan urutan Unicode yang tidak valid. Poin bagus tentang pointfree.JavaScript (ES8), 52 byte
Mengambil url sebagai argumen dan mengembalikan janji yang diselesaikan
true
jika file tidak kosong dan tidak mengandung byte nol.sumber
Zsh , 35 byte
Cobalah online! Keluaran melalui kode keluar.
Baca, pisahkan karakter, dan bitwise-atau masing-masing codepoint bersama.
Jika file kosong, badan loop tidak pernah berjalan dan loop mengembalikan kebenaran. Jika nilai true-falsy dapat ditukar, yang terdepan
!
dapat dihapus untuk menyimpan 2-byte.sumber