Zgodnie ze stroną Wikipedii pod numerem 69 należy zauważyć, że 69 2 = 4761 i 69 3 = 328,509 razem używają wszystkich cyfr dziesiętnych. Liczba 69 jest w rzeczywistości najniższą liczbą, która spełnia tę właściwość.
Z podobnego powodu 32 043 jest niezwykłe: 32 043 2 = 1 026 753 849 używa wszystkich cyfr dziesiętnych.
Jeśli będziemy nadal rozmawiać o liczbach, które są interesujące w ten sposób, potrzebujemy notacji.
Dla większości liczb całkowitych n , potęgi n 2 ,…, n k użyją wszystkich dziesięciu cyfr dziesiętnych (nie licząc początkowych zer) przynajmniej raz dla wystarczająco dużych wartości k . Jeśli istnieje, będziemy nazywać najniższą takich K z przytulać ( skumulowana dziesiętny cyfr najmniej wykładnik ) z n .
Zadanie
Napisz program lub funkcję, która akceptuje pojedynczą nieujemną liczbę całkowitą n jako dane wejściowe oraz oblicza i zwraca swój CUDDLE .
Jeśli n nie ma CUDDLE , możesz zwrócić wszystko oprócz dodatniej liczby całkowitej, w tym błąd lub pusty ciąg, o ile kod w końcu się zatrzyma.
Przypadki testowe
Lewa kolumna jest wprowadzana, prawa kolumna jest wyprowadzana.
0
1
2 15
3 10
4 10
5 11
6 12
7 7
8 5
9 6
10
11 7
12 6
13 6
14 7
15 9
16 5
17 7
18 4
19 5
20 15
26 8
60 12
69 3
128 3
150 9
200 15
32043 2
1234567890 3
Dodatkowe zasady
Twój kod musi działać dla wszystkich danych wejściowych do 255 .
Zauważ, że wiąże się to z obsługą dość dużych liczb. 20 15 jest już większy niż 2 64 .
Jeśli wydrukujesz wynik, po nim może pojawić się linia.
Obowiązują standardowe zasady gry w golfa .
26->8
ponieważ jest to najmniejszy przykład, w którymn^1
podanie błędnej odpowiedzi (6
błędu) popełniłem w kodzie.Odpowiedzi:
Pyth, 16 bajtów
Wypróbuj online: pakiet demonstracyjny lub testowy
Podobnie jak inne rozwiązania, używam 15 jako górnej granicy. Wierzę, że jest to również maksymalny PRZYSTAWKA . Przetestowałem wszystkie liczby do 10.000.000, i nie ma numeru z CUDDLE większym niż 15.
Liczby z CUDDLE > = 10 są już dość rzadkie. Jedynymi liczbami z CUDDLE 15 są liczby
2*10^k
. Nie ma liczb z CUDDLE 14 lub 13, CUDDLE 12 pojawia się tylko dla liczb6*10^k
, CUDDLE 11 tylko dla5*10^k
.Myślę więc, że ten kod działa idealnie dla dowolnej liczby naturalnej.
Wyświetla komunikat o błędzie, jeśli nie ma rozwiązania.
Wyjaśnienie:
źródło
Python 2, 56
Rozwiązanie rekurencyjne. Zlicza wykładniki,
i
zaczynając od2
i kumuluje cyfry mocyn**i
w ciągus
. Kiedys
ma wszystkie dziesięć cyfr, zwracaTrue
, co jest równe1
, a w przeciwnym razie powtarza się i dodaje1
. Okazało się to krócej niż powróti
.Wywołanie funkcji na numer bez CUDDLE kończy się na
Internal error: RangeError: Maximum call stack size exceeded
. Liczby do255
tego wyjściowe nigdy nie wymagają więcej niż 15 iteracji.Ze względu na irytujący nawyk dodawania
L
dużej liczby przez Python 2 , faktycznie inicjalizujemy ciąg cyfrL
i sprawdzamy, czy ustawiony rozmiar wynosi co najmniej 11. Python 3 zapisuje 2 znaki, nie potrzebując ich, ale traci 3 znaki przy użyciustr
odwrotnych znaków . Python 3.5 zapisuje 2 dodatkowe znaki z rozpakowaniem zestawu, oszczędzając w sumie znak ponad Python 2:źródło
Ruby,
6765 znakówDziała niemal natychmiastowo dla wszystkich przypadków testowych, nawet tych> 255.
Błędy liczb bez CUDDLE.
Wyjaśnienie:
źródło
CJam, 28 bajtów
Wypróbuj online
Opiera się to na tym, że CUDDLE (jeśli istnieje) nigdy nie jest większy niż 15 dla zakresu wejściowego, co po raz pierwszy zaobserwował @xnor.
Prawdopodobnie istnieje lepszy sposób na uzyskanie wyniku dla przypadku, w którym nie ma rozwiązania. Zaktualizuję, jeśli coś wymyślę.
Wyjaśnienie:
źródło
Mathematica, 103 bajty
Wygląda na to, że tylko potęgi 10 nie miałyby ostatecznie PRZYSTAWEK, więc są pomijane. Funkcja przechowuje listę widocznych cyfr i zatrzymuje się, gdy nie ma już zer.
Wynik:
źródło
log_10(n)
jest to irracjonalne, pod warunkiem ,k
że istnieje jakakolwiek dodatnia liczba całkowita ,m
taka, że dziesiętna reprezentacjan^m
zaczyna się odk
. Co oznacza, że pomijanie potęg 10 (i 0) jest w porządku :)JavaScript (ES6) 188
Nieźle jak na język, który jest ograniczony do 53-bitowych liczb całkowitych.
Przetestuj poniższy fragment kodu w przeglądarce, która implementuje EcmaScripts 6, w tym funkcje strzałek i operator rozprzestrzeniania (AFAIK Firefox)
źródło
PowerShell, 94 bajty
Nie ma w tym nic sprytnego, tylko lamówka
sort -U[nique]
jest dobrym sposobem na apeset()
funkcjonalność Pythona do tego rodzaju zastosowań, bez wyraźnego dodawania elementów do tablicy mieszającej.na przykład
źródło
gawk 4, 73 + 5 dla flag = 78 bajtów
Dla każdego cyfra
0
bis9
napotka w kompetencji na wejściu, to ustawia bit reprezentujący2^digit
wa
, dopóki nie okaże się, że pierwsze 10 cyfr (a == 1023 == 2^10-1
) lub nie było więcej niż 15 powtórzeń.Musi być wywołany z pustym separatorem pola i flagą -M dla dużych liczb.
Bawiąc się tym, znalazłem następujące sekwencje dla różnych CUDDLE:
źródło