이 puppy
유틸리티는 파일 이름을 입력으로 취하고 강아지가 기대하는 것을 정확하게 수행합니다.
파쇄하는 방법
이빨로 페이지를 찢어입력 파일을 개행으로 나눕니다.발로 각 페이지를 찢습니다(줄 바꿈 제외) 각 줄에 대해 다음n
과 같이 임의의 정수를 선택하십시오2 <= n <= # of characters in the line
. 줄을n
임의 길이의 비어 있지 않은 겹치지 않는 하위 문자열 로 분할하십시오 .바닥 전체에 조각을 흩뿌 려라 현재줄에서 각 줄의 각 부분 문자열을 고유 한 임의의 파일 이름 ([a-zA-Z0-9]
없음, 길이를 포함한 일정한 확장명으로 만 출력)으로 출력합니다1 <= n <= 12
. 제출을 실행하는 데 방해가되지 않는 한 현재 디렉토리 (기존 디렉토리에있는 경우 입력 파일 포함) 내에 기존 파일을 겹쳐 쓰는 것은 허용됩니다.
설명
- 가능한 모든 파일 이름을 모두 사용할 수있는 입력은 없습니다.
- 파일은 인쇄 가능한 ASCII (순서 32-127) 및 줄 바꿈으로 구성되며 UNIX / Linux 스타일 줄 끝 (Windows 스타일 CRLF가 아닌 LF)을 사용합니다.
- 모든 출력 파일에 후행 줄 바꿈이있는 한 출력 파일에서 하나의 후행 줄 바꿈이 허용되지만 필수는 아닙니다. 입력 파일에 후행 줄 바꿈이 포함 될지 여부를 선택할 수 있습니다.
- 입력의 각 줄에는 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