Na Github znajduje się lista 10 000 najczęstszych haseł. Wygenerowałem również własną listę losowych haseł .
Twoim zadaniem jest zidentyfikowanie różnicy między dwiema listami (ze 100% dokładnością).
Dlatego twój program musi zaakceptować ciąg i zwrócić:
- Prawdziwa wartość, jeśli hasło znajduje się na liście wspólnych haseł
- Fałszywa wartość, jeśli hasło znajduje się na liście losowych haseł
- Wszystko, co chcesz, jeśli hasło nie jest na żadnym z nich
Dla zainteresowanych mój program generuje hasła o długości od 5 do 10 znaków, a każdy znak jest albo małą literą, albo cyfrą.
Uwaga: nie należy używać tych haseł w żadnym bezpiecznym miejscu. Algorytm mojej generacji wcale nie jest bezpieczny, a wyniki są publikowane online, aby wszyscy mogli je zobaczyć
$args[0]-in(gc .\10k-passwords.txt)
? Czy mamy wymyślić jakiś wzór, który rozpoznaje jeden, ale nie drugi?Odpowiedzi:
CJam,
2262908620512503 bajtówWyświetla dodatnią liczbę całkowitą dla popularnych haseł i zero dla innych.
Weryfikacja
źródło
Python,
719664 bajtyMam trochę problemów z testowaniem tego w Retinie , więc na razie oto Python. Przetestuj, podając
lambda
nazwę i uruchamiając ją na listach słów:To bardzo duże wyrażenie regularne, więc robię sobie przerwę od gry w golfa.
źródło
Bash - 5324 bajty
gdzie rp.gz znajduje się na stronie http://dl.tyzoid.com/rp.gz
Zwraca 1, jeśli na liście losowej. To jest fałsz, ponieważ bash ewaluuje 0 jako wartość truty.
źródło
rp.gz
na 1-bajtową nazwę pliku, aby zapisać 4 bajty ...gunzip
agrep
także nie potrzebawc
:zgrep -c $1 rp.gz
. Także mikrooptymalizacja, alexz
kompresuje się nieznacznie lepiej. Nawiasem mówiąc, czy nie byłoby lepiej używać-x
(--line-regexp
) lub-w
(--word-regexp
), aby nie pasować do fragmentów słów?sort rpass.txt | 7z -si -mx=9 a r.gz
powinno dać ci golenie około 480 bajtów ...Haskell, 8047 bajtów
Wydaje się, że jest to najlepsze, co mogę wymyślić bez wyłamywania algorytmów kompresji, a żaden z języków, których lubię używać, nie ma tak naprawdę krótkiej wbudowanej metody kompresji.
„Algorytm” jest niezwykle prosty; sprawdź, czy znajduje się na liście losowych haseł i zwróć False, jeśli tak, i True, jeśli nie.
źródło