このpuppy
ユーティリティは入力としてファイル名を受け取り、子犬に期待することを正確に行います。
細断方法
歯でページを切り取ります入力ファイルを改行で分割します。足で各ページを切り開きます(改行を含まない)行ごとに、n
などのランダムな整数を選択し2 <= n <= # of characters in the line
ます。行をn
、ランダムな長さの空ではなく重複しない部分文字列に分割します。フロア全体でシュレッドを散布する各行の各部分文字列を、現在のディレクトリ内の一意のランダムなファイル名([a-zA-Z0-9]
のみ、none、lengthを含む一貫した拡張子1 <= n <= 12
)に出力します。現在のディレクトリ内の既存のファイル(現在のディレクトリにある場合は入力ファイルを含む)を上書きすることは、実行中のサブミッションに干渉しない限り許容されます。
明確化
- 考えられるすべてのファイル名を使い果たすことが可能な入力はありません。
- ファイルは、印刷可能なASCII(序数32-127)と改行のみで構成され、UNIX / Linuxスタイルの行末(LF、WindowsスタイルのCRLFではありません)を使用します。
- すべての出力ファイルに末尾の改行がある限り、出力ファイルの単一の末尾の改行は許容されますが、必須ではありません。入力ファイルに末尾の改行を含めるかどうかを選択できます。
- 入力の各行には、少なくとも2文字が含まれます。
- 選択されたランダム値は、指定された一連の値の一様なランダム分布から選択する必要があります。
言語がファイルI / 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)
実行例:
$ 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