Zablokowałeś swój rower 3-cyfrowym zamkiem szyfrowym. Teraz chcesz wybrać się na przejażdżkę i odblokować ją za pomocą następującego programu.
Wkład
1. parametr
Kombinacja cyfr zamka w stanie zablokowanym . Musi różnić się od drugiego parametru (= kombinacja stanu odblokowanego ). (Albo twój rower może zostać skradziony!)
Zakres 000..999. Zera wiodącego nie można pominąć.
2. parametr
Kombinacja cyfr zamka w stanie odblokowanym . Ta wartość jest twoim celem.
Zakres 000..999. Zera wiodącego nie można pominąć.
Wydajność
Lista każdego stanu zamka szyfrowego po każdym „obrocie”, w tym stan początkowy (który zawsze jest pierwszym parametrem) i ostatni krok (który zawsze jest drugim parametrem).
Algorytm
Zaczynasz „obracać” pierwszą cyfrę jeden po drugim, aż do uzyskania prawidłowej cyfry w stanie odblokowanym . Ponieważ jednak znasz cały kod odblokowujący, obracasz cyfrę w kierunku, w którym potrzebujesz najmniejszej liczby obrotów, aby osiągnąć cyfrę w stanie odblokowanym . W przypadku remisu możesz wybrać dowolny kierunek.
Po osiągnięciu poprawnej pierwszej cyfry rozpocznij tę samą procedurę od drugiej, a następnie od trzeciej.
Kolejność cyfr należy rozumieć jako okrąg:
... 9 0 1 2 3 4 5 6 7 8 9 0 1 2 ...
Oznacza to, że najmniejsza liczba obrotów od 1 do 9 nie jest
1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7 -> 8 -> 9
= 8
ale
1 -> 0 -> 9
= 2
Notatki
- Możesz polegać na domyślnych regułach we / wy
- Możesz zmienić kolejność parametrów.
Przykłady
Przykład 1, poprawny
Input: 999 001
Output:
999
099
009
000
001
Przykład 2, poprawny
Input: 000 292
Output:
000
100
200
290
291
292
Przykład 3, złe wyjście
Input: 999 121
Wrong output:
999
899 // Wrong because wrong rotation direction.
799
699
...
Correct output:
999
099
199
109
119
129
120
121
Przykład 4, nieprawidłowe wprowadzanie
Input: 1 212 // Wrong because no leading zeros.
To jest golfowy kod, który wygrywa najkrótsza odpowiedź.
źródło
Odpowiedzi:
Python 2 ,
1131071059995 bajtówWypróbuj online!
Pobiera dane wejściowe jako listy liczb całkowitych
Zapisano:
źródło
//
Galaretka , 15 bajtów
Wypróbuj online!
W jaki sposób?
źródło
JavaScript (ES6),
73 7270 bajtówZaoszczędzono 2 bajty dzięki @tsh
Pobiera dane wejściowe jako 2 tablice cyfr w składni curry
(a)(b)
. Zwraca ciąg.Wypróbuj online!
Skomentował
źródło
d/6&1^d>0||9
->d/5>5/d?9:1
Galaretka , 25 bajtów
Wypróbuj online!
Pełny program
źródło
Python 2 ,
10197 bajtówWypróbuj online!
3 bajty dzięki Joelowi .
Pobiera dane wejściowe jako listy int.
źródło
//
jest taki sam jak/
, więc uzyskano dodatkowy bajt.for x,y,i in zip(a,c,[0,1,2])
jeśli pamiętam ...Galaretka , 30 bajtów
Wypróbuj online!
Dyadyczny link przyjmujący za lewy argument kod odblokowujący, a po prawej bieżący stan zablokowany, oba jako listy liczb całkowitych.
To wydaje się zbyt długie!
źródło
PHP , 114 bajtów
Wypróbuj online!
Moje rozwiązanie prawdopodobnie jest do bani, ale to najlepsze, o czym mogę teraz myśleć!
źródło
Węgiel drzewny , 48 bajtów
Wypróbuj online! Link jest do pełnej wersji kodu. Wyjaśnienie:
Wydrukuj pozycję początkową.
Zmień ciąg pozycji początkowej na tablicę cyfr numerycznych do celów obliczeniowych.
Zapętlaj kolejno każdą cyfrę.
Oblicz liczbę obrotów potrzebną do odblokowania tej cyfry. Jest liczbą od
-5
na4
którym-5
oznacza 5 obrotach dół oraz4
urządzenia 4 obroty w górę.Pętla nad każdym obrotem.
Zaktualizuj cyfrę zgodnie ze znakiem obrotu.
Wypisz cyfry jako ciąg znaków w nowym wierszu.
źródło
T-SQL 2008, 170 bajtów
Dodałem kilka podziałów liniowych, aby były czytelne
Wypróbuj online
źródło
C # (interaktywny kompilator Visual C #) , 101 bajtów
Wypróbuj online!
źródło
J , 36 bajtów
Wypróbuj online!
Dodam wyjaśnienie jutro.
źródło
MATLAB,
10089 bajtówInne podejście (użycie niejawnego rozszerzenia do utworzenia macierzy odejmowania) zmniejsza 11 bajtów:
[Oryginalne rozwiązanie 100 bajtów]
Oba są wywoływane przez przekazywanie danych wejściowych jako tablice 3-elementowe, np
f([9 1 1], [2 3 2])
źródło
Java (JDK) , 139 bajtów
Wypróbuj online!
Ten sam algorytm, co wszyscy, działał inaczej, ponieważ Java
System.out.println
jest dość droga!źródło
C (brzęk) , 125 bajtów
Wypróbuj online!
źródło
Kotlin , 162 bajty
Wypróbuj online!
źródło