Dado um número natural n
, retorne o n
-th número de Leyland .
Número Leyland
Os números de Leyland são números inteiros positivos k
da forma
k = x^y + y^x
Onde x,y
são números inteiros estritamente maiores que 1.
Eles são enumerados em ordem crescente.
EDIT: @DigitalTrauma sugeriu que eu incluísse a seguinte "definição":
Imagine que jogar
x^y+y^x
em um saco para todos os valores possíveis dex
ey
, e jogando evitar em duplicatas. Então nós separamos a sacola. A bolsa classificada é a nossa sequência.
Detalhes
Você pode usar a indexação baseada em 0 ou 1, o que melhor lhe convier.
Seu programa deve ser capaz de gerar pelo menos todos os números de Leyland menores que o máximo de números inteiros de 32 bits assinados. (O último número de Leyland abaixo desse limite é 1996813914
, no índice 82
.)
Casos de teste
Os primeiros termos são os seguintes:
8, 17, 32, 54, 57, 100, 145, 177, 320, 368, 512, 593, 945, 1124
A076980 no OEIS, exceto a primeira entrada. Observe que, devido a essa primeira entrada adicional, os índices no OEIS são alterados em um.
They are enumerated in ascending order
Não tenho muita certeza do que isso significa. Você poderia fornecer uma lista de x e y?8
é antes17
, e não o contrário.x^y+y^x
em um saco para todos os valores possíveis dex
ey
e thrwoing evitar em duplicatas. Então nós separamos a sacola. A bolsa classificada é a nossa sequência.Respostas:
MATL ,
161513 bytesA saída é baseada em 1.
Experimente online!
Explicação
fonte
unique
classifica os elementos. Também não está no MATL?'stable'
sinalizador para,unique
por padrão, esse é o uso mais comum.t!^
(onde^
pode ser substituído por+
,-
ou qualquer número de operadores) motivo muito. E se fizermos&
uma entrada média para algumas daquelas onde, para um vetor, ele tem esse comportamento?Haskell, 52 bytes
Realmente ineficiente. Testa cada número natural como sendo um número de Leyland, fazendo uma lista infinita daqueles que são. Dada uma entrada, pega esse elemento de índice da lista. Usa que apenas
x,y
até 31 precisam ser verificados para números inteiros de 32 bits.Mesmo comprimento com
filter
:fonte
Java 8,
225221219216206204193192 bytesIndexado a 0
-2 bytes (221 → 219) salvos substituindo
1996813915
por(1L<<31)
graças a @LeakyNun .-3 bytes (219 → 216) graças a @LeakyNun e @Frozn com algo que me esqueci ..
-10 bytes (216 → 206) alterando Java 7 para 8.
-2 bytes (206 → 204) substituindo
ArrayList
porVector
graças a @TAsk .-11 bytes (204 → 193) removendo
s<(1L<<31)&
, uma vez que a pergunta indica " pelo menos todos os números de Leyland são inferiores ao máximo de números inteiros de 32 bits assinados ".-1 byte (193 → 192) alterando
Vector
paraStack
.Explicação:
Experimente aqui
fonte
2^31-1
(int assinado), você não pode trocar um monte delong
elencos?import java.util.*;long c(int n){List<Long>t=new ArrayList();for(int i=2,j;i<25;i++)for(j=2;j<25;j++){long s=(long)(Math.pow(i,j)+Math.pow(j,i));if(s<(1L<<31)&!t.contains(s))t.add(s);}Collections.sort(t);return t.get(n);}
for (int i = 1, j; ++i < 30;)
efor (j = 1; ++j < 30;)
Pitão, 17 bytes
Indexado a 0.
Experimente online! (Por favor, mantenha-o em 100.)
Como funciona
Versão mais lenta
1 indexado.
Experimente online! (Por favor, mantenha-o em 3.)
fonte
MATLAB, 58 bytes
Indexado 1
unique
no MATLAB nivela e classifica a matriz.Obrigado pela ajuda a @FryAmTheEggman e @flawr .
fonte
05AB1E,
2019 bytesIndexado a 0
Explicado
Experimente online
Guardado 1 byte graças a @Adnan
fonte
ÝÌ
é a abreviação de>L>
.ê
é classificado_uniquificado, se existisse quando isso foi solicitado.Mathematica,
604840 bytesUsa indexação baseada em um.
Union
é usado aplicando-o entre cada linha da matriz 2D criada peloArray
. Lá,Union
achatará a matriz 2D em uma lista, além de remover as duplicatas e colocar os valores na ordem de classificação.Economizou 8 bytes graças a @ LLlAMnYP .
Uso
fonte
{#+1,#+1}
não é necessário, pode ser deixado como{#,#}
e{2,2}
pode ser substituído simplesmente2
.Array
isso expandiria o terceiro argumento.Gelatina, 14 bytes
2 bytes graças a Dennis.
Experimente online! (Leva ~ 1s para 82 para mim) (O (n ^ 2) tempo)
Resposta original de 16 bytes
Experimente online! (Leva <1s para mim) (tempo constante)
fonte
R‘*€¹$+Z$FṢQị@
é mais rápido, mais curto e não tem limite superior artificial.Utilitários Bash + GNU, 63
Indexação baseada em 1. Parece que essa é praticamente a mesma abordagem que a resposta de @ TimmyD . Em vez de loops aninhados, a expansão do bash brace é usada para gerar expressões aritméticas que são canalizadas
bc
para avaliação.Ideone.
fonte
Perl 6 ,
60 5856 bytesTeste:
Explicação:
fonte
sort [
e] 2..31
?sort([...
para um acesso à matriz de um termosort[...
. Uma coisa semelhante acontece com o outro espaço.F #,
117, 104Welp, é mais curto que minha resposta C # pelo menos.
Economizou 13 bytes graças a Reed Copsey na sala de chat F #.
fonte
PowerShell v2 +,
847368 bytes11 bytes salvos graças a @Neil ... salvaram 5 bytes adicionais reorganizando a forma como a
iex
expressão é avaliada.Naïve, simplesmente dobramos o loop for de
x=2..30
ey=2..x
. Cada loop que colocamosx^y + y^x
no pipeline. O30
foi escolhido experimentalmente para garantir que cobrimos todos os casos com menos de2^31-1
;-). Nós os canalizamosSort-Object
para ordená-los a subir. A saída é indexada em zero com base na entrada$args[0]
.Sim, existem muitas entradas estranhas geradas aqui - esse algoritmo realmente gera 435 números de Leyland - mas
81
não é garantido que as coisas acima do índice sejam precisas e em ordem (pode haver algumas que sejam ignoradas).Exemplos
fonte
R,
5854 bytes1 indexado. Eliminado 4 bytes usando em
pryr::r
vez defunction
.Explicação
Para todos os números de 2 a 99 e 2 a 9,
aplicar a função
x^y+y^x
. Isso gera uma matriz 98x8.Classifique esta matriz (coagindo-a em um vetor):
Remova todos os valores não exclusivos:
Leia a
n
partir de stdin e busque on
número th da lista:fonte
JavaScript (Firefox 42-57), 94 bytes
Precisa do Firefox 42 porque usa tanto a compreensão da matriz quanto a exponenciação (
[for(..of..)]
e**
).fonte
[for...of]
que cheguei ao ES7.for(..of..)
, não é[for(..of..)]
.Haskell,
9998969594 bytesProvavelmente é facilmente ultrapassado, mas foi o melhor que consegui.
fonte
toInteger
em minha solução, teremos um estouro usandoint
, porque iteramos muito mais (aon+3
invés den
) ao trabalhar com a lista. Caso contrário, precisaríamos codificar os quatro primeiros termos mais ou menos. O que exatamente faztoEnum
na sua solução?f=(sort(nub[x^y+y^x|x<-[2..99],y<-[2..x]])!!)
.toEnum
converte um Int em um Enum e Integer é uma instância da classe Enum, então toEnum aqui converte n + 3 em um Inteiro.Python 3,
7669 bytesIndexado a 0.
https://repl.it/C2SA
fonte
r=range(2,32)
lambda n:sorted(…)[n]
C #,
141, 127 bytes.Oh c #, você é uma linguagem tão longa.
Este é um lambda que precisa ser designado
delegate double del(int n);
para ser executado, como tal:fonte
Enumerable.Range(
em uma variável / função / iterador / o que quer que seja com um nome mais curto para devolver?SQL (PostgreSQL 9.4), 171 bytes
Feito como uma declaração preparada. Gere algumas séries 2 - 99, junte-se a elas e faça a equação. Classifique densamente os resultados para indexá-los e selecione o primeiro resultado que possui a classificação da entrada inteira.
Executado da seguinte forma
Isso acabou correndo muito mais rápido do que eu esperava
fonte
J, 29 bytes
Usa indexação baseada em um. Conversão da minha solução Mathematica .
O verdadeiro segredo aqui é que eu tenho
:(^+^~)
do meu lado.Uso
Explicação
Mais a sério,
fonte
Swift 3, 138 bytes
Código ungolfed
Experimente aqui
fonte
Axioma 148 bytes
algum exemplo
Tipo: Número inteiro da lista
fonte
Perl 5 , 70 + 1 (-p) = 71 bytes
Experimente online!
fonte
Ruby ,
6258 bytesExperimente online!
fonte
J,
3831 bytesIndexado a 0.
Uso
fonte
Java,
200197 bytesIndexado a 0
Parece que os fluxos de java podem realmente salvar bytes! Quem teria pensado ?!
Ungolfed:
Edições:
long[]
e parênteses removidos ao redorn
.fonte
Python 3, 129-> 116 bytes
Eu sei que há uma resposta mais curta do python 3, mas eu ainda queria contribuir com minha solução.
Essa era a melhor maneira que eu conseguia pensar em lidar com todos os valores de x e todos os valores de y. Se alguém puder jogar minha abordagem, seria apreciado
fonte
t
umaset
lista em vez de uma lista e substitua as últimasfor
instruções por uma planíciet.add(q)
.APL (Dyalog) , 27 bytes
Experimente online!
fonte
Japonês
-g
, 15 bytesTente
fonte