Sua tarefa é bem simples, calcule o n-ésimo elemento de A190810 .
Os elementos de A190810 são calculados de acordo com estas regras:
- O primeiro elemento é 1
- A sequência está aumentando
- Se
x
ocorrer na sequência, então2x+1
e3x-1
também faça
Você pode usar a indexação com base em 1 ou em 0, mas se você usar a indexação com base em 0, diga-a na resposta.
Casos de teste
a(1) = 1
a(2) = 2
a(3) = 3
a(4) = 5
a(5) = 7
a(10) = 17
a(20) = 50
a(30) = 95
a(55) = 255
Como se trata de código-golfe, a resposta mais curta em bytes vence!
x ϵ A → (2*x) + 1 ϵ A
ex ϵ A → (3*x)-1 ϵ A
, whereϵ
significa "é um membro de" e→
pode ser entendido como "implica".Respostas:
Gelatina , 16 bytes
Muito ineficiente. Experimente online!
Como funciona
fonte
Python 2,
888372 bytesVocê pode ler os programas nesta resposta em ordem inversa ...
Mais lento e mais curto ainda, graças a Dennis:
Experimente online
Isso não é tão rápido, mas é mais curto ( 83 bytes .) Classificando e removendo duplicatas a cada iteração, além de remover o primeiro elemento, removo a necessidade de um índice na lista. O resultado é simplesmente o primeiro elemento após as
n
iterações.Eu posso ter jogado golfe com Dennis. : D
Experimente online
Esta versão abaixo ( 88 bytes ) roda muito rápido, localizando o 500000º elemento em cerca de dois segundos.
É bem simples. Calcule os elementos da lista até que haja três vezes mais elementos do que
n
, uma vez que cada elemento adicionado pode adicionar no máximo 2 elementos únicos. Em seguida, remova as duplicatas, classifique e imprima on
elemento th (indexado a zero).Experimente online
fonte
Python 2, 59 bytes
Com base na resposta Python de @ mbomb007 . Teste em Ideone .
fonte
min
é O (n) enquanto lista indexação é O (1) , de modo que esta solução é, pelo menos, O (N²) ...Haskell,
767369 bytesUsa um índice baseado em 0. Exemplo de uso:
(filter t[1..]!!) 54
->255
.Em vez de criar a lista inserindo repetidamente
2x+1
e,3x-1
como visto na maioria das outras respostas, analiso todos os números inteiros e verifico se eles podem ser reduzidos1
aplicando repetidamente(x-1) / 2
ou(x+1) / 3
se são divisíveis.fonte
f=filter t[1..]!!
), porque não acho que isso esteja correto.Haskell,
7774 bytesIsso fornece uma função
a
para a n-ésima entrada. É zero indexado. Como alternativa,a=nub$f[1]
criará a lista inteira (preguiçosamente).É uma variante da lista do
Set
código de Reinhard Zumkeller .fonte
y
vez dexs
salvar dois bytes? Além disso, eu acredito que você pode ser capaz de cortar a última linha para algo como(!!)$nub.f[1]
(x:xs)
, esqueci completamente isso, obrigado.Python 2,
8884 bytesTeste em Ideone .
fonte
Pitão,
2019 bytesExperimente online. Suíte de teste.
Usa indexação baseada em zero.
fonte
1
e, obviamente, não funcionou.Braquilog , 45 bytes
Computa
N = 1000
em cerca de 6 segundos na minha máquina.Isso é indexado em 1, por exemplo
Explicação
Predicado principal:
Predicado 1:
Você pode observar que não passamos nenhuma entrada para o predicado 1 quando chamamos
y - Yield
. Por causa da propagação de restrição, ele encontrará a entrada correta ao atingir a1.
cláusula que propagará os valores de entrada corretos.fonte
MATL,
19, 1817 bytesEste é um algoritmo extremamente ineficiente. O intérprete online fica sem memória para entradas maiores que 13.
Um byte salvo, graças a Luis Mendo!
Experimente online!
Esta versão é mais longa, mas mais eficiente (21 bytes)
Experimente online
Explicação:
A maneira lógica de fazer isso é adicionar elementos à matriz até que seja longo o suficiente para capturar o i-ésimo elemento. É assim que o eficiente funciona. A maneira mais eficiente (e ineficiente) de fazer isso é apenas aumentar o tamanho do array i vezes.
Então, primeiro, vamos definir a matriz de início:
1
. Em seguida, trocamos os dois principais elementos, para que a entrada fique no topo.w
. Agora, passamos pela entrada com:"
. Então eu vezes:Agora, temos uma matriz gigantesca da sequência. (Muito mais do que o necessário para calcular) Então, paramos de repetir
]
, e agarramos o i-ésimo número dessa matriz comG)
(1-indexado)fonte
1`tEQy3*qvuStnG<]G)
. A condição de ciclo étnG<
(saída quando a matriz já tem o tamanho necessário)for
versão -loop você pode tirar a entrada em unário como uma string e remover o:
JavaScript (ES6), 63 bytes
Provavelmente desiste rapidamente devido à recursão.
fonte
Retina, 57
Experimente online!
Indexado a 0. Segue o algoritmo usado com freqüência: remova o valor mínimo do conjunto atual, chame-o
x
e adicione2x+1
e3x-1
ao conjunto um número de vezes igual à entrada e, em seguida, o número inicial é o resultado. O "conjunto" no Retina é apenas uma lista que é repetidamente classificada e criada para conter apenas elementos exclusivos. Existem alguns bits sorrateiros adicionados ao algoritmo para o golfe, que explicarei assim que tivermos mais tempo.Muito obrigado a Martin por jogar em torno de 20 bytes!
fonte
Clojure,
114108 bytesEu não ficaria surpreso se isso pudesse ser reduzido / reduzido em um montante significativo, mas
set
não apoiar n realmente prejudicou minha linha de pensamento.Experimente o online
Versão com espaços:
fonte
05AB1E,
1817 bytesUsa a codificação CP-1252 .
Explicação
Experimente online para pequenos números
Muito devagar.
Usa indexação baseada em 0.
fonte
C ++, 102 bytes
Essa função lambda requer
#include <map>
eusing std::map
.O
map
aqui é apenas uma coleção de chaves; seus valores são ignorados. Usomap
para me beneficiar do código conciso para inserção:Graças à ordem classificada de
map
, o menor elemento é extraído pork.begin()->first
.fonte
set
e initializer listas:[](int i){int t;set<int>k{1};for(;i--;k.erase(t))t=*k.begin(),k.insert({t*2+1,t*3-1});return t;};
.Na verdade, 27 bytes
Experimente online!
Este programa usa indexação baseada em 0. A abordagem é de força bruta, portanto, não espere que ela funcione no intérprete online para obter contribuições maiores.
Explicação:
fonte
CJam (25 bytes)
Demonstração online . Observe que isso usa indexação baseada em zero.
Isso usa uma abordagem semelhante à maioria: aplique os
n
tempos de transformação e, em seguida, classifique e extraia on
item th. Como um sinal de eficiência, a desduplicação é aplicada dentro do loop e a classificação é aplicada fora do loop.fonte
1ari{(_2*)\3*(@||$}*0=
(. Também muito mais eficiente)Retina , 48 bytes
Experimente online!
Inspirado pela resposta de nimi pensei em tentar uma abordagem diferente para o Retina, usando o retorno do mecanismo regex para descobrir se algum número (unário) está na sequência ou não. Acontece que isso pode ser determinado com um regex de 27 bytes, mas usá-lo custa um pouco mais, mas ainda acaba sendo mais curto que a abordagem generativa.
Aqui está uma solução alternativa de 48 bytes:
E usando E / S unárias, podemos fazer 42 bytes, mas estou tentando evitar isso e a outra resposta da Retina também usa decimal:
fonte
Ruby, 70 bytes
Explicação
fonte
*1
truque é legalJ, 31 bytes
Usa indexação baseada em zero. Muito ineficiente em memória.
Explicação
fonte
Oitava, 68 bytes
fonte
;end
Perl,
173132 bytes +1 para -n = 133Ungolfed:
Provavelmente, posso fazer melhor se pensar mais sobre isso, mas foi o que descobri depois de alguns minutos. Minha primeira vez jogando golfe, então isso foi bem divertido!
Obrigado a @Dada e @ TùxCräftîñg (e várias otimizações de bytes menores) por -40 bytes
fonte
my
s, oreturn
eoprint
(pode não teste, não tem perl)return
. Oprint
pode ser substituído por umsay
. Na maioria dasmy
não são necessários (você só precisa do anterior$a
na função que eu penso. Não inicialize nem declarar@b
. Provavelmente, você pode soltar a inicialização de$i
se fazer$i++
no início da enquanto em vez de no final.pop
É mais curto do queshift
Tenha em mente que há muito mais para jogar golfe perl do que apenas a remoção de espaços em branco e quebras de linha ....JavaScript (ES6), 58
Menos golfe
Teste
Sobre tempo e memória: elemento 500000 em ~ 20 s e 300 MB usado pelo meu alfa de FireFox de 64 bits
fonte