Seqüência:
- Começamos às
1
. - Primeiro, adicionamos o valor atual indexado em 1 ao número anterior na sequência.
- Em seguida, aplicamos as seguintes operações matemáticas em ordem, se elas se aplicarem a este valor atual:
- Divisível por
2
? => Adição - Divisível por
3
? => Subtração - Divisível por
4
? => (Adição AND) multiplicar - Não é divisível por nem
2
,3
nem4
? -> Continuar com o resultado da soma atual
- Divisível por
Resultado:
Emita os primeiros 100 números nesta sequência:
1, 1, 21, 25, 30, 216, 223, 223, 2169, 2179, 2190, 2202, 2215, 2215, 2245, 2261, 2295, 2295, 2333, 2353, 2395, 2417, 56649, 56649, 56699, 56725, 1533033, 1533061, 1533090, 45993600, 45993631, 45993631, 1517792001, 1517792035, 1517792070, 1517792106, 1517792143, 1517792143, 1517792221, 1517792261, 1517792343, 1517792343, 1517792429, 1517792473, 1517792563, 1517792609, 71336257041, 71336257041, 71336257139, 71336257189, 3638149121841, 3638149121893, 3638149121946, 196460052588000, 196460052588055, 196460052588055, 11198222997525633, 11198222997525691, 11198222997525750, 11198222997525810, 11198222997525871, 11198222997525871, 11198222997525997, 11198222997526061, 11198222997526191, 11198222997526191, 11198222997526325, 11198222997526393, 11198222997526531, 11198222997526601, 795073832824398753, 795073832824398753, 795073832824398899, 795073832824398973, 59630537461829934225, 59630537461829934301, 59630537461829934378, 4651181922022734887568, 4651181922022734887647, 4651181922022734887647, 376745735683841525912529, 376745735683841525912611, 376745735683841525912694, 376745735683841525912778, 376745735683841525912863, 376745735683841525912863, 376745735683841525913037, 376745735683841525913125, 376745735683841525913303, 376745735683841525913303, 376745735683841525913485, 376745735683841525913577, 376745735683841525913763, 376745735683841525913857, 35790844889964944961834465, 35790844889964944961834465, 35790844889964944961834659, 35790844889964944961834757, 3543293644106529551221660545, 3543293644106529551221660645
Aqui estão os 10 primeiros números na sequência com explicação:
// Starting number of the sequence:
1
// 1 (previous number in the sequence)
// + 2 (current index in 1-indexed sequence)
// = 3 -> 3 - 2 (3 is divisible by 3, so we subtract the current index 2)
// = 1
1
// 1 (previous number in the sequence)
// + 3 (current index in 1-indexed sequence)
// = 4 -> 4 + 3 (4 is divisible by 2, so we first add the current index 3)
// = 7 -> 7 * 3 (and 4 is also divisible by 4, so we then also multiply the current index 3)
// = 21
21
// 21 (previous number in the sequence)
// + 4 (current index in 1-indexed sequence)
// = 25 (25 is not divisible by 2, 3 nor 4)
25
// 25 (previous number in the sequence)
// + 5 (current index in 1-indexed sequence)
// = 30 -> 30 + 5 (30 is divisible by 2, so we first add the current index 5)
// = 35 -> 35 - 5 (and 30 is also divisible by 3, so we then also subtract the current index 5)
// = 30
30
// 30 (previous number in the sequence)
// + 6 (current index in 1-indexed sequence)
// = 36 -> 36 + 6 (36 is divisible by 2, so we first add the current index 6)
// = 42 -> 42 - 6 (and 36 is also divisible by 3, so we then also subtract the current index 6)
// = 36 -> 36 * 6 (and 36 is also divisible by 4, so we then also multiply the current index 6)
// = 216
216
// 216 (previous number in the sequence)
// + 7 (current index in 1-indexed sequence)
// = 223 (223 is not divisible by 2, 3 nor 4)
223
// 223 (previous number in the sequence)
// + 8 (current index in 1-indexed sequence)
// = 231 -> 231 - 8 (231 is divisible by 3, so we subtract the current index 8)
// = 223
223
// 223 (previous number in the sequence)
// + 9 (current index in 1-indexed sequence)
// = 232 -> 232 + 9 (232 is divisible by 2, so we first add the current index 9)
// = 241 -> 241 * 9 (and 232 is also divisible by 4, so we then also multiply the current index 9)
// = 2169
2169
// 2169 (previous number in the sequence)
// + 10 (current index in 1-indexed sequence)
// 2179 (2179 is not divisible by 2, 3 nor 4)
2179
Regras do desafio:
- Se o seu idioma não suportar algo maior que 2 31 -1, você poderá continuar a sequência até esse máximo (os primeiros 46 números, até - e incluindo -
1,517,792,609
). - O formato de saída é flexível. Você pode retornar uma matriz ou lista, uma sequência separada por espaços, vírgulas, etc. Sua chamada.
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, programas completos. 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.
code-golf
sequence
number-theory
division
Kevin Cruijssen
fonte
fonte
Respostas:
05AB1E ,
2423 bytes-1 byte graças a Kevin Crujissen
Experimente online!
Explicação:
fonte
UX
possa ser removido, mas não consigo. Termino com 24 bytes também porque ele inicia em0
vez de1
. Agora eu aumentei antes, mas depois temos que repetir os101
tempos em vez de100
... Ah, bem.UX
é uma tristeza. Tentei livrar-se dele por um tempo e acabou com um monte de 24 e 25 variações:1тF=NÌ©+DÑ3L>Ãv®…-*+yè.V
,1тL>v=y+©3F®NÌÖiy…+-*Nè.V
... eu não considere usar a variável do contador, isso é interessante.тF
vez deƵ0µ
. Eu editei isso em, obrigado! (PS: há realmente deve ser um single-byte¼¾
...)¼¾
seria bom, embora, para ser sincero, eu quase nunca o usei assim. O byte embutido que eu preferiria mais agora é uma segunda©®
variável que não aparece. Talvez começando com uma string vazia,""
como você mencionou em outro desafio antes.R,
858279767270 bytesungolfed:
Obrigado a @rturnbull por apontar que eu posso usar em
(!z%%3)
vez de(z%%3<1)
verificar os módulos e que a definição dez
um acontece quando é usada pela primeira vez.Jogou fora de 3 a 4 caracteres abusando da extensão de vetor: a resposta foi iniciada originalmente,
s=1:56...
mas não precisamos fazer isso, o comprimentos
será estendido conforme necessário.Economizou mais 3 bytes substituindo a última condição por uma chamada para a
"if"
função (sim, é uma função adequada em R!)Economizou mais 4 bytes substituindo
s
porT
, que é um builtin igual aoTRUE
qual também é igual a1
. Eu percebi isso ao mesmo tempo que @rturnbull (honestamente!)Isso sofre de alguns problemas numéricos quando excedemos 2 ^ 52, mas não há nada que eu possa fazer sobre isso --- R só pode usar
double
tipos para números maiores que2^31-1
, mas eles armazenam números inteiros até 2 ^ 52 exatamente. Assim, tenho permissão para emitir apenas os primeiros 56 termos (o último termo "correto") que economiza um byte no caso de 100 comprimentos.Aqui está a saída da versão de 56 comprimento:
fonte
1,517,792,609
). ", Mas este de O curso também se aplica a números diferentes de 32 bits. Se R não puder lidar com nada maior, os 56 primeiros números serão completamente bons. E sim, se você souber que nunca poderá ultrapassar 56, altere100
para56
para salvar um byte.z%%2<1
(e assim por diante) para!z%%2
, abusando da conversão implícita de tipo.!
que não batia%%
, mas aparentemente bate !T
e usar isso no lugar des
, permitindo remover os=1;
, salvando outros quatro bytes. É possível dobrar a definição dez
na definição des[i]
(bem,T[i]
agora), assim::T[i]=((z=i+T[i-1])+ ...
, o que significa que você pode perder os colchetes, economizando mais alguns bytes. EDIT: Ah, vejo que você fez oT
truque enquanto escrevia meu comentário! Grandes mentes pensam da mesma forma, dizem eles.Python 3,
8278767472 bytesResultado:
Sugestões são bem-vindas!
fonte
while
loop e reordene a aritmética para -2 .05AB1E ,
343130 bytesExperimente online!
Explicação
fonte
Python 2, 76 bytes
Implementação bastante padrão, acho que usar uma instrução exec em vez de um loop while economizou 2 bytes ou mais. Um método recursivo pode ser mais curto, imagino que o xnor aparecerá em breve;)
Se eu usasse as atualizações que TheNumberOne descobriu, estaria em 69 bytes (mas estaria copiando)
Resultado:
fonte
JavaScript,
7563 bytesOutra versão:
Ambos param no índice 57 (indexado 0) porque é quando a saída ultrapassa o tamanho do número seguro do JavaScript (2 53 - 1). Acontece que um loop é bem mais curto que uma função recursiva, mesmo com o ES6:
Este retorna uma matriz dos 57 primeiros elementos.
fonte
map
versão por completo e ela também teve clock de 75 bytes.Brain-Flak
476 466 462 456446 BytesEconomizou 6 bytes graças ao Wheat Wizard
Experimente Online!
Isso é realmente lento. O TIO não pode lidar com os 100 números inteiros (o limite parece ser 22 ou 23). Portanto, este exemplo gera apenas os 20 primeiros, mas o código funcionaria para 100 também.
Breve explicação:
fonte
({}<>[({})]<>)(<()>)
pode ser substituído por(<({}<>[({})]<>)>)
Java 7, 316 bytes
Ungolfed & código de teste:
Experimente aqui.
Resultado:
fonte
C #, 120 bytes
Assim como nenhuma pessoa sã jogaria golfe em Java, nenhuma pessoa sã deveria jogar golfe em C #! Mas que se dane, eu queria ver o que posso fazer. O
1M
elencof
é um decimal que tem precisão suficiente para esta resposta sem que eu precise escreverdecimal
. Além disso, o incremento no local salva alguns bytes na minha resposta em Python. no final, ainda são 50 bytes mais longos.Aqui está a versão mais legível (e executável):
fonte
while
parafor
e inserindo o int dessa forma:for(int n=1;n<101;)
void k(){for(decimal f=1,d,n=1;n<101;)Console.WriteLine(f=((d=++n+f)+n*((d%2<1?1:0)-(d%3<1?1:0)))*(d%4<1?n:1));}
( 112 bytes )Lote, 110 bytes
Usa a fórmula do @ETHproductions, mas foi levemente modificada porque o Lote não possui
?:
. O lote usa números inteiros assinados de 32 bits para que os loops parem em 46.fonte
Perl, 75 bytes
O código gera cada valor em uma nova linha e calcula todos os 100 valores.
fonte
-Mbigint
, Nenhum parêntese ao redor do1..100
, e!($a%2)*$_
em vez de($a%2?0:$_)
(mesmo paraa%3..
) deve economizar alguns bytes;)Haskell,
7064 bytesscanl1(#)[1..100]
retorna a lista com os 100 primeiros elementos. Um byte a menos se eu puder ficar no intervalo 2 ^ 31 (->[1..46]
).scanl1
é como,foldl1
mas coleta os resultados intermediários em uma lista. Os testes de divisibilidade são feitos através da função auxiliar%
que retorna0^0 = 1
se divisível e0^x = 0
se não for.fonte
J, 46 bytes
Aplica o método descrito no desafio.
Uso
O comando extra
(,.~#\)
é usado para adicionar índices a cada valor.fonte
Perl 6 , 62 bytes
Experimente online!
REALMENTE tive que trabalhar para obter minha contagem de bytes abaixo das outras soluções que não são do idioma do golfe.
fonte