The puppy
utilitas mengambil nama file sebagai input, dan tidak persis apa yang Anda harapkan anak anjing untuk melakukan: itu cabik itu!
Cara rusak
Merobek halaman dengan gigi Anda.Pisahkan file input pada baris baru.Robek setiap halaman dengan kaki AndaUntuk setiap baris (tidak termasuk linefeed), pilih bilangan bulat acakn
sedemikian rupa2 <= n <= # of characters in the line
. Pisahkan garis menjadin
substring non-kosong yang tidak tumpang tindih dengan panjang acak.Menyebarkan cabikan di seluruh lantai.Keluarkan setiap substring dari setiap baris ke nama file acak yang unik ([a-zA-Z0-9]
hanya, setiap ekstensi yang konsisten termasuk tidak ada, panjang1 <= n <= 12
) di direktori saat ini. Menimpa file yang sudah ada sebelumnya dalam direktori saat ini (termasuk file input, jika ada di direktori saat ini) dapat diterima, asalkan tidak mengganggu kiriman Anda yang sedang berjalan.
Klarifikasi
- Tidak akan pernah ada input di mana dimungkinkan untuk menggunakan semua nama file yang mungkin.
- File hanya akan terdiri dari ASCII (ordinals 32-127) dan printfeed yang dapat dicetak, dan akan menggunakan ujung garis gaya UNIX / Linux (LF, bukan CRLF gaya Windows).
- Satu baris baru dalam file output dapat diterima selama setiap file output memiliki baris baru, tetapi tidak diperlukan. Anda dapat memilih apakah file input berisi baris baru atau tidak.
- Setiap baris dalam input akan mengandung setidaknya 2 karakter.
- Nilai acak yang dipilih harus dipilih dari distribusi acak seragam pada set nilai yang mungkin diberikan.
Jika bahasa Anda tidak dapat melakukan file I / O, Anda dapat mengambil konten file input sebagai input, dan pasangan pasangan string yang mewakili nama file output dan teks untuk file tersebut. Namun, kiriman Anda tidak akan memenuhi syarat untuk menang.
Contoh
Implementasi referensi:
#!/usr/bin/env python3
import random
import string
import sys
fname = sys.argv[1]
with open(fname) as f:
txt = f.read().rstrip().split('\n')
for line in txt:
n = random.randint(2, len(line))-1
idxs = [0]+random.sample(range(1, len(line)), n)+[len(line)]
idxs.sort()
splits = []
for i in range(0, len(idxs)-1):
splits.append(line[idxs[i]:idxs[i+1]])
ofnames = []
for s in splits:
flen = random.randint(1, 10)
ofname = ''
while ofname == '' or ofname in ofnames:
ofname = ''
for i in range(flen):
ofname += random.choice(string.ascii_letters+string.digits)
ofnames.append(ofname)
with open(ofname, 'w') as f:
f.write(s)
Contoh dijalankan:
$ cat bestsong.txt
Never gonna give you up
Never gonna let you down
Never gonna run around
And desert you!
$ puppy bestsong.txt
$ ls
8675309
a
bestsong.txt
cSdhg
Dq762
jq7t
ret865
rick4life
weu767g
xyzzy
$ cat 8675309
esert you!
$ cat a
Never gonna let you down
$ cat cSdhg
ive y
$ cat Dq762
And d
$ cat jq7t
Never gonna g
$ cat ret865
run arou
$ cat rick4life
Never gonna
$ cat weu767g
nd
$ cat xyzzy
ou up