La puppy
utilidad toma un nombre de archivo como entrada y hace exactamente lo que esperaría que hiciera un cachorro: ¡lo destruye!
Cómo triturar
Extraiga las páginas con los dientesDivida el archivo de entrada en nuevas líneas.Rasgue cada página con sus patasPara cada línea (sin incluir el salto de línea), elija un número entero aleatorion
tal que2 <= n <= # of characters in the line
. Divida la línea enn
subcadenas no vacías no superpuestas de longitud aleatoria.Disperse las tiras por todo el piso.Exporte cada subcadena de cada línea a un nombre de archivo aleatorio único ([a-zA-Z0-9]
solo, cualquier extensión consistente que incluya ninguno, longitud1 <= n <= 12
) en el directorio actual. Sobrescribir archivos preexistentes dentro del directorio actual (incluido el archivo de entrada, si está en el directorio actual) es aceptable, siempre que no interfiera con la ejecución de su envío.
Aclaraciones
- Nunca habrá una entrada donde sea posible utilizar todos los nombres de archivo posibles.
- Los archivos consistirán solo en ASCII imprimible (ordinales 32-127) y avances de línea, y utilizarán terminaciones de línea de estilo UNIX / Linux (LF, no el CRLF de estilo Windows).
- Una nueva línea final en los archivos de salida es aceptable siempre que cada archivo de salida tenga una nueva línea final, pero no es necesaria. Puede elegir si el archivo de entrada contiene o no una nueva línea final.
- Cada línea en la entrada contendrá al menos 2 caracteres.
- Los valores aleatorios elegidos deben elegirse de una distribución aleatoria uniforme en el conjunto dado de valores posibles.
Si su idioma no puede realizar E / S de archivo, puede tomar el contenido del archivo de entrada como entrada y generar pares de cadenas que representan el nombre de archivo de salida y el texto de ese archivo. Sin embargo, su envío no será elegible para ganar.
Ejemplo
Implementación de referencia:
#!/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)
Ejemplo de ejecución:
$ 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