puppy
Утилита принимает имя файла в качестве входных данных, и делает именно то , что можно было бы ожидать щенка делать: он измельчает его!
Как измельчить
Вырвать страницы зубами.Разбить входной файл на новые строки.Разрывайте каждую страницу своими лапами.Для каждой строки (не включая перевод строки) выберите случайное целое число,n
такое что2 <= n <= # of characters in the line
. Разбейте строку наn
непустые неперекрывающиеся подстроки случайной длины.Разбросайте клочья по всему полу.Выведите каждую подстроку каждой строки в уникальное случайное имя файла ([a-zA-Z0-9]
только с любым последовательным расширением, не включая ни одной длины1 <= n <= 12
) в текущем каталоге. Перезапись уже существующих файлов в текущем каталоге (включая входной файл, если он находится в текущем каталоге) допустима, если это не мешает выполнению отправки.
Разъяснения
- Там никогда не будет ввода, где можно использовать все возможные имена файлов.
- Файлы будут состоять только из печатного ASCII (порядковые номера 32-127) и перевода строки и будут использовать окончания строк в стиле UNIX / Linux (LF, а не CRLF в стиле Windows).
- Одна конечная новая строка в выходных файлах допустима, если в каждом выходном файле есть конечная новая строка, но это не обязательно. Вы можете выбрать, будет ли входной файл содержать завершающий перевод строки.
- Каждая строка во входных данных будет содержать не менее 2 символов.
- Выбранные случайные значения должны выбираться из равномерного случайного распределения на заданном наборе возможных значений.
Если ваш язык не может выполнить файловый ввод / вывод, вы можете вместо этого взять содержимое входного файла в качестве входного и вывести пары строк, представляющих имя выходного файла и текст для этого файла. Тем не менее, ваша заявка не будет иметь право на победу.
пример
Эталонная реализация:
#!/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)
Пример выполнения:
$ 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