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