Wyzwanie
Biorąc pod uwagę liczbę całkowitą, n
jako dane wejściowe 36 >= n >= 2
, należy podać liczbę liczb Lynch-Bell w bazie n
.
Wyjście musi znajdować się w bazie 10.
Numery Lynch-Bell
Liczba jest liczbą Lynch-Bell, jeśli:
- Wszystkie jego cyfry są unikalne (bez powtarzania cyfr)
- Liczba jest podzielna przez każdą z jej cyfr
- Nie zawiera zera jako jednej z jego cyfr
Ponieważ wszystkie cyfry muszą być unikalne, a ty masz skończony zestaw liczb jednocyfrowych w każdej bazie, istnieje skończona liczba liczb Lynch-Bell.
Na przykład w bazie 2 jest tylko jeden numer Lynch-Bell 1
, ponieważ wszystkie inne liczby albo powtarzają cyfry, albo zawierają 0.
Przykłady
Input > Output
2 > 1
3 > 2
4 > 6
5 > 10
6 > 10
7 > 75
8 > 144
9 > 487
10 > 548
Mathematica Online zabrakło pamięci powyżej podstawy 10. Możesz wygenerować własny kod za pomocą następującego kodu:
Do[Print[i," > ",Count[Join@@Permutations/@Rest@Subsets@Range[#-1],x_/;And@@(x\[Divides]FromDigits[x,#])]&[i]],{i,10,36,1}]
Zwycięski
Najkrótszy kod w bajtach wygrywa.
code-golf
number
base-conversion
Rozpad beta
źródło
źródło
>10
?f(36)
. Podejmij wyzwanie najszybszego kodu w oparciu o to prawdopodobnie byłoby interesujące.Odpowiedzi:
Galaretka , 13 bajtów
Wypróbuj online!
Kolejne rozwiązanie O (n n ) .
Wyjaśnienie
źródło
ṖŒPḊŒ!€Ẏ⁼g¥"ḅ¥³S
i szybciejGalaretka , 15 bajtów
Wypróbuj online!
Złożoność .
O(nn)
źródło
O(N^N)
rozwiązanie nie tylko do zaakceptowania, ale i dobre.O(N↑↑N)
O(N^(N+1))
ponieważ sprawdza ważność każdej wygenerowanej liczbyO(N)
? (chociaż nie rozumiem Jelly)N+1
jest w środkuO(N)
) nie oznacza, żeN^(N+1)
jest wO(N^N)
.Java,
222212190 bajtów-10 bajtów dzięki Hermanowi
-22 bajty dzięki Kevinowi
Nie golfowany:
Wypróbuj online!
Przy bardzo dużych liczbach działa bardzo wolno.
źródło
a->{int c=0,i=1;A:for(;i<Math.pow(a,a);i++){java.util.Set<Character>g=new java.util.HashSet<>();for(char b:Long.toString(i,a).toCharArray())if(!g.add(b)|b<49||i%Long.parseLong(b+"",a)>0)continue A;c++;}return c;}
A:
icontinue A;
ma 13 bajtów, podczas gdy{--c;break;}
jest 12. Czy to poinstruuje jakiś błąd, którego nie widzę?i%a
ii/=a
każdą pętlą. Możesz tego uniknąć, używającint[]
i sprawdzając, żex[b]++<2
java.util.Set<Character>g=new java.util.HashSet<>();
może byćimport java.util.*;
+Set g=new HashSet();
;Long.toString
może byća.toString
; iLong.parseLong
może byća.parseInt
.Perl 6 ,
868477 bajtów-2 bajty dzięki Ramillies
Wypróbuj online!
Działa dla n = 8 na TIO.
źródło
.all
zamiastall $_
.Właściwie 24 bajty
Wypróbuj online!
Wyjaśnienie
Program składa się z dwóch głównych części: generowania permutacji i testu Lynch-Bell. To objaśnienie obejrzy każdą część osobno, dla większej przejrzystości.
Generowanie permutacji
Dane wejściowe:
n
(liczba całkowita w[2, 36]
)Wyjście: wszystkie częściowe i całkowite permutacje
[1, n-1]
(sekwencje zawierające wartości[1, n-1]
bez powtórzeń, których długość jest w[1, n-1]
)Test Lynch-Bell
Dane wejściowe: lista
n
liczb całkowitych podstawowych, reprezentowana jako listy liczb podstawowychn
cyfr podstawowychDane wyjściowe: liczba liczb Lynch-Bell w bazie
n
źródło
Mathematica,
827976 bajtówźródło
[<parameter>]
po niej. Zparameter
jest liczbą.05AB1E , 22 bajty
Wypróbuj online!
O_O
była też moja twarz, kiedy to w końcu zadziałało.<ÝIBJ0Kæ¦Ù€œ˜
jest szybszy niż sposób, w jaki generuję liczby w rzeczywistej odpowiedzi, ale losowo przestaje działać dla czegoś większego niż 7 (bez wyraźnego powodu?)Wyjaśnienie
źródło
ε0KÙ}
może być0м€Ù
zapisanie bajtu.Perl 5,
8076 bajtów (75+-p
)Nadużywanie
$;
dla zabawy i zysków. Przekroczono limit czasu na wejściach> 8.EDYCJA: -4 bajty poprzez połączenie dwóch pętli.
źródło
Rubinowy ,
8065 bajtówWypróbuj online!
Dzięki GB za -15 bajtów.
źródło
Japt
-x
,2519 bajtów-6 bajtów dzięki Shaggy
Wypróbuj online!
źródło
-x
flagą.Python 3 ,
204174 bajtyWypróbuj online!
Dla każdej permutacji każdego elementu zestawu mocy z zakresu (1, n) (bez zer, unikatowe), przekonwertuj na ciąg liczbowy na bazę n. Zsumuj wszystkie, które są podzielne przez każdą cyfrę, odejmij 1 ze względu na wygenerowanie pustego zestawu przez powerset.
-30 bajtów dzięki @ovs!
źródło
Haskell , 117 bajtów
Wypróbuj online! Działa na TIO
n=7
przed upływem limitu czasu.źródło
Perl 5 , 108 + 1 (
-p
) = 109 bajtówWypróbuj online!
To świnia Nie jestem pewien, czy zrobi więcej niż podstawa 8 na TIO bez przekroczenia limitu czasu.
źródło
C # (interaktywny kompilator Visual C #) , 144 bajty
Przechodzi przez wszystkie liczby od 0 do
ulong.MaxValue
i wybiera te, które są liczbami Lynch-Bell w określonej bazie. Działa wiecznie, nawet dla 2, jeśli jednak ustawisz~0UL
część w pętli for na coś mniejszego, możesz uzyskać wynik dla wejścia do 7 w ciągu minuty w TIO.Wypróbuj online!
źródło