Wprowadzenie
Bob lubi mieć różne hasła dla każdej strony internetowej, z której korzysta. Chce hasła w specjalnym formacie, aby mógł zapamiętać. Pomóż mu, budując generator haseł, który ma możliwie najkrótszą długość kodu, ponieważ lubi skróty tak jak jego imię.
Wyzwanie
Zbuduj Bob generator haseł, który przyjmuje cztery parametry -
- Adres domeny, (np .: stackexchange.com)
- Imię,
- nazwisko,
- Data i rok urodzenia.
i wyprowadza ciąg, który przeszedł następujące transformacje.
Każde hasło ma szablon oparty na długości l nazwy domeny. Jeśli l jest liczbą pierwszą, szablon ma następującą postać -
[birth-date][domain-name][lastname][birth-year][symbol]
inaczej jest w tej formie -
[symbol][birth-year][firstname][domain-name][birth-date]
.
Pole symbolu będzie miało wartości oparte na typie domeny.
.pl -> $$$ .org -> &&& .net -> %%% .edu -> +++ .gov -> @@@ .mil -> >>> domyślnie -> ~~~
Teraz chce także poprowadzić szyfr cezarowy nad polami. - [firstname][domain-name][lastname]
Kierunek przesunięcia jest właściwy, jeśli l jest liczbą pierwszą, to jest lewą. Wartość przesunięcia zależy od wartości dodanej daty urodzenia i roku.
Po powyższym procesie tekst nie może być łatwo zapamiętany, dlatego chce, aby zaszyfrowany tekst był wymawiany. W tym celu chce zastąpić co trzecią z kolei spółgłoskę samogłoską w kolejności alfabetycznej (tj aeiou
.).
Wreszcie chce usunąć kolejne wystąpienia tych samych liter.
Przykład
Wejście - Stackexchange.com Bob Williams 0894 Wyjście - 08qraicvafyecugjigyoq94 $$$.
Objaśnienie:
Szablon hasła to [birth-date][domain-name][lastname][birth-year][symbol]
, ponieważ długość nazwy domeny stackexchange
jest liczbą pierwszą. Symbol będzie taki, $$$
jaki jest typ domeny .com
.
Wypełnijmy te wartości w szablonie - 08stackexchangewilliams94$$$
. Teraz szyfr Cezara musi być uruchamiany na polach [firstname][domain-name][lastname]
(w tym przypadku jest to tylko nazwisko). Kierunek zmiany jest właściwy, ponieważ l jest liczbą pierwszą, a wartość przesunięcia wynosi 08+94 = 102
.
A więc 08stackexchangewilliams94$$$
zamienia się w 08qryaicvafylecugjjgykq94$$$
. Teraz co trzecia z kolei spółgłoska jest zastępowana samogłoską - 08qraaicvafyeecugjigyoq94$$$
usuwane są wszystkie kolejne litery tej samej litery - 08qraicvafyecugjigyoq94$$$
. Nie martw się, to wymawia Bob.
dodatkowe informacje
- Adres domeny, imię i nazwisko zawierają tylko małe litery.
- Adres domeny zawsze będzie składał się tylko z domeny drugiego poziomu i najwyższego poziomu, podobnie jak
stackexchange.com
i niecodegolf.stackexchange.com
. Domeny takie jak.co.uk
nie są dozwolone, ale są prawidłowe.uk
lub.in
prawidłowe. - Wymiana samogłoski w kolejności alfabetycznej odbywa się cyklicznie. Mam na myśli po
u
,a
służy do zastąpienia. - Zakres ASCII dla szyfru Cezara wynosi 97 - 122 włącznie.
- Możesz pobrać dane zgodnie z opisem tutaj .
- Dane wyjściowe muszą być ciągiem.
- Format daty i roku urodzenia to
dd
iyy
.Więc02
jest akceptowalny i2
nie jest.
To jest golf golfowy, więc wygrywa najkrótszy kod w bajtach. Wesołego golfa!
stackexchange.com
nieimg.stackexchange.com
? Co z domenami krajowymibbc.co.uk
?0894
składa się102
z wyjaśnień08+96=106
. Zaszyfrowany tekst wydaje się używać102
wartości. Po prostu niewielka niespójność, która może być myląca ...defualt
niedefault
Odpowiedzi:
PowerShell 3+,
480476474453450448 bajtówWypróbuj online!
Zaoszczędź
2426 bajtów dzięki TimmyD !Wow, to było szalone. Nie sądzę, żebym mógł opublikować pełny opis tego problemu do czasu późniejszego lub jutrzejszego.
Uwaga: wszystkie zakończenia linii to
\n
(0x10
), więc nie muszę używać;
i umieszczać tego wszystkiego w jednym wierszu.Szybki przegląd:
Ponieważ segment nie może być dłuższy niż 63 znaki ( patrz także RFC 1035 ), myślę, że krótsze było tylko zakodowanie listy liczb pierwszych :)Przy użyciu sugerowanej metody regex.Invoke-Expression
(iex
), aby wykonać wygenerował kod emibedded, a następnie końcowe zastąpienie kolejnych liter jedną literą.źródło
-join
i mogłem przysiąc, że łączy się ze spacjami, a nie$null
s, co mnie zaskoczyło, ale po prostu spróbowałem ponownie, zadziałało tak, jak pierwotnie oczekiwałem. Dziwne (i jeszcze raz dzięki)!