Yardımcı puppy
program girdi olarak bir dosya adı alır ve bir köpek yavrusu yapmasını beklediğiniz şeyi tam olarak yapar: onu parçalara ayırır!
Parçalama
Sayfaları dişlerinizlesökün Giriş dosyasını satırsonlarına ayırın.Pençelerinden ile her sayfayı Yırt, (satır besleme hariç) her satırı için rasgele bir tamsayı almakn
şekildedir2 <= n <= # of characters in the line
. Çizgiyin
, rastgele uzunlukta, boş olmayan, çakışmayan alt dizelere ayırın.Parçalamaları zeminedağıtın Her satırın her bir alt dizesini geçerli dizinde benzersiz bir rastgele dosya adına ([a-zA-Z0-9]
yalnızca, hiçbiri, uzunluk dahil olmak üzere herhangi bir tutarlı uzantıya) gönderin1 <= n <= 12
. Geçerli dizinde önceden varolan dosyaların üzerine yazma (geçerli dizinde ise giriş dosyası da dahil), gönderiminizin çalışmasını etkilemediği sürece kabul edilebilir.
Açıklamalar
- Olası dosya adlarının tümünü kullanmanın mümkün olduğu hiçbir zaman bir girdi olmayacaktır.
- Dosyalar yalnızca yazdırılabilir ASCII (sıra 32-127) ve satır beslemelerinden oluşacak ve UNIX / Linux tarzı satır sonlarını (Windows tarzı CRLF değil LF) kullanacaktır.
- Çıktı dosyalarındaki tek bir son satırsonu, her çıktı dosyası bir satırsonu satırına sahip olduğu sürece kabul edilebilir, ancak zorunlu değildir. Girdi dosyasının sondaki bir yeni satır içerip içermediğini seçebilirsiniz.
- Girişteki her satır en az 2 karakter içerecektir.
- Seçilen rasgele değerler, verilen olası değerler kümesi üzerindeki homojen rasgele dağılımdan seçilmelidir.
Diliniz dosya G / Ç gerçekleştiremiyorsa, girdi dosyasının içeriğini girdi olarak ve çıktı dosya adını ve bu dosyanın metnini temsil eden çıktı dizeleri çiftlerini alabilirsiniz. Ancak, gönderiminiz kazanmak için uygun olmayacaktır.
Misal
Referans uygulaması:
#!/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)
Örnek çalışma:
$ 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