Introdução
Colocar todos os números positivos em sua ordem regular (1, 2, 3, ...) é um pouco chato, não é? Então, aqui está uma série de desafios em torno de permutações (reorganizações) de todos os números positivos.
O primeiro desafio desta série é gerar a (n) para um dado n como entrada, em que a (n) é A064413 , também conhecida como sequência de eletrocardiograma, porque o gráfico de seus valores se assemelha a um eletrocardiograma (daí o " Como isso sentir " referência). As propriedades interessantes dessa sequência são que todos os números inteiros positivos aparecem exatamente uma vez. Outra característica notável é que todos os números primos ocorrem em ordem crescente.
Tarefa
Dada uma entrada inteira n, produza a (n).
é definido como:
- para , é o menor número ainda não usado que compartilha um fator com
Nota: a indexação baseada em 1 é assumida aqui; você pode usar a indexação baseada em 0; portanto, , etc. Por favor mencione isso na sua resposta se você optar por usá-lo.
Casos de teste
Input | Output
--------------
1 | 1
5 | 3
20 | 11
50 | 49
123 | 132
1234 | 1296
3000 | 3122
9999 | 10374
Regras
- Entrada e saída são números inteiros (seu programa deve, pelo menos, suportar entrada e saída no intervalo de 1 a 32767)
- Entrada inválida (flutuações, seqüências de caracteres, valores negativos etc.) pode levar a resultados imprevisíveis, erros ou comportamento (não) definido.
- Aplicam- se as regras de E / S padrão .
- As brechas padrão são proibidas.
- Isso é código-golfe , então as respostas mais curtas em bytes ganham
#>¹↑¡§ḟȯ←⌋→`-Nḣ2
e aqui!¡§ḟȯ←⌋→`-Nḣ2
faria ( Experimente ). A definição de "duplicado" não é "é exatamente a mesma que". Deixo para os outros decidirem, já que não quero deixar isso fechado, pois posso ter perdido alguma coisa.a(n)
compartilha um fator diferente de 1 coma(n-1)
, pois todo número compartilha 1 como um fator. Além disso, minha resposta pode ser 'indexada em 2', ondea(2)
é 1,a(3)
é 2 e assim por diante?Respostas:
05AB1E , 25 bytes
Indexado a 0
Explicação:
fonte
Haskell ,
66 6564 bytesExperimente online!
fonte
Haskell , 60 bytes
Experimente online!
Indexado a zero; poderia salvar quatro bytes se a série começasse com 2 (meio (-1) indexado, mas sem que o valor -1 fosse definido). Constrói a lista infinita mantendo preguiçosamente a lista de números não utilizados.
fonte
Data.List
e usar emdelete x
vez defilter(/=x)
. Se isso precisar funcionar para argumentos grandes, essa otimização será rapidamente necessária.delete
é a coisa mais razoável a se fazer aqui, mas no código-golfe não nos importamos. Às vezes, cito variantes mais eficientes, quando a diferença é espetacular ou interessante. Aqui, não é tão ruim: o TIO pode calcular todos os casos de teste em menos de 10 segundos.Python 2 , 104 bytes
Isso usa indexação baseada em 0.
Experimente online!
fonte
Ruby, 86 bytes
Isso funciona para sempre para entradas tão baixas quanto 10, no entanto.
Aqui está uma versão com memorização com 102 bytes que é executada em tempo aceitável:
fonte
IDIOMA DA MÁQUINA (X86, 32 bits) + biblioteca de idiomas C funções malloc () / free (), bytes 325
Acima do gcd e da função ... Este código de montagem abaixo gera as funções e o programa de teste:
os resultados:
É possível erros e passado cópia errada ...
fonte
Perl 6,
848073695049 bytes(Indexado a 0)
Obrigado a esta resposta por alguns truques.
Agradecimentos ao ASCII-only por reduzir um byte.
fonte
...
? Isso facilita muito a sequência de coisas como essa. Por exemplo, vocêmy@a=1,2;push @a,operation while condition
pode ser1,2,{operation}...condition
. Com alguns outros campos de golfe, pode chegar aos 49 bytes.first
.APL (NARS), caracteres 119, bytes 238
este teste leva 1m: 49s aqui:
fonte
Java (JDK) ,
161155152151 bytesSalvou um byte alternando o
int[]
rastreamento para aproveitar o existenteBigInteger
!Experimente online!
fonte
Gaia , 27 bytes
Experimente online!
Indexação baseada em 1.
É executado lentamente, pois tenta cada número inteiro até encontrar
a(n)
.fonte