Tugas Anda hari ini adalah mengambil file yang ada dan menambahkan angka nol hingga mencapai ukuran tertentu.
Anda harus menulis sebuah program atau fungsi yang mengambil nama file di direktori saat ini f
dan sejumlah byte b
. Sambil mempertahankan konten asli f
, Anda harus menulis nol (nol byte, bukan ascii 0s) hingga akhir sehingga ukuran barunya adalah b
byte.
Anda dapat berasumsi bahwa f
hanya memiliki ascii alfanumerik dalam namanya, bahwa Anda memiliki izin penuh atasnya, yang awalnya tidak lebih besar dari b
, tetapi mungkin sebesar b
, dan bahwa ada ruang disk bebas tanpa batas.
Anda mungkin tidak menganggap f
itu kosong, atau belum mengandung byte nol.
File lain yang sudah ada tidak boleh dimodifikasi dan file baru tidak boleh ada setelah eksekusi berakhir.
Uji Kasus
Isi dari f | b | Konten yang dihasilkan f 12345 | 10 | 1234500000 0 | 3 | 000 [kosong] | 2 | 00 [kosong] | 0 | [kosong] 123 | 3 | 123
sumber
b
Jawaban:
Bash + coreutils, 13
Input dari baris perintah - parameter pertama adalah ukuran file dan yang kedua adalah nama file.
Dari
man truncate
:Cobalah online .
sumber
truncate
syscall gagal.dd bs=1 of=$1 seek=$2<&-
(yang mencetak pesan kesalahan yang dapat diabaikan). Milikmu jauh lebih pendek. Bagus.Groovy,
54474341 byte-6 Berkat ide manatwork untuk menghapus loop; itu ide asli saya, tidak tahu mengapa saya pikir itu tidak akan berhasil dan memilih untuk loop ... Ini pasti berhasil, baru saja mengujinya.
Tidak Disatukan:
sumber
{a,b->c=new File(a);c<<('\0'*(b-c.size()))}
(c=new File(a))
karena kurung yang diperlukan.APL (Dyalog) ,
3317 byteCobalah online!
sumber
∇Extend
?Python 2 ,
595754 byte-5 byte terima kasih kepada chepner
sumber
\x00
adalah byte nol.\0
sebagai pengganti\x00
.def g(n,b):f=open(n,'a');f.write('\0'*b);f.truncate(b)
.PHP, 66 byte
Mengambil input dari argumen baris perintah; jalankan bersama
-nr
.55 byte ini mungkin, tetapi kemungkinan besar tidak akan bekerja:
sumber
Java (Oracle JRE), 55 byte
Spesifikasi
setLength(int)
mengatakan bahwa byte yang ditambahkan tidak terdefinisi, tetapi secara praktis Oracle JRE hanya menambahkan0
byte (itu sebabnya saya menentukannya).Sumber daya secara otomatis ditutup oleh JVM sehingga kita tidak perlu melakukannya sendiri.
Uji
sumber
AHK, 48 byte
1
dan2
merupakan dua parameter pertama dalam skrip AHK.FileGetSize
bekerja dalam byte secara default.Ini tidak mengasyikkan, tetapi sederhana: Dapatkan ukuran, kurangi dari ukuran yang diinginkan, dan tambahkan banyak angka nol.
sumber
Perl 6 , 40 byte
$^a
dan$^b
merupakan parameter untuk fungsi - nama file dan panjangnya masing-masing.sumber
Python 2 , 68 byte
Cobalah online! (Saat mencetak konten file, kode menggantikan byte nol dengan ASCII 0 untuk visibilitas.)
sumber
\0
lebih pendek.PowerShell, 69 byte
$f
untuk file,$s
untuk ukuran tujuan, simpan sebagai .ps1 dan jalankanIni sebuah shell, jadi harus ada loop yang sangat kecil menambahkan 1 byte dengan
>>
redirection output dan tambahkan, kan? Ya, tidak, karena>>
hanya mengeluarkan UCS2-LE multibyte encoding sehingga tidak ada cara untuk menambahkan satu byte ke file dengannya .. kecuali jika Anda menggunakan PSv5.1 dan Anda dapat mengubahnya tetapi itu membuatnya terlalu lama untuk bersaing :Mungkin ada pendekatan .Net Framework? Seharusnya ada, tapi saya tidak bisa membuatnya benar-benar menulis byte, atau kesalahan. Tapi itu lebih lama:
sumber
Mathematica 50 Bytes
Ekspor Impor
Pemakaian
sumber
q, 29 byte
Fungsi yang mengambil nama file dalam format
:/foo/bar.baz
dan panjang sebagai integer.Contoh:
sumber
C, 56 byte
Program menemukan ukuran file, dan berapa byte yang harus ditambahkan. File kemudian menambahkan
fs - b
byte tambahan di akhir.sumber
f
danb
, yang tidak diizinkan. Anda harus memasukkan i / o ke dalam program Anda, yang bisa dariARGV
, input konsol, atau argumen ke suatu fungsi.C #, 90 byte
sumber