Scena jest:
Peter jest na siłowni ze swoim kumplem Brianem, gdy Brian nagle potrzebuje pilnie inhalatora. Brianowi udaje się przekazać Peterowi kod do zamka szyfrowego, zanim upadnie na podłogę.
W chwili, gdy Peter dociera do szafki Briana i widzi, na co wskazuje wskaźnik, Stewie zaskakuje go i rozpyla pełną puszkę pieprzu w twarz, oślepiając Petera.
Peter musi teraz spróbować otworzyć zamek, nie patrząc na niego. Zaczyna przekręcać pokrętło w prawo, licząc cyfry, gdy je podaje. Następnie, pod prawidłowym numerem, zaczyna przekręcać pokrętło w lewo, wciąż licząc, a na koniec obraca je w prawo, aż zamek się otworzy.
Wyzwanie:
Napisz funkcję / program, który pobiera dwa dane wejściowe, kombinację od Briana i pozycję wskaźnika. Wypisz liczby, które Peter musi policzyć.
Zasady:
- Kombinacja i pozycja wskaźnika muszą być osobnymi argumentami.
- Dane wejściowe mogą pochodzić z wiersza polecenia lub jako argumenty funkcji.
- Wyjście musi zostać wydrukowane na ekranie / w inny sposób wyświetlone (nie do pliku)
- Załóżmy, że pozycja początkowa nie jest taka sama jak pierwsza liczba i że wszystkie trzy liczby w kombinacji są unikalne
- Jest to zamek pokazany na poniższym obrazku, z możliwymi numerami: 0-39.
Instrukcje:
Aby otworzyć blokadę poniżej, musisz postępować zgodnie z instrukcjami:
- Musisz znać swój kod. Załóżmy, że na razie (38, 16, 22).
- Obróć pokrętło 3 razy w prawo (trzykrotnie mijając początkowy numer), a następnie zatrzymaj się, gdy pierwszy numer (38) zrówna się ze wskaźnikiem
- Obróć pokrętło 1 o pełny obrót w lewo, mijając pierwszy numer, i zatrzymaj się, gdy drugi numer (16) zrówna się ze wskaźnikiem.
- Obróć pokrętło w prawo i zatrzymaj się, gdy trzeci numer (22) zrówna się ze wskaźnikiem
- Pociągnij blokadę w dół
Przykład:
Input
38 16 22
33
Output
33 32 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 39 38 39 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22
Obowiązują standardowe zasady gry w golfa.
Rozwiązania, które zostaną opublikowane później, nadal mogą wygrać, jeśli są krótsze niż odpowiedź Dennisa.
function combination(code){alert("Help! Someone open this locker, the combination is "+code+"!")}
Odpowiedzi:
CJam,
5239 bajtówWypróbuj online w interpretatorze CJam .
Jak to działa
źródło
Groovy,
189175 bajtówZakłada, że wskaźnik jest przekazywany jako arg0, a kombinacja jest przekazywana jako arg1, arg2 i arg3 w wierszu poleceń ...
źródło
Perl 5 , 129 + 1 (-a) = 130 bajtów
Wypróbuj online!
W jaki sposób?
źródło
Python 2, 262 bajty
Czuje się tak długo. Ale dzieje się również dużo.
Wypróbuj online!
Myślę, że mogę lepiej połączyć niektóre części w mojej ostatniej linii, ale wciąż jestem nowy w golfie i nie wiem, jak poradzić sobie z tą kombinacją list w krótki sposób.
Jakieś pomysły na poprawę tego?
źródło
Haskell ,
135112 bajtówWypróbuj online!
Zaoszczędzono 23 bajty dzięki Laikoni
źródło
l s t=
Deklarując operator infixs#t=
. Działa również na więcej niż dwa argumenty(a%b)c s=
.s+1
.