puppy
Narzędzie pobiera nazwę pliku jako wejście, a nie dokładnie to, czego można się spodziewać szczeniak zrobić: jest to strzępy!
Jak niszczyć
Rozerwij strony zębamiPodziel plik wejściowy na nowe linie.Oderwij każdą stronę łapami.Dla każdej linii (nie licząc linii) wybierz losową liczbę całkowitą,n
taką jak2 <= n <= # of characters in the line
. Podziel linię nan
niepuste nie nakładające się podciągi o losowej długości.Rozrzuć strzępy na podłodze.Wyjmij każdy podciąg każdego wiersza do unikalnej losowej nazwy pliku ([a-zA-Z0-9]
tylko dowolne spójne rozszerzenie, w tym brak, długość1 <= n <= 12
) w bieżącym katalogu. Nadpisywanie wcześniej istniejących plików w bieżącym katalogu (w tym pliku wejściowego, jeśli znajduje się on w bieżącym katalogu) jest dopuszczalne, pod warunkiem, że nie zakłóca działania przesyłania.
Wyjaśnienia
- Nigdy nie będzie danych wejściowych, w których można wykorzystać wszystkie możliwe nazwy plików.
- Pliki będą się składały tylko z drukowanych znaków ASCII (porządek 32-127) i kanałów oraz będą używać zakończeń linii w stylu UNIX / Linux (LF, a nie CRLF w stylu Windows).
- Pojedynczy znak nowej linii w plikach wyjściowych jest dopuszczalny, o ile każdy plik wyjściowy ma znak nowej linii, ale nie jest wymagany. Możesz wybrać, czy plik wejściowy zawiera końcowy znak nowej linii.
- Każda linia na wejściu będzie zawierać co najmniej 2 znaki.
- Wybrane wartości losowe należy wybrać z jednolitego rozkładu losowego na danym zestawie możliwych wartości.
Jeśli twój język nie jest w stanie wykonać operacji wejścia / wyjścia pliku, możesz zamiast tego wziąć zawartość pliku wejściowego jako dane wejściowe i wyprowadzić pary ciągów znaków reprezentujących wyjściową nazwę pliku i tekst dla tego pliku. Twoje zgłoszenie nie będzie jednak kwalifikować się do wygrania.
Przykład
Referencyjne wdrożenie:
#!/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)
Przykładowy przebieg:
$ 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