Objektif
Anda harus menulis sebuah program yang menerima integer n
sebagai input (dari baris perintah), dan menyematkan dirinya sendiri (program) n
direktori ke bawah pohon direktori. Contoh dengan n=5
:
Nama folder mungkin apa pun yang Anda inginkan. Satu-satunya persyaratan adalah bahwa kedalamannya benar, dan bahwa program kemudian dapat dijalankan kembali dari tempat barunya di pohon direktori, dan bahwa file sumber baru mempertahankan nama file yang sama.
Bonus:
- Nilai * 0,9 Jika semua direktori memiliki nama yang berbeda (harus benar setidaknya hingga kedalaman 1 000 000)
- Nilai * 0,5 Jika Anda tidak secara langsung atau tidak langsung membaca atau memindahkan file sumber, atau mengakses kode sumber program
code-golf
file-system
globby
sumber
sumber
ln
perintah di * nix? Jika saya tidak salah, itu hanya membuat entri lain ke file inode, dan tidak ada konten yang dibaca sama sekali.Jawaban:
Bash, 30 * 0,9 * 0,5 = 13,5
Membawa kedalaman sebagai argumen pertama. Membuat tautan keras ke dirinya sendiri ke dalam struktur direktori berikut:
Skrip kemudian dapat dijalankan dari lokasi baru, bahkan jika
rm
dijalankan pada skrip lama.Penjelasan:
seq -s/ $1
menampilkan angka dari 1 hingga$1
(argumen pertama), dipisahkan oleh garis miring.mkdir -p `seq -s` $1
membuat direktori yang ditentukan olehseq
, dengan-p
membuat semua direktori perantara.ln $0 $_
buat tautan keras ke skrip berjalan saat ini di direktori yang baru dibuat.Lama (30 * 0,9 = 27):
Contoh run (with ln):
Berkat @DigitalTrauma untuk saran untuk mengganti
$(..)
dengan`..`
Terima kasih kepada @hjk atas saran untuk menggunakan
ln
.sumber
$_
!$( )
: codegolf.stackexchange.com/a/25572/11259cp
denganln
untuk mendapatkan bonus 0,5 juga ...mv
juga dibatasi dari 0,5 bonus itu. Itu masih menyisakanln
jelas, ya?ln
(Anda tidak perlu-s
) akan benar-benar menempatkan program di direktori baru, sehingga dapat dijalankan dari sana, tanpa pernah membaca, memindahkan, atau mengakses sumber aslinya. Saya katakan pergi untuk skor FALCON PUNCH 13,5!C, 225 * 0,9 * 0,5 = 101,25
Solusi saya di C:
Di sini, dalam bentuk yang agak lebih mudah dibaca:
Cek apakah berfungsi:
Kemungkinan besar ada banyak potensi golf dalam kode sumber.
sumber
Gelombang - 48 * 0,9 = 43.2
Script ini hanya membuat direktori baru, dan memindahkan file sumber ke sana -
n
kali.sumber
Zsh,
63605852 * 0.9 =56.75452.246.8Contoh:
sumber
s=$(<$0)
(Hanya untuk catatan, itu gagal bagi saya denganbash
4.3.11: "kesalahan sintaks dekat token tak terduga`; '". Tapi berfungsi dengan baik denganzsh
5.0.2)d
sebelumnya$i
?1
. Terima kasihfor i in {1..$1};{mkdir $i;cd $i};echo $s>f
.Rebol - 114 * 0,9 * 0,5 = 51,3
Tidak Disatukan:
Versi non-quine asli - 90 * 0,9 = 81
Tidak Disatukan:
sumber
Bash 167 * 0,5 * 0,9 = 75,15
Meminjam banyak dari jawaban hebat @ es1024 , tapi yang ini adalah quine yang sebenarnya, sehingga memenuhi syarat untuk kedua bonus.
Juga, teknik shell quine dari sini .
sumber
AutoIt3, 106 * 0,9 = 95,4 byte
Agak panjang tapi saya tidak bisa membantu dengan nama fungsi / variabel panjang itu:
Sebut saja dengan
<script/.exe name> <depth>
mis.script.exe 5
.Ini akan bekerja untuk sejumlah direktori; mungkin bahkan lebih dari yang dapat ditangani oleh sistem file Anda. : D
Bagaimana itu bekerja:
Itu hanya loop sederhana yang menambahkan indeks ke string. Kemudian direktori (dan semua direktori induk juga) dibuat dan file menyalin dirinya ke direktori itu.
sumber
Node.js,
136133 * 0,9 * 0,5 =61,259,85fs.linkSync
peta ke tautan panggilan POSIX , yang menciptakan tautan keras. Argumen yang tidak valid akan menyebabkan program macet.sumber
J, 82 * 0,9 = 73,8
Ini sebagian besar merupakan port dari jawaban terpilih teratas.
Simpan sebagai
skittish.ijs
atau apa pun yang Anda inginkan, dan panggil dari baris perintah menggunakan versi Andajconsole
. Milik saya disinkronkan denganjc
:sumber
Zsh , 55 * 0,9 * 0,5 = 24,75 byte
Saya sudah lama melihat tantangan ini, tetapi saya ingin menyelesaikannya di Zsh tanpa memanggil program eksternal seperti
mkdir
danln
(jika tidak, itu akan identik dengan solusi bash). Ternyata, Zsh dapat menyediakan versi programnya sendiri!Cobalah online!
sumber