Liczba pandigitalna jest liczbą całkowitą, która co najmniej raz zawiera każdą cyfrę od 0 do 9. 1234567890, 1902837465000000 i 9023289761326634265 są pandigitalne. Do celów tego wyzwania liczby takie jak 123456789 nie są pandigitalne, ponieważ nie zawierają 0, mimo że 123456789 = 0123456789.
Zróżnicowane pary liczb całkowitych ma parę liczb , tak że b jest Pandigital. b nazywa się wykładnikiem dywersyfikującym .
Wyzwanie: Biorąc pod uwagę liczbę całkowitą , znajdź najmniejszy odpowiadający wykładnik dywersyfikacji . To jest golf golfowy , więc wygrywa najkrótszy program w bajtach.
(Możesz założyć, że istnieje taki wykładnik, to znaczy, że twój program nie otrzyma nieprawidłowych danych wejściowych, takich jak potęga 10.)
Twoje rozwiązanie musi być w stanie obsłużyć co najmniej podane przypadki testowe, ale teoretycznie powinno obsługiwać wszystkie prawidłowe dane wejściowe.
To jest A090493 w OEIS.
Przypadki testowe
2 -> 68
3 -> 39
4 -> 34
5 -> 19
6 -> 20
7 -> 18
8 -> 28
9 -> 24
11 -> 23
12 -> 22
13 -> 22
14 -> 21
15 -> 12
16 -> 17
17 -> 14
18 -> 21
19 -> 17
20 -> 51
21 -> 17
22 -> 18
23 -> 14
24 -> 19
25 -> 11
26 -> 18
27 -> 13
28 -> 11
29 -> 12
30 -> 39
31 -> 11
32 -> 14
33 -> 16
34 -> 14
35 -> 19
36 -> 10
1234567890 -> 1
1234567890 -> 1
.123456789
liczy się jako pandigital? Jest równy0123456789
, co jest zdecydowanie pandigitalem.Odpowiedzi:
Brachylog (v2), 9 bajtów
Wypróbuj online!
To jest przesłanie funkcji. Łącze TIO zawiera opakowanie, które przekształca funkcję w pełny program.
Wyjaśnienie
źródło
Python 2 , 44 bajty
Dane wejściowe muszą być długie, ponieważ
`k`
zachowują się inaczej dla długich i wewnętrznych.Wypróbuj online!
źródło
Perl 6 , 32 bajty
Wypróbuj online!
Dość oczywiste.
Wyjaśnienie
źródło
JavaScript (Node.js) ,
51 4643 bajtówPobiera dane wejściowe jako literał BigInt. Zwraca true zamiast 1 .
Wypróbuj online!
źródło
Rubin , 41 bajtów
Wypróbuj online!
źródło
Haskell, 50 bajtów
Wypróbuj online!
Ta sama liczba bajtów:
źródło
J , 25 bajtów
Wypróbuj online!
Pojedynczy czasownik monadyczny. Dane wejściowe powinny być liczbami całkowitymi o rozszerzonej precyzji (np
2x
.).Jak to działa
źródło
(]+10>#@=@":@^)^:_*
Tcl , 82 bajty
Wypróbuj online!
źródło
llength
82 bajtówRakieta ,
11096 bajtów-14 bajtów dzięki UltimateHawk!
Wypróbuj online!
źródło
(define(f n[b 1])(if(= 10(length(remove-duplicates(string->list(~v(expt n b))))))b(f n(+ b 1))))
Python 3 ,
5247 bajtówdzięki @BMO
Wypróbuj online!
źródło
05AB1E (starsza wersja) ,
109 bajtówZaoszczędzony 1 bajt dzięki Mr. Xcoder
Wypróbuj online!
Wyjaśnienie
źródło
1µINmÙgTQ
- Wypróbuj online!N
. Dzięki!Węgiel drzewny , 19 bajtów
Wypróbuj online! Link jest do pełnej wersji kodu. Wyjaśnienie:
Kilkakrotnie pchnij pusty ciąg do pustej listy, aż nie będzie żadnych cyfr, których moc wejściowa do długości listy nie zawiera.
Wydrukuj długość listy.
źródło
K (ngn / k) , 76 bajtów
Wypróbuj online!
{
}
funkcja z argumentemx
|(99#10)\x
reprezentujemy liczby jako odwrócone listy 99 cyfr dziesiętnych - zrób to z argumentema::
przypisać do zmiennej globalneja
(k nie ma zamknięć. musimya
być globalni, abyśmy mogli używać jej w podfunkcjach){
}{
}\
podczas gdy pierwsza funkcja zwraca falsey, kontynuuj stosowanie drugiej funkcji (czyli pętli while), zachowując wyniki pośredniea*\:x
każda za
cyfr pomnożona przez każdą zx
cyfr („produkt zewnętrzny”)99 99#a*\:x,0
dodaj dodatkową kolumnę zer i ponownie zmień kształt na 99x99, to przesuwa i-ty rząd o i elementy w prawo, wstawiając 0 po lewej stronie (to działa w przypadku testów, dla większych danych wejściowych 99x99 może prowadzić do przepełnienia)+/
suma{+/2 99#,/|0 10\x,0}/
propaguj carry:{
}/
aplikuj do momentu konwergencji0 10\x
divmod przez 10 (para list)|0 10\x
moddiv o 102 99#,/|0 10\x,0
moddiv o 10, z częścią „div” przesuniętą o 1 cyfrę w prawo+/
suma{10>#?(+/|\0<|x)#x}
- sprawdź (nie) pandigital:|x
rewersx
0<
które cyfry są niezerowe|\
częściowe maksima+/
suma - zlicza liczbę wiodących zerx
10>
czy mają mniej niż 10?#
długość sekwencji potęg - oto wynikźródło
PowerShell , 107 bajtów
Wypróbuj online!
Całkiem proste, szkoda, że musimy
[bigint]
wszędzie używać . Bierzemy dane wejściowe$a
, a następnie konfigurujemyfor
pętlę z inicjatorem$b=1
.Każda iteracja zwiększamy
$b
po sprawdzeniu, czy$a ^ $b
(przezpow
) wysłanyt
oCharArray
,sort
ed z-u
nique flagą, następnie-join
ed razem w ciąg jest-n
ote
qual do zakresu0..9
również-join
ed na sznurku.To kęs. Na przykład porównałoby to
7 ^ 5 = 16807 --> "01678"
z"0123456789"
, ustaliłoby, że nie są równe i kontynuował pętlę.Kiedy już nie jesteśmy w pętli, ustaliliśmy, który
$b
pasuje do naszych danych wejściowych, więc zostawmy to w przygotowaniu. Wynik jest niejawny.źródło
Java, 108 bajtów
Wypróbuj online!
Wyjaśnienie
Brutalna siła, zapętlając ^ b, aż znajdzie ciąg zawierający 10 (lub więcej, ale to niemożliwe, ponieważ będzie tylko 0 do 9) unikalnych znaków.
BigDecimal
jest wymagany zarówno dlatego, żeMath.pow
nie jest wystarczająco dokładny (nie sprawdza się w przypadku11
), a także dlatego, żeDouble
domyślnie konwersja łańcucha na ciąg pokazuje notację naukową, co łamie tę metodę znajdowania liczby pandigitalnej.źródło
new java.math.BigDecimal(a).pow(++b).toString()
na(new java.math.BigDecimal(a).pow(++b)+"")
(a funkcje średnika końcowego nie muszą być liczone dla funkcji lambda). Wypróbuj onlinePyth,
108 bajtówWypróbuj online tutaj .
Zaoszczędzono 2 bajty dzięki FryAmTheEggman, poprzedni kod
fq;l{j^QT;
źródło
T
operację zasilania.Galaretka ,
1211 bajtówWypróbuj online!
Jak to działa
źródło
Czysty ,
107101 bajtówWypróbuj online!
Pobiera dane wejściowe jako
Integer
, zwracaInt
źródło
Wolfram Language (Mathematica) , 48 bajtów
Wypróbuj online!
źródło
Attache , 27 bajtów
Wypróbuj online!
Wyjaśnienie
Alternatywy
28 bajtów:
${Generate{Unique@S[x^_]@9}}
29 bajtów:
${Generate{Unique[S[x^_]]@9}}
30 bajtów:
${Generate{#Unique[S[x^_]]>9}}
31 bajtów:
Generate@${{#Unique[S[x^_]]>9}}
32 bajty:
${Generate[{#Unique[S[x^_]]>9}]}
33 bajty:
${If[#Unique[x^y]>9,y,x&$!-~y]}&0
34 bajty:
${If[#Unique[x^y]>9,y,$[x,y+1]]}&0
źródło