Desafio
Dado um número inteiro,, n
como entrada onde 36 >= n >= 2
, produz quantos números de Lynch-Bell existem na base n
.
A saída deve estar na base 10.
Números de Lynch-Bell
Um número é um número da Lynch-Bell se:
- Todos os seus dígitos são únicos (sem repetição de dígitos)
- O número é divisível por cada um de seus dígitos
- Não contém zero como um de seus dígitos
Como todos os dígitos precisam ser exclusivos e você tem um conjunto finito de números de um dígito em cada base, existe um número finito de números Lynch-Bell.
Por exemplo, na base 2, há apenas um número Lynch-Bell 1
, pois todos os outros números repetem dígitos ou contêm um 0.
Exemplos
Input > Output
2 > 1
3 > 2
4 > 6
5 > 10
6 > 10
7 > 75
8 > 144
9 > 487
10 > 548
O Mathematica Online ficou sem memória acima da base 10. Você pode usar o seguinte código para gerar o seu próprio:
Do[Print[i," > ",Count[Join@@Permutations/@Rest@Subsets@Range[#-1],x_/;And@@(x\[Divides]FromDigits[x,#])]&[i]],{i,10,36,1}]
Ganhando
O menor código em bytes vence.
code-golf
number
base-conversion
Beta Decay
fonte
fonte
>10
?f(36)
. Fazer um desafio de código mais rápido com base nisso provavelmente seria interessante.Respostas:
Gelatina , 13 bytes
Experimente online!
Outra solução O (n n ) .
Explicação
fonte
ṖŒPḊŒ!€Ẏ⁼g¥"ḅ¥³S
e mais rápidoGelatina , 15 bytes
Experimente online!
Complexidade .
O(nn)
fonte
O(N^N)
solução não apenas aceitável, mas boa.O(N↑↑N)
O(N^(N+1))
porque verifica a validade de cada número geradoO(N)
? (embora eu não entendo Jelly)N+1
está dentroO(N)
) não implica queN^(N+1)
está dentroO(N^N)
.Java,
222212190 bytes-10 bytes graças a Herman
-22 bytes graças a Kevin
Ungolfed:
Experimente online!
Fica muito lento para grandes números.
fonte
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:
econtinue A;
são 13 bytes enquanto{--c;break;}
é 12. Isso instruiria algum bug que não vejo?i%a
ei/=a
em cada loop. Você pode evitar o conjunto por meio de umint[]
e de verificar quex[b]++<2
java.util.Set<Character>g=new java.util.HashSet<>();
pode serimport java.util.*;
+Set g=new HashSet();
;Long.toString
pode sera.toString
; eLong.parseLong
pode sera.parseInt
.Perl 6 ,
868477 bytes-2 bytes graças a Ramillies
Experimente online!
Funciona para n = 8 no TIO.
fonte
.all
vez deall $_
.Na verdade , 24 bytes
Experimente online!
Explicação
Este programa consiste em duas partes principais: a geração de permutação e o teste de Lynch-Bell. Portanto, esta explicação examinará cada parte separadamente, para maior clareza.
Gerando Permutações
Entrada:
n
(um número inteiro[2, 36]
)Saída: todas as permutações parciais e totais de
[1, n-1]
(sequências contendo valores[1, n-1]
sem repetição, cujo comprimento esteja dentro[1, n-1]
)Teste de Lynch-Bell
Entrada: uma lista de
n
números inteiros base , representada como listas den
dígitos baseSaída: o número de números de Lynch-Bell na base
n
fonte
Mathematica,
827976 bytesfonte
[<parameter>]
a. Comparameter
sendo um número.05AB1E , 22 bytes
Experimente online!
O_O
também era meu rosto quando isso finalmente funcionou.<ÝIBJ0Kæ¦Ù€œ˜
é mais rápido do que o jeito que eu uso para gerar os números na resposta real, mas para de funcionar aleatoriamente por algo maior que 7 (sem motivo aparente?)Explicação
fonte
ε0KÙ}
pode ser0м€Ù
salvar um byte.Perl 5,
8076 bytes (75 +-p
)Abusar
$;
por diversão e lucro. Tempo limite excedido nas entradas> 8.EDIT: -4 bytes, mesclando os dois loops.
fonte
Ruby ,
8065 bytesExperimente online!
Graças a GB por -15 bytes.
fonte
Japonês
-x
,2519 bytes-6 bytes graças a Shaggy
Experimente online!
fonte
-x
sinalizador.Python 3 ,
204174 bytesExperimente online!
Para cada permutação de cada elemento do conjunto de potências do intervalo (1, n) (sem zeros, exclusivo), converta em sequência numérica na base n. Soma tudo o que é divisível por cada dígito, subtrai 1 devido ao conjunto de geradores que gera o conjunto vazio.
-30 bytes graças a @ovs!
fonte
Haskell , 117 bytes
Experimente online! Funciona no TIO até
n=7
antes do tempo limite.fonte
Perl 5 , 108 + 1 (
-p
) = 109 bytesExperimente online!
É um porco. Não tenho certeza se ele fará mais do que a base 8 no TIO sem tempo limite.
fonte
C # (compilador interativo do Visual C #) , 144 bytes
Percorre todos os números de 0 a
ulong.MaxValue
e seleciona aqueles que são números Lynch-Bell na base especificada. Demora uma eternidade para executar, mesmo para 2, embora se você definir a~0UL
parte no loop for para algo menor, poderá obter saída para entrada de até 7 dentro de um minuto no TIO.Experimente online!
fonte