Snaking Number Challenge
Zastanawiam się, ile liczb snakingowych jest między 1 a 50 000?
Snaking Numbers w tej grze to liczby, które można wpisać na tradycyjnej klawiaturze numerycznej (format poniżej), przesuwając jeden klawisz w górę, w dół, w lewo lub w prawo.
7 8 9
4 5 6
1 2 3
0
Na przykład, jeśli zaczniesz od cyfry 5, możesz wybrać 4, 6, 8 lub 2 jako następny ważny ruch - jednak 7, 3, 9 i 1 są niedostępne, ponieważ są ustawione po przekątnej do bieżącego klucza . Tak więc, jeśli masz 5, a następnie 2, następnym możliwym do wyboru kluczem jest ponownie 0, 1, 3 lub 5.
W tym ćwiczeniu Code Golf masz wypisać listę wszystkich dodatnich liczb snakingowych od 1 do 50k, wraz z ostateczną liczbą wszystkich liczb, które spełniają kryterium.
Zasady
- Liczby nie mogą zaczynać się od zera.
- Liczby muszą być całymi dodatnimi liczbami całkowitymi.
- Każdy kolejny numer, odczytywany od lewej do prawej, musi „wąż” wokół klawiatury numerycznej.
- Wąż nie może podróżować po przekątnej przez klawisze
- Dostęp do cyfry 0 można uzyskać zarówno z liczb 1, jak i 2
- Liczb nie można sparować (np .: 22)
Przykłady prawidłowych liczb snakingowych:
12369
45201
1254
10102
1
12
987
Przykłady nieprawidłowych liczb
1238 - 8 is not connected
0001 - multiple leading 0s
0101 - leading 0
159 - snake cannot travel diagonally
4556 - duplicate 5
Jak w normalnych Code Golfs, celem jest jak najmniej bajtów!
Zgodnie z moją matematyką i zasadami na twojej liście powinieneś mieć 670 prawidłowych liczb węży oraz 670 wydrukowanych jako ostatni numer.
Odpowiedzi:
K (ngn / k) ,
6057 bajtówWypróbuj online!
!50000
lista0
…49999
1+
dodaj 1 do wszystkich{
}#
filtruj z funkcją w{
}
10\x
cyfry dziesiętne argumentu(
)@
używać jako wskaźników w ...!3 3
para list:(0 0 0 1 1 1 2 2 2;0 1 2 0 1 2 0 1 2)
2*
pomnóż wszystko przez 20 1,'
dołączana0
do pierwszej listy i1
do drugiej+
transponuj (para list -> lista par). daje nam to przybliżone wartości przycisków.-':
odejmij od każdej pary poprzednią parę. posługiwać się0 0
jako elementu wyobrażonego przed pierwszym.1_
upuść pierwszy+
transponowaćx*x:
kwadrat (przypiszx
i pomnóżx
). tutajx
para list - sxs i ∆ys+/
zsumuj dwie listy (element po elemencie)5&
min z 53!
mod 31=
boolowska lista gdzie to jest równe 1*/
produkt (logiczny ”i„)(x;#x:
)
ułóż parę wyniku i długość (#
) wynikuźródło
Galaretka ,
2423 bajtyPełny program, który drukuje listę wszystkich wyników, a następnie liczbę wyników.
Wypróbuj online!
W jaki sposób?
źródło
1.
ocenia się1.5
?Python 3 , 140 bajtów
Wypróbuj online!
Jestem pewien, że ktoś będzie mógł to zrobić za pomocą wyrażenia zamiast ciągu odnośnika.
źródło
Python 2 , 101 bajtów
Wypróbuj online!
Liczba szesnastkowa jest dziesiętna
10120214525632365878969854741
, co koduje każdą uporządkowaną parę cyfr, które mogą pojawić się obok siebie.źródło
JavaScript (V8) ,
112 106104 bajtówZaoszczędzono 2 bajty dzięki @NahuelFouilleul
Pełny program.
Wypróbuj online!
Lub 96 bajtów, jeśli możemy wyprowadzić liczby w odwrotnej kolejności:
Wypróbuj online!
źródło
3
może, ponieważ36
jest już w ciąg6589632145201478
jest także o jeden bajt krótszyStax ,
3735 bajtówUruchom i debuguj na staxlang.xyz!
Było tak miło i krótko, dopóki nie było.
Rozpakowano (42 bajty) i wyjaśnienie
2012365478963258741 koduje klawiaturę. Spójrz na pary sąsiednich cyfr. Być może gdybym mógł uzyskać przyzwoicie krótką alternatywę, która idzie w obie strony dla każdej pary, mógłbym wyciąć osiem bajtów
{{om
.Bez tego końcowego 670 wystarczyłby prosty filtr:
f..!
zamiast{..C_Qf%p
. Może istnieć lepszy sposób radzenia sobie z tą nieprawidłowością. W obu przypadkach takie zachowanie zakresu filtrów jest nieudokumentowane.źródło
PHP , 145 bajtów
Wypróbuj online!
Dla każdej liczby od 1 do 50 000 sprawdza każdą cyfrę tej liczby od lewej do prawej. Jeśli wszystkie cyfry znajdują się na liście prawidłowych cyfr poprzedniej cyfry, numer ten jest drukowany. Na końcu drukuje zakodowany kod 670, ponieważ zajmuje mniej bajtów niż faktyczne zliczanie.
źródło
05AB1E , 23 bajty
Wypróbuj online!
Port galaretki Jonathana Allana .
źródło
₄50*
lub4°5*
kiedy próbowałem wcześniej. I na początku byłem zdezorientowany, dlaczego miałeś€OP
zamiast tegoOP
, ale potem zdałem sobie sprawę, że zamiast tegoüα
byłyby liczby jednocyfrowe (będące pustą listą po ) . :)[] → 0 → 0
[] → [] → 1
4°5*
kiedy możesz5°;
? Jednak bardziej lubię ZAK. I tak, ten przypadek dla liczb jednocyfrowych jest uciążliwy.Perl 5 (
-M5.01
),96, 92 bajtów-4 bajty dzięki @Xcali
TIO
źródło
JavaScript (SpiderMonkey) ,
179173151129 bajtówWypróbuj online!
-22 bajty dziękuję Arnauld -22 bajty dziękuję Dana
wyjaśnienie:
@dana dało również 123 bajtowe rozwiązanie, jeśli możemy najpierw wydrukować 670
źródło
Ruby , 99 bajtów
Wypróbuj online!
źródło
Stax ,
2826 bajtówUruchom i debuguj
Rozpakowane, niepolowane i skomentowane, wygląda to tak.
Uruchom ten
Tajny sos jest w dosłownym brzmieniu
"{<f:[/T8Z"
. Po zablokowaniu wszystkich współrzędnych kodowych razem otrzymujesz12360102589147845690
. Rosnące pary w tym ciągu są prawidłowymi ruchami węża.źródło
15JJ
zamiast219J
by również działał, ale nie sądzę, że możesz zagrać w golfa z tego bajtu, chyba że istnieje stała 1-bajtowa dla15
.Haskell , 118 bajtów
Wypróbuj online!
Pierwsze przejście; Nie jestem dobry w kompresji.
To
s=
się nie liczy, ponieważ tak naprawdę nie musimy wiązać wyniku.Nieskluczony kod .
źródło
Węgiel drzewny , 42 bajty
Wypróbuj online! Link jest do pełnej wersji kodu. Wyjaśnienie:
Przetwarzaj zakres obejmujący od
1
do50,000
rzutowania na ciąg.Odfiltruj te, które mają pary cyfr nie zawarte w skompresowanym ciągu
01478963202125458565236987410
.Wyprowadza pozostałą tablicę i jej długość.
źródło
Japt , 34 bajty
Spróbuj
źródło
Perl 6 , 64 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
~>
nie zostało jeszcze zaimplementowane, w przeciwnym razie możesz to zrobić za pomocą tylko operatorów ciągów, a pole bitowe to ciąg znakówPyth ,
686545 bajtówWypróbuj online!
Inspiracja do skorygowanego procesu wyszukiwania pochodzi z odpowiedzi Stax Khuldraeseth na'Barya , idź, daj im głos!
Edycja 2: Przepisz, aby zapisać kilka bajtów, poprzednia wersja:
Edycja: Golfowane 3 bajty za pomocą wyszukiwania ciągów, poprzednia wersja:
źródło