Introdução (pode ser ignorado)
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. Este é o terceiro desafio desta série (links para o primeiro e o segundo desafios).
Neste desafio, organizaremos os números naturais em linhas de comprimento crescente, de forma que a soma de cada linha seja primo. O que eu acho realmente incrível nisso é que todo número natural tem um lugar nesse arranjo. Nenhum número é ignorado!
Essa visualização desse arranjo é assim:
row numbers sum
1 1 1
2 2 3 5
3 4 5 8 17
4 6 7 9 15 37
5 10 11 12 13 21 67
6 14 16 17 18 19 23 107
etc.
Podemos ler os elementos das linhas neste triângulo. Os primeiros 20 elementos são: 1, 2, 3, 4, 5, 8, 6 , 7, 9, 15, 10, 11, 12, 13, 21, 14, 16, 17, 18, 19 ( sim, existe uma música do New Order oculta nesta sequência ).
Como esse é um desafio de "sequência pura", a tarefa é gerar para um dado como entrada, onde é A162371 .
Tarefa
Dada uma entrada inteira , imprima no formato inteiro.
é definida como o ésimo elemento do lexicograficamente primeiros permutação dos números naturais de tal modo que, quando visto como um triângulo lido por linhas, para n> 1 as somas de linhas são números primos. Desde a primeira permutação lexicográfico de números inicia naturais com 1, é 1. Note-se que por esta definição e énãonecessário para ser nobre. Esta é a sequência OEISA162371.
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 | 5
20 | 19
50 | 50
78 | 87
123 | 123
1234 | 1233
3000 | 3000
9999 | 9999
29890 | 29913
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 (0, valores flutuantes, seqüências de caracteres, valores negativos etc.) pode levar a resultados imprevisíveis, erros ou comportamento (não) definido.
- Regras de E / S padrão se aplicam.
- As brechas padrão são proibidas.
- Isso é código-golfe , então as respostas mais curtas em bytes ganham
Respostas:
Geléia , 32 bytes
Experimente online! - muito lento, pois constrói n linhas primeiro, para uma versão mais rápida que não tenta , a 37 bytes.
fonte
Perl 6 ,
80bytesExperimente online!
Explicação:
fonte
Haskell ,
122120 bytesExperimente online! (possui 2 bytes extras para
f=
)Edição: agora usa indexação baseada em 0 para salvar 2 bytes. Obrigado @wastl por apontar isso, devo ter perdido no OP.
Foi muito divertido escrever! A função auxiliar
%
tem um comprimentol
e uma lista de valores que pode ser usadaa
. Retorna uma lista infinita de valores para a sequência. O comprimento é um a menos que o comprimento da linha atual do triângulo e a lista é infinita e pré-classificada. Primeiro, apenas produzimos os primeirosl
valores dea
e depois examinamos o restante de a até encontrarmos o primeiro (menor) valor que torna a soma principal. Nós dividimos a lista em torno desse valor usandospan
e alguma correspondência de padrões. Agora, tudo o que precisamos fazer é gerar esse novo valor e retornar com o próximo comprimento de linhal+1
e os valores restantes ema
. Para o resultado final, anexamos 1 (caso especial para n = 0) e indexamos nele com!!
.fonte
0:
como afirma o desafio, você pode usar a indexação baseada em 0.JavaScript (ES6),
111110 bytesExperimente online!
fonte
Gelatina , 46 bytes
Experimente online!
O tempo limite é excedido, mas funciona lá para todos, exceto os dois últimos exemplos.
fonte
Lua ,
242228226211 bytesExperimente online!
fonte