Selamat Malam Golfgeneers.
Ini pertanyaan yang cukup panjang dan terperinci. Mengingat apa yang diminta, itu perlu. Jika Anda memiliki pertanyaan, silakan tanyakan. Jika ada sesuatu yang tidak jelas, harap beri tahu saya agar saya dapat memperbaikinya. Ini mungkin di sisi yang lebih keras dari codegolf.
Kami sedang membangun komputer yang ringan, dan kami membutuhkan sistem file seberat mungkin. Kode terpendek akan dipilih.
Kami menyediakan hard drive 65536 byte yang canggih. Demi prototipe ini, ini akan menjadi file gambar langsung, yang dapat diasumsikan oleh program Anda, dan berada di lokasi mana pun yang cocok untuk Anda - yaitu, file biner yang mewakili seluruh hard disk. Anda dapat berasumsi bahwa gambar ini sudah 'diformat' - yaitu. jika program Anda bergantung pada sesuatu yang ada di file untuk bekerja, itu bisa terjadi. Jika Anda meminta status kosong awal menjadi sesuatu selain all-zero, sebutkan apa itu.
Tidak ada batasan memori untuk RAM yang digunakan oleh aplikasi Anda.
Perintah input dan output akan membutuhkan antarmuka ke hard drive yang sebenarnya. Seperti gambar disk, program Anda dapat mengasumsikan bahwa file untuk input ada, dan di mana pun Anda inginkan. Demikian juga, program Anda dapat menampilkan di mana saja nyaman. Namun ia harus menutup file setelah menjalankan perintah input atau output.
Anda tidak diberikan format yang harus Anda gunakan untuk gambar disk - Anda bebas membuat sendiri. Itu harus mampu menyimpan hingga 248 file. File apa pun yang lebih besar dari 256 byte dapat dihitung sebagai file baru demi batas ini untuk setiap 256 byte atau bagiannya. File dapat mencapai 63488 byte. Pada dasarnya - itu harus mampu sebagai hard drive dengan 248 sektor masing-masing 256 byte.
Alasan di balik ukuran yang tampaknya ini adalah untuk memberi Anda 2.048 byte 'administrasi' - untuk menyimpan rincian file. Setiap file / folder harus dapat diakses dengan nama 4 karakter alfanumerik, yang mungkin peka huruf besar kecil atau kecil sesuai pilihan Anda. Jika program Anda mendukung nama 4 karakter atau kurang, maka ada bonus pengali 0,95.
Program Anda harus menerima, melalui stdin, perintah berikut. Parameter akan dipisahkan oleh spasi. Perintah akan diakhiri oleh baris baru.
- L - Daftar nama untuk stdout semua file saat ini dan ukurannya dalam byte, dipisahkan oleh baris baru.
- C ab - Salin file a ke file baru b.
- D a - Hapus file a
- R ab - Mengganti nama file a ke nama baru b
- I a - Menambahkan file input (lihat catatan di atas) sebagai file a
- O a - File Outputs ke file output
Kesalahan berikut dapat dilaporkan kepada STDOUT atau STDERR sebagai alasan yang sah untuk suatu perintah gagal dieksekusi. Anda dapat memilih untuk hanya mencetak ERR # di mana # adalah nomor kesalahan:
- 1 - File tidak ada
- 2 - File sudah ada
- 3 - Di Luar Angkasa *
* Perhatikan bahwa program Anda tidak dapat mengeluarkan ini hanya karena kehabisan ruang terus menerus. Jika Anda masih memiliki sektor yang tersedia, Anda harus mendefrag hard disk untuk membuatnya berfungsi.
Sistem folder bersifat opsional - namun, akan mendapat bonus 0,8 pengali dari skor Anda. Jika mendukung lebih dari 1 level direktori, itu akan menghasilkan bonus dari pengali 0,7 (tidak di samping 0,8). Untuk bonus, Anda harus punya
- L, R, C, dan D hanya berfungsi di dalam direktori saat ini. L harus mendaftar folder dalam direktori saat ini, serta file.
- Perintah baru M ab memindahkan file a ke folder b. Jika b adalah '.', Pindahkan file ke direktur induk
- Perintah baru G a pergi ke folder a. Jika a adalah '.', Buka folder induk
- R juga harus mengganti nama folder
- D juga harus menghapus folder, dan semua file / folder di dalamnya
- C juga harus menyalin folder, dan semua file / folder di dalamnya
Kesalahan tambahan berikut dapat dilaporkan ke STDOUT atau STDERR sebagai alasan yang sah untuk suatu perintah gagal dieksekusi.
- 4 - Folder tidak ada
- 5 - File, bukan folder - di mana, I dan O memerlukan nama file, dan folder diberikan
Nilaimu adalah:
- Ukuran, dalam byte, dari kode sumber Anda
Dikalikan dengan
- 0,95 jika Anda mendukung nama 4, atau kurang karakter
- 0.8 jika Anda mendukung satu tingkat folder
- 0.7 jika Anda mendukung beberapa level folder
- 0,95 jika Anda mendukung perintah (tidak harus nama file) dalam huruf kecil atau besar
Semoga berhasil.
sumber
Jawaban:
Ruby, skor 505,4 (560 karakter)
Catatan:
F
di direktori saat ini.F
harus ada dan dapat dibuat / diformat melalui perintah berikut:IO.write('F',(([""]*248)+([0]*248)+[""]).pack('A4'*248+'s'*248+'A63488'))
.I
juga di directoy saat ini, file outputO
.Bonus:
Kode belum sepenuhnya golf tetapi sudah menunjukkan bahwa untuk skor yang lebih baik secara finansial saya akan mencoba pendekatan yang sama sekali berbeda.
Sesi tes (hanya STDIN / STDOUT yang ditampilkan tetapi tentu saja setiap perintah diawali dengan memanggil program di atas):
sumber
Tcl, skor 487.711 (772 bytes)
Bonus (harus menangkap semuanya):
Keterbatasan yang diketahui:
F
harus sudah ada. Ruang kosong atau kosong tidak masalah.i
, file output adalaho
dan sistem file dalamF
eval puts [expr 1+2]
I
(juga bukan ide saya, danG
tidak membuat)G
tidak memvalidasi direktori.Beberapa peretasan:
eval puts $c
-> direktori saat ini, dipisahkan oleh spasi.exit
- tidak ada komentar.lappend c .
-> beralih ke subdirektori.
sumber
Python 2.7 373 (413 bytes)
Disk disimpan dalam Python pickle-Format: untuk membuat disk kosong Anda harus meletakkan dua byte ini}}. ' di awal dan secara opsional mengisi 65534 byte setelahnya. Mendukung nama file besar yang sewenang-wenang (* 0.95), perintah huruf besar dan kecil (* 0.95) dan tautan keras (:-).
sumber