Desafio:
Dado um número inteiro de índice n
, produza o n
'th item nesta sequência ou produza a sequência até e incluindo o índice n
:
25,25,7,28,29,20,21,22,23,14,35,26,7,28,29,20,16,29,12,15,28,21,14,17,30,13,16,29,12,15,28,21,10,6,12,18,15,11,7,13,19,17,13,9,15,21,18,14,10,16,22,19,15,11,17,23,20,16,12,18,24,21,17,13,19,25,23,19,15,21,27,24,20,16,22,28,25,21,17,23,29,16,13,9,15,21,18,14,10,16,22,20,16,12,18,24,21,17,13,19
Como essa sequência funciona?
NOTA: Nesta explicação, o índice n
é 1 indexado.
Coloque os números 1
através x
de duas linhas de comprimento n*6 - 1
, onde x
depende da iteração atual e o comprimento dos números usados, e depois somar os dígitos dos n
'th / mais à direita anéis olímpicos dessas duas linhas.
O primeiro número na sequência é calculado da seguinte forma:
The length of the lines are 5 (because 1*6 - 1 = 5):
12345
67891(0)
Then leave the digits in an Olympic Rings pattern:
1 3 5
7 9
And sum them:
1+3+5+7+9 = 25
Então n=1
resulta em 25
.
O segundo número na sequência é calculado da seguinte maneira:
The length of the lines are 11 (because 2*6 - 1 = 11):
12345678910
11121314151(6)
Then leave the digits in the second/right-most Olympic Rings pattern:
7 9 0
4 5
And sum them:
7+9+0+4+5 = 25
Então n=2
resulta em 25
.
O terceiro número na sequência é calculado da seguinte forma:
The length of the lines are 17 (because 3*6 - 1 = 17):
12345678910111213
14151617181920212(2)
Then leave the digits in the third/right-most Olympic Rings pattern:
1 2 3
0 1
And sum them:
1+2+3+0+1 = 7
Então n=3
resulta em 7
.
etc.
Regras do desafio:
- Quando você gera o
n
'th item na sequência, você pode receber a entrada como indexada 0 em vez de indexada 1, mas lembre-se de que os cálculos den*6 - 1
se tornarão(n+1)*6 - 1
ou(n+1)*5 + n
. - Números únicos de mais de um dígito podem ser divididos no final da primeira linha quando atingimos o comprimento
n*5 + n-1
, portanto, é possível que um número com 2 ou mais dígitos seja parcialmente a parte final da linha 1 e parcialmente a parte principal da linha 2.
Regras gerais:
- Isso é código-golfe , então a resposta mais curta em bytes vence.
Não permita que idiomas com código de golfe o desencorajem a postar respostas com idiomas que não sejam codegolf. Tente encontrar uma resposta o mais curta possível para 'qualquer' linguagem de programação. - As regras padrão se aplicam à sua resposta, para que você possa usar STDIN / STDOUT, funções / método com os parâmetros adequados e programas completos do tipo retorno. Sua chamada.
- As brechas padrão são proibidas.
- Se possível, adicione um link com um teste para o seu código.
- Além disso, adicione uma explicação, se necessário.
Casos de teste:
Aqui está uma pasta dos casos de teste de 1 a 1.000 , portanto, fique à vontade para escolher qualquer um deles.
Alguns casos de teste adicionais adicionais:
1010: 24
1011: 24
2500: 19
5000: 23
7500: 8
10000: 8
100000: 25
1*5 + 1-1 = 5
? Não deveria ser1*5 + 5 - 1 = 9
?n=1
entãon*5 + n-1
se torna1*5 + 1-1
, o que por sua vez é5 - 0 = 5
.n * 5 + n - 1
igual an * 6 - 1
?Respostas:
Casca , 16 bytes
Experimente online!
-3 bytes graças a H.PWiz .
Explicação (apressada):
fonte
Retina ,
706862 bytesExperimente online!
Explicação
Vamos chamar a entrada n , e usaremos
3
como exemplo.A
10**
é a abreviatura10*$&*_
que substitui a entrada por uma sequência de 10n sublinhados.Agora, substituímos cada sublinhado pelo comprimento da cadeia até e incluindo esse sublinhado. Portanto, isso apenas resulta no número de 1 a 10n concatenados juntos ( 10n é sempre suficiente para preencher duas linhas do comprimento necessário).
Eval! Esse e o próximo estágio gerarão o código fonte de outro programa, que será executado na sequência de números inteiros concatenados.
Para gerar esse programa, esse estágio substitui primeiro os números inteiros por uma sequência de 6n sublinhados (
$+
refere-se à entrada original do programa).Em seguida, substitua esses sublinhados por
L`.{…}
, onde…
é 6n-1 (o comprimento das linhas que estamos vendo). Então, geramos um regex, cujo quantificador depende da entrada original.Quando esse programa é avaliado, ele corresponde a pedaços de comprimento 6n-1 , dos quais haverá pelo menos dois. Para nosso exemplo de entrada
3
, terminamos com:Agora só precisamos extrair os dígitos relevantes.
Primeiro, em cada linha (
%
) removemos todos, exceto os últimos cinco dígitos (,-6
). Isso nos dáFinalmente:
Expandimos todos os outros dígitos (
2
) nos dez primeiros (9
isso é baseado em 0) em unário. Por acaso são aqueles nas posições dos Anéis Olímpicos.E contamos o número de sublinhados resultantes, para somar e converter o resultado em decimal.
fonte
1
.-7
Python 2 ,
9490 bytesExperimente online!
fonte
Japt ,
333230292827 bytesOh, isso não é bonito!
Saídas o n ésimo termo, 1-indexado.
Tente
Explicação
fonte
Python 2 , 97 bytes
Experimente online!
fonte
Python 3,
129123 bytesExperimente Online
Isso é muito complicado, mas funciona.
fonte
05AB1E ,
222120 bytesExperimente online!
Explicação
Abordagem alternativa de 21 bytes
fonte
Geléia , 19 bytes
Experimente online!
fonte
J ,
61, 5857 bytesExperimente online!
fonte
Ruby ,
65 6356 bytesExperimente online!
fonte
Limpo ,
138101 bytesExperimente online!
fonte
Java 8,
138111109 bytesClaro que terei que responder ao meu próprio desafio. :)
Perdi meu código inicial que usei para criar os resultados do teste na descrição do desafio, então comecei novamente.
Explicação:
Experimente online.
fonte