Các puppy
tiện ích có một tên tập tin như là đầu vào, và thực hiện chính xác những gì bạn mong chờ một con chó con để làm: nó từng mảnh nó!
Làm thế nào để cắt nhỏ
Xé các trang bằng răng của bạnTách tệp đầu vào trên dòng mới.Xé từng trang bằng bàn chân của bạnĐối với mỗi dòng (không bao gồm nguồn cấp dữ liệu), hãy chọn một số nguyên ngẫu nhiênn
sao cho2 <= n <= # of characters in the line
. Tách dòng thànhn
các chuỗi không chồng lấp không có độ dài ngẫu nhiên.Phân tán các mảnh vụn trên khắp sànXuất ra từng chuỗi con của mỗi dòng thành một tên tệp ngẫu nhiên duy nhất ([a-zA-Z0-9]
chỉ, bất kỳ phần mở rộng nhất quán nào bao gồm không có, độ dài1 <= n <= 12
) trong thư mục hiện tại. Ghi đè các tệp có sẵn trong thư mục hiện tại (bao gồm cả tệp đầu vào, nếu nó nằm trong thư mục hiện tại) có thể chấp nhận được, miễn là nó không can thiệp vào việc gửi của bạn đang chạy.
Làm rõ
- Sẽ không bao giờ có đầu vào trong đó có thể sử dụng hết tất cả các tên tệp có thể.
- Các tệp sẽ chỉ bao gồm ASCII có thể in (thứ tự 32-127) và nguồn cấp dữ liệu và sẽ sử dụng các kết thúc dòng theo kiểu UNIX / Linux (LF, không phải CRLF kiểu Windows).
- Một dòng mới duy nhất trong các tệp đầu ra có thể được chấp nhận miễn là mọi tệp đầu ra có một dòng mới, nhưng không bắt buộc. Bạn có thể chọn xem tệp đầu vào có chứa một dòng mới hay không.
- Mỗi dòng trong đầu vào sẽ chứa ít nhất 2 ký tự.
- Các giá trị ngẫu nhiên được chọn phải được chọn từ phân phối ngẫu nhiên thống nhất trên tập hợp các giá trị có thể có.
Nếu ngôn ngữ của bạn không thể thực hiện I / O tệp, thay vào đó, bạn có thể lấy nội dung của tệp đầu vào làm đầu vào và các cặp chuỗi đầu ra đại diện cho tên tệp đầu ra và văn bản cho tệp đó. Tuy nhiên, trình của bạn sẽ không đủ điều kiện để giành chiến thắng.
Thí dụ
Thực hiện tham khảo:
#!/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)
Chạy ví dụ:
$ 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