Alguns divisores de números inteiros positivos realmente se odeiam e não gostam de compartilhar um ou mais dígitos comuns.
Esses números inteiros são chamados de números de divisor hostis ( HDN )
Exemplos
O número 9566
tem 4
divisores: 1, 2, 4783 and 9566
(como você pode ver, nenhum deles compartilha o mesmo dígito ).
Assim, 9566 é um H ostile D iVisor N úmero
O número NÃO9567
é HDN porque seus divisores ( ) compartilham alguns dígitos comuns. 1, 3, 9, 1063, 3189, 9567
Aqui estão os primeiros HDN
1,2,3,4,5,6,7,8,9,23,27,29,37,43,47,49,53,59,67,73,79,83,86,87,89,97,223,227,229,233,239,257,263,267,269,277,283,293,307,337...
Tarefa
A lista acima continua e sua tarefa é encontrar o enésimo HDN
Entrada
Um número inteiro positivo n
de 1
a4000
Saída
O nth
HDN
Casos de teste
Aqui estão alguns casos de teste indexados em 1 .
Indique qual sistema de indexação você usa em sua resposta para evitar confusão.
input -> output
1 1
10 23
101 853
1012 26053
3098 66686
4000 85009
Isso é código-golfe , então a pontuação mais baixa em bytes vence.
EDITAR
Boas notícias! Enviei minha sequência para o OEIS e ...
Os números dos divisores hostis agora são OEIS A307636
fonte
94699599289
, o quadrado de307733
, possui divisores[1, 307733, 94699599289]
que mostram que é um HDN. Parece hostil para mim.49
? Fatores[1, 7, 49]
qualifica como hostil ... ou, bem,4
:[1, 2, 4]
...1
com a lista do divisor[1]
. (Talvez o HDN grande seja mais interessante?)49
como tendo divisores[7, 7]
, que não apenas compartilham dígitos, mas são os mesmos dígitos.49
tem fatores[1, 7, 49]
Respostas:
05AB1E ,
1210 bytes-2 bytes graças a @Emigna .
Indexado 1
Experimente online ou verifique a maioria dos casos de teste (os dois últimos casos são omitidos, pois atingem o tempo limite).
Explicação:
fonte
µNNÑ€ÙSDÙQ
por 10.µ
, para que você me salve o problema. ;)Python 2 , 104 bytes
Experimente online!
Indexado a 0.
fonte
JavaScript (ES6), 78 bytes
1 indexado.
Experimente online!
Versão mais rápida, 79 bytes
Experimente online!
Quão?
Dado um número inteirok>0 , construímos a string s como a concatenação de todos os divisores de k .
Comok é sempre um divisor de si mesmo, s é inicializado como k (coagido a uma string) e o primeiro divisor que tentamos é d=k−1 .
Exemplos
"956647832".match(/[1]/)
"9567".match(/[3189]/)
Comentado
Esta é a versão sem
eval()
, para facilitar a leiturafonte
Gelatina , 10 bytes
Experimente online!
-1 byte graças a ErikTheOutgolfer
Recebe informações do STDIN, o que é incomum para o Jelly, mas normal onde
nfind
é usado.Indexado em 2
fonte
nfind
mudou a indexação lol⁼Q$
é o mesmo queQƑ
.Perl 6 , 53 bytes
Experimente online!
1 indexado.
/(.).*$0/
corresponde a qualquer número com um dígito repetido.grep $_ %% *, 1 .. $_
retorna uma lista de todos os divisores do número que$_
está sendo verificado no momento para associação à lista.[~]
concatena todos esses dígitos juntos e, em seguida,R!~~
combina a string à direita com o padrão à esquerda. (~~
é o operador de correspondência usual,!~~
é a negação desse operador eR
é um metaoperador que troca os argumentos de!~~
.)fonte
Python 2 (PyPy) ,
117114 bytesUsa indexação 1
Experimente online!
fonte
Wolfram Language 103 bytes
Usa indexação 1. Estou surpreso por ter exigido muito código.
fonte
(n=t=1;While[t<=#,If[!Or@@IntersectingQ@@@Subsets[IntegerDigits@Divisors@n,{2}],t++];n++];n-1)&
não estou planejando postar uma resposta, portanto deixarei isso aquiPowerShell , 112 bytes
Experimente online!
Recebe entrada indexada em 1
$args[0]
, armazena isso em$a
, faz um loop até que seja atingido0
. A cada iteração, zeramos uma matriz de dez elementos$z
(usada para armazenar nossas contagens de dígitos). Então construímos nossa lista de divisores com1..++$n|?{!($n%$_)}
. Para cada divisor, convertemos para uma string"$_"
,t
oCharArray
esort
esses dígitos com o-u
sinalizador nique (porque não nos importamos se o próprio divisor possui dígitos duplicados). Em seguida, incrementamos a contagem de dígitos apropriada$z
. Então, decrementamos$a
apenas se$z
contiver0
s e1
s (ou seja, encontramos um HDN). Se terminamos nossofor
loop, significa que encontramos o número apropriado de HDNs, então deixamos$n
o pipeline e a saída está implícita.fonte
$a-=!($z-ge2)
vez disso$a-=!($z|?{$_-ge2})
Python 3 , 115 bytes
Indexado 1
Experimente online!
Isso usa muita recursão; mesmo com o aumento do limite de recursão, não é possível
f(30)
. Eu acho que pode ser ainda mais jogável, e tentei encontrar algo para substituir o(1-x%d)
, mas não consegui encontrar nada (-~-x%d
tem a precedência errada). Quaisquer bytes que possam ser raspados são muito apreciados.Como funciona
fonte
Braquilog (v2), 14 bytes
Experimente online!
Envio de função; entrada da esquerda, saída para a direita. (O link TIO contém um argumento de linha de comando para executar uma função como se fosse um programa completo.)
Explicação
"Esse é um número divisor hostil?" código do problema de decisão :
Isso acabou basicamente o mesmo que o do @ UnrelatedString, embora eu tenha escrito de forma independente.
Wrapper "nésima solução para um problema de decisão ":
Esse é um daqueles casos em que o wrapper necessário para produzir a enésima saída é significativamente maior que o código necessário para testar cada saída por vez :-)
Eu vim com esse invólucro independentemente do @ UnrelatedString. É do mesmo tamanho e funciona com o mesmo princípio, mas de alguma forma acaba sendo escrito de maneira bastante diferente. Ele tem mais possibilidades de aprimoramento, pois poderíamos adicionar restrições sobre quais valores estávamos procurando gratuitamente, substituindo-os
A
por alguma variável de restrição, mas nenhuma das possíveis variáveis de restrição salva bytes. (Se houvesse uma variável de restrição "número inteiro não negativo", você poderia substituíA
-lo por ela e salvar um byte, tornandoℕ
desnecessário.)fonte
Java 10,
149139138126125120119 bytes-10 bytes usando em
.matches
vez de.contains
por dígito, inspirado na resposta JavaScript de @Arnauld .-5 bytes graças a @ValueInk
-1 byte graças a @ceilingcat
Indexado 1
Experimente online.
Explicação:
fonte
i
es
na sua pesquisa regex, não precisará da conversão extra de cadeias, e o resultado será o mesmo.Braquilog , 16 bytes
Experimente online!
Muito lento e o dobro do tempo, se isso fosse um problema de decisão . 1 indexado.
fonte
Wolfram Language (Mathematica) , 74 bytes
Experimente online!
fonte
Japt v2.0a0, 17 bytes
Tente
Porta desta resposta Brachylog .
Crédito: economia total de 4 bytes graças a Shaggy, que também sugeriu que havia uma solução melhor, levando a muito mais bytes :)
Resposta original abordagem de 28 bytes:
Tente
Porta desta resposta JavaScript .
fonte
«
atalho antes :) Eu acho que se o Shaggy só estiver melhorando minha pontuação com um punhado de bytes, devo estar ficando (um pouco) decente nisso?Ícone , 123 bytes
Experimente online!
1 indexado. Muito lento para grandes entradas.
fonte
Perl 6 , 74 bytes
Indexado a 0. Apenas os três primeiros casos estão listados no TIO, pois é muito lento para testar o restante.
Experimente online!
fonte
Ruby ,
110979284 bytes-13 bytes, utilizando a verificação de regex do JavaScript de @ Arnauld .
-5 bytes para trocar o
times
loop por um decrementador e awhile
.-8 bytes, descartando
combination
algo mais parecido com as outras respostas.Experimente online!
fonte
Perl 5
-p
, 66 bytesExperimente online!
1 indexado
fonte
J ,
8759 bytes-28 bytes graças ao FrownFrog
Experimente online!
original
J , 87 bytes
Experimente online!
Caramba.
Isso é atrozmente longo para J, mas não estou vendo ótimas maneiras de derrubá-lo.
explicação
Ajuda a introduzir alguns verbos auxiliares para ver o que está acontecendo:
d
retorna uma lista de todos os divisores de seu argumentoh
diz que essa lista é hostil. Ele especifica e deduplica cada número~.@":"0
, que retorna uma matriz quadrada na qual números mais curtos são preenchidos com espaços.-.&' '@,/
nivela a matriz e remove espaços e, finalmente,(-:~.)
informa se esse número se repete ou não.Com esses dois ajudantes, nosso verbo não-gobrado se torna:
Aqui mantemos uma lista cuja cabeça é o nosso "candidato atual" (que começa em 1) e cuja cauda são todos os números hostis encontrados até agora.
Nós incrementamos o cabeçalho da lista
>:@[
em cada iteração e apenas anexamos o "candidato atual" se for hostilh@d@[ # [
. Nós continuamos fazendo isso até que o nosso comprimento lista atinge 1 + n:^:(#@] < 1 + [)^:_
.Finalmente, quando terminamos, retornamos o último número desta lista,
[: {:
que é o enésimo número hostil.fonte