Das puppy
Dienstprogramm nimmt einen Dateinamen als Eingabe und tut genau das, was Sie von einem Welpen erwarten: Es zerfetzt ihn!
Wie wird geschreddert?
Rippen Siedie Seiten mit den Zähnen aus. TeilenSiedie Eingabedatei in Zeilenumbrüche.Zerreißen Sie jede Seite mit Ihren Pfoten. Wählen Siefür jede Zeile (ohne Zeilenvorschub) eine zufällige Ganzzahl,n
so dass2 <= n <= # of characters in the line
. Teilen Sie die Zeile inn
nicht leere, nicht überlappende Teilzeichenfolgen mit zufälliger Länge.Verteile die Schnipsel über den ganzen Boden.Gib jeden Teilstring jeder Zeile in einem eindeutigen zufälligen Dateinamen ([a-zA-Z0-9]
nur jede konsistente Erweiterung, einschließlich keine, Länge1 <= n <= 12
) im aktuellen Verzeichnis aus. Das Überschreiben bereits vorhandener Dateien im aktuellen Verzeichnis (einschließlich der Eingabedatei, sofern diese sich im aktuellen Verzeichnis befindet) ist zulässig, sofern dies nicht die Ausführung Ihrer Übermittlung beeinträchtigt.
Klarstellungen
- Es wird niemals eine Eingabe geben, bei der es möglich ist, alle möglichen Dateinamen zu verbrauchen.
- Dateien bestehen nur aus druckbarem ASCII (Ordnungszahlen 32-127) und Zeilenvorschüben und verwenden Zeilenenden im UNIX / Linux-Stil (LF, nicht Windows-CRLF).
- Eine einzelne abschließende Zeile in Ausgabedateien ist zulässig, solange jede Ausgabedatei eine abschließende Zeile enthält, dies ist jedoch nicht erforderlich. Sie können wählen, ob die Eingabedatei einen nachgestellten Zeilenumbruch enthält oder nicht.
- Jede Zeile in der Eingabe enthält mindestens 2 Zeichen.
- Die ausgewählten Zufallswerte müssen aus einer gleichmäßigen Zufallsverteilung für den gegebenen Satz möglicher Werte ausgewählt werden.
Wenn Ihre Sprache keine Datei-E / A ausführen kann, können Sie stattdessen den Inhalt der Eingabedatei als Eingabe verwenden und Zeichenfolgenpaare ausgeben, die den Ausgabedateinamen und den Text für diese Datei darstellen. Ihr Beitrag ist jedoch nicht gewinnberechtigt.
Beispiel
Referenzimplementierung:
#!/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)
Beispiellauf:
$ 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