Dodatnia liczba całkowita może być reprezentowana w bazie liczb całkowitych 1 <= b < inf
.
Po przekonwertowaniu na tę bazę ma pewną liczbę wyraźnych cyfr.
Każda dodatnia liczba całkowita w bazie 1
ma 1
wyraźną cyfrę.
Większość liczb całkowitych dodatnich w bazie 2
ma 2
wyraźne cyfry, z wyjątkiem wyjątków postaci 2^n - 1
, które mają tylko cyfry 1
.
Tak więc pierwszą dodatnią liczbą całkowitą, która może być reprezentowana w bazie liczb całkowitych z 1
unikalną cyfrą, 1
a pierwszą, która może być reprezentowana przez 2
odrębne cyfry, jest 2
.
Można powiedzieć, że 1
to pierwsza liczba całkowita z cyfrową różnorodnością 1
i 2
pierwsza liczba całkowita z cyfrową różnorodnością 2
.
Wyzwanie:
Biorąc pod uwagę dodatnią liczbę całkowitą, n
zwraca pierwszą dodatnią liczbę całkowitą (w bazie dziesiątej *), która ma różnorodność cyfrową wynoszącą n
.
* jeśli twój język obsługuje tylko określoną bazę (np. jednoargumentową lub binarną), możesz generować dane wyjściowe w tej bazie.
Twój algorytm musi działać teoretycznie dla każdego dodatniego wejścia liczb całkowitych: może się nie powieść, ponieważ dokładność liczby całkowitej twojego języka jest zbyt mała dla wyniku; ale może nie powieść, ponieważ konwersja podstawowa jest zdefiniowana tylko do pewnego limitu.
Przypadki testowe
input output
1 1
2 2
3 11
4 75
5 694
6 8345
7 123717
17 49030176097150555672
20 5271200265927977839335179
35 31553934355853606735562426636407089783813301667210139
63 3625251781415299613726919161860178255907794200133329465833974783321623703779312895623049180230543882191649073441
257 87678437238928144977867204156371666030574491195943247606217411725999221158137320290311206746021269051905957869964398955543865645836750532964676103309118517901711628268617642190891105089936701834562621017362909185346834491214407969530898724148629372941508591337423558645926764610261822387781382563338079572769909101879401794746607730261119588219922573912353523976018472514396317057486257150092160745928604277707892487794747938484196105308022626085969393774316283689089561353458798878282422725100360693093282006215082783023264045094700028196975508236300153490495688610733745982183150355962887110565055971546946484175232
To jest golf golfowy , najkrótsze rozwiązanie w bajtach wygrywa.
OEIS: A049363 - również najmniejsza liczba pandigitalna w bazie n.
źródło
Python, 40 bajtów
Przetestuj na Ideone .
Jak to działa
Liczba z n wyraźnymi cyframi musi być wyraźnie wyrażona w podstawie b ≥ n . Ponieważ naszym celem jest zminimalizowanie liczby, b również powinno być tak małe, jak to możliwe, więc b = n jest logicznym wyborem.
To pozostawia nam uporządkowanie cyfr 0,…, n-1, aby utworzyć liczbę tak małą, jak to możliwe, co oznacza, że najbardziej znaczące cyfry muszą być tak małe, jak to możliwe. Ponieważ pierwsza cyfra nie może być 0 w reprezentacji kanonicznej, najmniejszą liczbą jest
(1) (0) (2) ... (n-2) (n-1) n = n n-1 + 2n n-3 +… + (N-2) n + (n-1) , które f oblicza rekurencyjnie.
źródło
Python 2,
5446 bajtówTo jest bardzo, bardzo, bardzo ! szybkie, iteracyjne rozwiązanie.
Wypróbuj online
Nie ma rekurencji, więc działa przy dużych nakładach. Oto wynik
n = 17000
(zajmuje 1-2 sekund):http://pastebin.com/UZjgvUSW
źródło
lambda n:n**~-n+sum(i*n**(n+~i)for i in range(2,n))
n=r=input();k=2\nwhile k<n:r=r*n+k;k+=1\nprint r
JavaScript (ES6), 29 bajtów
źródło
J, 9 bajtów
Na podstawie metody @Dennis .
Stosowanie
Wyjaśnienie
Istnieje alternatywne rozwiązanie oparte na wykorzystaniu indeksu permutacji. Biorąc pod uwagę dane wejściowe n , utwórz listę cyfr
[0, 1, ..., n]
i znajdź permutację za pomocą indeksu n ! I przekonwertuj ją jako listę cyfr n . Odpowiednie rozwiązanie w J dla 12 bajtówźródło
[1,0,2,3,...,n-1]
?Rubinowy,
373534 bajtówOdpowiedź na dane pytanie
n
ma formę10234...(n-1)
podstawowąn
. Używającn=10
jako przykład:Zacznij od
n
:10
Pomnóż
n
i dodaj 2:102
Mutliply przez
n
i dodaj 3:1023
I tak dalej.
EDYCJA: Wydaje się, że użycie mapy jest krótsze.
EDYCJA 2: Dzięki za wskazówkę, m-chrzan!
źródło
(2...n)
będzie o bajt krótszy.CJam , 9 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
CJam (9 bajtów)
Demo online
Sekcja
Oczywiście najmniejszą liczbę z cyfrową różnorodnością
n
można znaleźć poprzez konwersję[1 0 2 3 ... n-1]
bazy w bazien
. Należy jednak pamiętać, że wbudowana konwersja podstawowa nie wymaga, aby cyfry znajdowały się w zakresie0 .. n-1
.Zauważ, że w szczególnym przypadku
n = 1
otrzymujemy1 [0] 1 1 tb
dawanie,1 [0 1] b
które jest1
.źródło
Haskell, 31 bajtów
Konwertuje listę
[n,2,3,...,n-1]
na bazęn
przy użyciu metody Hornera poprzez zwijanie. Mniej golfowa wersja tego znajduje się na stronie OEIS .Dzięki nim za 3 bajty!
źródło
f
?), Aby była poprawnym rozwiązaniem dla golfa? (po prostuf
nie ma go w dalszej części kodu)\n->fold1...
taka sama, jak jej nazwa. Możesz napisać funkcję bez punktów, w której zmienna wejściowa nie ma nazwy, łącząc podfunkcje, ale byłoby to okropne tutaj z trzema odniesieniami don
.foldl
i zaczynać odn
:f n=foldl((+).(*n))n[2..n-1]
05AB1E , 9 bajtów
Wypróbuj online!
Wyjaśnienie
n = 4
używane na przykład.źródło
C ++ -
18155Już miał opublikować to naprawdę fajne rozwiązanie, używając
<numeric>
:i wtedy zdałem sobie sprawę, że jest o wiele łatwiej:
źródło
Perl 6 ,
34 3130 bajtówPrzetłumaczone z przykładu Haskell na stronie OEIS .
[&(…)]
zamienia…
się w lokalnego operatora infix[…]
Pokazano powyżej zwojów op Infix do zagięcia (w lewo lub w prawo w zależności od asocjatywnego operatora)Rozszerzony:
Stosowanie:
źródło
Brain-Flak ,
8476 bajtówDzięki Wheat Wizard za grę w golfa 8 bajtów
Wypróbuj online!
Wyjaśnienie
Program wypycha wartości z
0
don-1
stosu zastępuje górną0
i za1
pomocą1
oraz0
. Następnie mnoży górę stosu przezn
i dodaje wartość poniżej, aż na stosie pozostanie tylko jedna wartość.Zasadniczo znajduje cyfry dla najmniejszej liczby w bazie,
n
która zawieran
różne cyfry (dlan
> 1 zawsze ma postać1023...(n-1)
). Następnie oblicza liczbę na podstawie cyfr i podstawy.Kod z adnotacjami
źródło
{}{}(()(<()>))([][()])
ze(<{}{}>)([(())][])
aby zapisać czterech bajtów(<{}{}>)((()))
aby zaoszczędzić cztery kolejne bajtyJulia, 26 bajtów
Wypróbuj online!
źródło
ShapeScript , 25 bajtów
Dane wejściowe są jednostkowe, dane wyjściowe są dziesiętne. Wypróbuj online!
źródło
PHP, 78 bajtów
Wersja online
60 bajtów działa tylko do n = 16 z precyzją w przypadkach testowych
Dla n = 144 INF
n = 145 NAN
źródło
k, 12 bajtów
Na podstawie odpowiedzi Dennisa .
źródło
JavaScript (ES6), 39 bajtów
Nie używa
=>
źródło