Wprowadzenie
Oryginalna strona z zadaniami z Advent of Code 2016. Zadanie z artykułu dostępne jest pod adresem http://adventofcode.com/2016/day/21
Advent of Code to inicjatywa, w której codziennie w trakcie adwentu publikowane są zadania dla programistów. Ich rozwiązywanie pomaga rozwijać umiejętności nie tyko początkującym programistom. W tej serii artykułów pokazuję zadania opublikowane w ramach Advent of Code 2016 wraz z przykładowym rozwiązaniem.
Pobierz opracowania zadań z rozmów kwalifikacyjnych
Przygotowałem rozwiązania kilku zadań algorytmicznych z rozmów kwalifikacyjnych. Rozkładam je na czynniki pierwsze i pokazuję różne sposoby ich rozwiązania. Dołącz do grupy ponad 6147 Samouków, którzy jako pierwsi dowiadują się o nowych treściach na blogu, a prześlę je na Twój e-mail.
Dzień 21 zadanie 1
Wczoraj znalazłeś adres IP komputera, który nie jest blokowany przez firewall. Komputer, do którego systemu próbujesz się włamać używa dziwnego mechanizmu mieszającego do przechowywania haseł. Mimo to, nie powinno nastręczyć Ci żadnych trudności utworzenie samemu takiego hasła, które możesz dodać do systemu. Wystarczy, że zaimplementujesz odpowiednie przekształcenia.
Operacja mieszająca składa się z serii operacji (dokładna ich lista jest wejściem do programu). Zaczynając od hasła, które ma być pomieszane aplikujesz każdą operację kolejno. Pojedyncze operacje opisane są poniżej:
swap position X with position Y
oznacza, że litery pod indeksamiX
iY
(zaczynając od0
) powinny być zamienione,swap letter X with letter Y
oznacza, że literyX
iY
powinny być zamienione (niezależnie na jakich pozycjach się znajdują),rotate left/right X step(s)
oznacza, że cały łańcuch znaków powinien być “przesunięty” w lewo lub prawo oX
znaków, na przykład przesunięcie łańcuchaabcd
o jedną literę w prawo da Cidabc
,rotate based on position of letter X
oznacza, że cały łańcuch znaków powinien być “przesunięty” w prawo. To o ile powinien być przesunięty zależy od indeksu literyX
zanim łańcuch będzie przesunięty. Jak poznasz indeks literyX
przesuń łańcuch znaków o jedną pozycję w prawo, dodatkowo przesuń łańcuch w prawo o indeks na którym znajduje się literaX
. Jeśli indeks był równy bądź większy4
przesuń łańcuch o jeszcze jedną pozycję w prawo,reverse positions X through Y
oznacza, że zakres pomiędzyX
iY
(włączając oba indeksy) powinien być odwrócony,move position X to position Y
oznacza, że litera, która jest pod indeksemX
powinna być usunięta z łańcucha i włożona pod indeksY
.
Na przykład, zakładając, że hasło początkowe to abcde
i chcesz przeprowadzić następującą serię przekształceń:
swap position 4 with position 0
zamienia pierwszą i ostatnią literę, otrzymujeszebcda
, wynik ten jest wejściem do kolejnego kroku,swap letter d with letter b
zamienia literęd
z literąb
, w wyniku czego otrzymaszedcba
,reverse positions 0 through 4
sprawia, że cały łańcuch znaków jest odwrócony produkującabcde
,rotate left 1 step
przesuwa w lewo cały łańcuch o jedną literę, w wyniku tego przekształcenia pierwsza litera ląduje na końcubcdea
,move position 1 to position 4
usuwa literę na pozycji1
(c
), wkładając ją na pozycję4
(na koniec łańcucha):bdeac
,move position 3 to position 0
usuwa literę z pozycji3
(a
), wkładając ją na pozycję0
(początek łańcucha):abdec
,rotate based on position of letter b
znajduje indeks literyb
(1
), później rotuje cały łańcuch o1
plus indeks litery (2
):ecabd
,rotate based on position of letter d
znajduje indeks literyd
(4
), później rotuje cały łańcuch o1
plus indeks litery (4
), dodając dodatkową jedynkę ponieważ indeks był większy bądź równy4
, finalnie rotuje łańcuch o6
pozycji:decab
.
Po tych wszystkich krokach, hasło to decab
.
Teraz Twoja kolej. Musisz wygenerować hasło, którego użyjesz aby dostać się do systemu. Zakładając, że lista przekształceń znajduje się w tym pliku, a hasło początkowe to abcdefgh
jakie będzie hasło po przekształceniach?
Podsumowanie
Zachęcam do dalszej zabawy z drugim zadaniem, jego treść pokaże się na stronie AoC2016 po rozwiązaniu pierwszego. Takie zadania pomagają w rozwijaniu umiejętności nie tylko początkujących programistów. Jeśli będziesz miał jakikolwiek problem z rozwiązaniem zadania możesz rzucić okiem do przykładowego rozwiązania, jednak zrób to raczej w ostateczności.
Na koniec mam do Ciebie prośbę – podziel się linkiem do artykułu ze znajomymi, może Oni także będą chcieli pomóc Świętemu Mikołajowi ;) ? Jeśli nie chcesz ominąć kolejnych artykułów proszę zapisz się do mojego newslettera i polub stronę na Facebooku. Do następnego razu!
Pobierz opracowania zadań z rozmów kwalifikacyjnych
Przygotowałem rozwiązania kilku zadań algorytmicznych z rozmów kwalifikacyjnych. Rozkładam je na czynniki pierwsze i pokazuję różne sposoby ich rozwiązania. Dołącz do grupy ponad 6147 Samouków, którzy jako pierwsi dowiadują się o nowych treściach na blogu, a prześlę je na Twój e-mail.
Zostaw komentarz