Mari kita menulis kode terpendek untuk melakukan varian yang disederhanakan dari Metode Penghapusan DoD 5220.22-M dengan hanya dua lintasan penulisan.
Bahasa pemrograman apa pun diterima, tetapi penggunaan pustaka berorientasi disk-wiping dilarang.
Inilah cara kami mengimplementasikannya dalam pseudocode:
Set x to 0
[Start]
'Write Pass
For each sector in disk write the content of x
'Verification Pass
For each sector in disk {
If sector does not contain the content of x then goto [Start]
}
'Check whether we already did the pass with 1
If x is not 1 then {
Set x to 1
GoTo [Start]
}
Else end
Dengan kata lain, kode ini akan berjalan dua kali, dengan pass tulis dan pass verifikasi 0
, dan pass tulis dan pass verifikasi 1
.
Adakah yang cukup berani untuk menerapkannya gaya kode-golf? ;)
Jawaban:
kode mesin x86 (Linux), 116 byte
Mengambil nama file sebagai argumen
Majelis (NASM):
Cobalah online! (Menggunakan file sementara)
-11 byte dengan mengoptimalkan register bergerak dan menggunakan stack sebagai buffer alih-alih lokasi konstan dalam memori.
sumber
Pada sistem linux, tidak perlu penanganan khusus untuk perangkat. Cukup gunakan antarmuka file perangkat.
Python 3 (string byte) - 141 byte
Ini cukup mudah, dan tidak terlalu dioptimalkan, tetapi berfungsi. Berikut ini adalah ikhtisar dasar.
keluar loop ketika kenaikan cukup tinggi
Sebagai bonus, Anda dapat memodifikasi ini untuk setiap set dan jumlah pola byte-modifikasi, seperti 0x55 / 0xaa untuk efek overwriting yang lebih kuat.
Saya benar-benar menguji ini pada file perangkat, menggunakan loopback. Namun, saya tidak 100% yakin pengecekan benar-benar berfungsi. Mungkin perlu untuk menutup dan membuka kembali file setiap pass, karena perilaku buffering. Saya berharap siram mencegah ini.
* diedit untuk memasukkan beberapa saran dalam komentar
sumber
=
di python. Anda juga dapat mengurangi jumlah byte Anda dengan menggunakan;
untuk mengurangi indentasi.f.seek(0);f.seek(0)
(19 byte) dapats=f.seek;s(0);s(0)
(18 byte). Selanjutnyaif f.read()==x:i+=1
bisai+=f.read()==x
.b'\0'
bukannyab'\x00'
harus bekerja.C (dentang) ,
-DZ=lseek(d,0
+ 139 = 152 byteCobalah online!
Mengambil nama file sebagai argumen
Tidak Disatukan:
sumber
Tcl, 286 byte
Tidak benar-benar dioptimalkan dengan baik. Saya mencoba apa yang saya bisa, tetapi saya tidak tahu banyak tentang Tcl.
Simpan sebagai "f.tcl" dan jalankan di Unix dengan
tclsh f.tcl "your filename"
. Pastikan ada satu argumen! Saya menguji ini pada file biasa, tetapi itu harus bekerja pada file perangkat juga.Pengaturan variabel dan pengindeksan lebih banyak terlibat dalam Tcl, jadi saya memutuskan untuk meletakkan kode umum antara lintasan ke dalam fungsi. Lalu saya menyebutnya pertama dengan "\ 0", dan ulangi saat gagal memverifikasi. Saya melakukan hal yang sama dengan "\ xff".
Saya memerah setelah menulis; mungkin tidak perlu.
fconfigure -translation binary -buffering none
lebih panjang.-2 byte dengan menghapus tanda kutip
r+
.sumber