Secuencia:
- Empezamos a
1
. - Primero agregamos el valor actual indexado al número anterior en la secuencia.
- Luego aplicamos las siguientes operaciones matemáticas en orden si se aplican a este valor actual:
- Divisible por
2
? => Adición - Divisible por
3
? => Resta - Divisible por
4
? => (Suma Y) Multiplicar - ¿No es divisible por ni
2
,3
ni4
? -> Continuar con el resultado de la suma actual
- Divisible por
Salida:
Salida de los primeros 100 números en esta secuencia:
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
Aquí están los primeros 10 números en la secuencia con explicación:
// 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
Reglas de desafío:
- Si su idioma no admite nada más grande que 2 31 -1, puede continuar la secuencia hasta ese máximo (por lo tanto, los primeros 46 números, hasta - e incluyendo -
1,517,792,609
). - El formato de salida es flexible. Puede devolver una matriz o lista, una cadena separada con espacios, comas, etc. Su llamada.
Reglas generales:
- Este es el código de golf , por lo que la respuesta más corta en bytes gana.
No permita que los lenguajes de code-golf lo desanimen a publicar respuestas con lenguajes que no sean codegolf. Trate de encontrar una respuesta lo más breve posible para 'cualquier' lenguaje de programación. - Se aplican reglas estándar para su respuesta, por lo que puede usar STDIN / STDOUT, funciones / método con los parámetros adecuados, programas completos. Tu llamada.
- Las lagunas predeterminadas están prohibidas.
- Si es posible, agregue un enlace con una prueba para su código.
- Además, agregue una explicación si es necesario.
code-golf
sequence
number-theory
division
Kevin Cruijssen
fuente
fuente
Respuestas:
05AB1E ,
2423 bytes-1 byte gracias a Kevin Crujissen
Pruébalo en línea!
Explicación:
fuente
UX
poder eliminarlo, pero no puedo. También termino en 24 bytes porque comienza en0
lugar de1
. Ahora lo aumenté antes de tiempo, pero luego tenemos que repetir los101
tiempos en lugar de100
... Ah, bueno.UX
es una monstruosidad. He intentado deshacerse de él por un tiempo y terminó con un grupo de 24 y 25 variaciones:1тF=NÌ©+DÑ3L>Ãv®…-*+yè.V
,1тL>v=y+©3F®NÌÖiy…+-*Nè.V
... Yo no considero el uso de la variable de contador, esto es interesante.тF
lugar deƵ0µ
. Lo he editado en, gracias! (PD: realmente debería haber un solo byte¼¾
...)¼¾
sería bueno, aunque para ser honesto, casi nunca lo uso así. La construcción de un solo byte que preferiría más ahora es una segunda©®
variable que no aparece. Tal vez comience en una cadena vacía""
como mencionó en otro desafío antes.R,
858279767270 bytessin golf:
Gracias a @rturnbull por señalar que puedo usar en
(!z%%3)
lugar de(z%%3<1)
verificar los módulos, y que la definición dez
un evento ocurre cuando se usa por primera vez.Eliminó 3-4 caracteres abusando de la extensión vectorial: la respuesta comenzó originalmente
s=1:56...
pero no necesitamos hacer eso, la longitud des
se extenderá según sea necesario.Ahorró 3 bytes más al reemplazar la última condición con una llamada a la
"if"
función (sí, ¡es una función adecuada en R!)Ahorró 4 bytes más al reemplazar
s
conT
, que es un valor incorporado igual aTRUE
que también es igual a1
. Me di cuenta al mismo tiempo que @rturnbull (¡honesto!)Esto sufre algunos problemas numéricos una vez que superamos 2 ^ 52, pero no hay nada que pueda hacer al respecto --- R solo puede usar
double
tipos para números mayores que2^31-1
, pero almacenan enteros hasta 2 ^ 52 exactamente. Por lo tanto, solo puedo generar los primeros 56 términos (el último término que es "correcto") que ahorra un byte en el caso de 100 longitudes.Aquí está el resultado de la versión de 56 longitudes:
fuente
1,517,792,609
) ", pero esto de Por supuesto, también se aplica a números diferentes de 32 bits. Si R no puede manejar algo más grande, entonces los primeros 56 números están completamente bien. Y sí, si sabe que nunca puede superar los 56, puede cambiar100
a56
para guardar un byte.z%%2<1
(y así sucesivamente) a!z%%2
, abusando de la conversión de tipo implícita.!
que no venció%%
, pero aparentemente sí.T
y usar eso en lugar des
, lo que le permite eliminar els=1;
, guardando otros cuatro bytes. Es posible plegar la definición dez
en la definición des[i]
(bueno,T[i]
ahora), así: loT[i]=((z=i+T[i-1])+ ...
que significa que puede perder las llaves, ahorrando algunos bytes más. EDITAR: ¡Oh, veo que hiciste elT
truco mientras escribía mi comentario! Las grandes mentes piensan igual, dicen.Python 3,
8278767472 bytesSalida:
¡Sugerencias son bienvenidas!
fuente
while
bucle y reordene la aritmética para -2 .05AB1E ,
343130 bytesPruébalo en línea!
Explicación
fuente
Python 2, 76 bytes
Implementación bastante estándar, creo que usar una instrucción exec en lugar de un ciclo while ahorró 2 bytes más o menos. Un método recursivo puede ser más corto, imagino que xnor aparecerá pronto;)
Si usara las actualizaciones que TheNumberOne descubrió, estaría en 69 bytes (pero luego estaría copiando)
Salida:
fuente
JavaScript,
7563 bytesOtra version:
Ambos se detienen en el índice 57 (0 indexado) porque es cuando la salida supera el tamaño de número seguro de JavaScript (2 53 - 1). Resulta que un bucle es mucho más corto que una función recursiva, incluso con ES6:
Éste devuelve una matriz de los primeros 57 elementos.
fuente
map
versión para completarla y también registró 75 bytes.Brain-Flak
476 466 462 456446 BytesGuardado 6 bytes gracias a Wheat Wizard
Pruébalo en línea!
Esto es realmente lento. TIO no puede manejar los 100 números completos (el límite parece ser 22 o 23). Entonces, este ejemplo solo genera los primeros 20, pero el código también funcionaría para 100.
Breve explicacion:
fuente
({}<>[({})]<>)(<()>)
puede ser reemplazado por(<({}<>[({})]<>)>)
Java 7, 316 bytes
Ungolfed y código de prueba:
Pruébalo aquí
Salida:
fuente
C #, 120 bytes
Al igual que ninguna persona cuerda jugaría golf en Java, ¡ninguna persona cuerda debería jugar golf en C #! Pero joder eso, quería ver qué puedo hacer. Los
1M
modelos se conviertenf
en un decimal que tiene suficiente precisión para esta respuesta sin que tenga que escribirdecimal
. Además, el incremento en el lugar guarda algunos bytes en mi respuesta de Python. al final todavía es 50 bytes más largo.Aquí está la versión más legible (y ejecutable):
fuente
while
afor
e insertando el int de esta manera: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));}
Lote, 110 bytes
Utiliza la fórmula de @ETHproductions, pero se modificó ligeramente porque Batch no tiene
?:
. Batch usa enteros con signo de 32 bits para que los bucles se detengan en 46.fuente
Perl, 75 bytes
El código genera cada valor en una nueva línea y calcula los 100 valores.
fuente
-Mbigint
, sin paréntesis1..100
, y en!($a%2)*$_
lugar de($a%2?0:$_)
(lo mismo paraa%3..
) debería guardar unos pocos bytes;)Haskell,
7064 bytesscanl1(#)[1..100]
devuelve la lista con los primeros 100 elementos. Un byte menos si puedo permanecer en el rango de 2 ^ 31 (->[1..46]
).scanl1
es comofoldl1
pero recoge los resultados intermedios en una lista. Las pruebas de divisibilidad se realizan mediante la función auxiliar%
que devuelve0^0 = 1
si es divisible y0^x = 0
si no.fuente
J, 46 bytes
Aplica el método descrito en el desafío.
Uso
El comando adicional
(,.~#\)
se usa para agregar índices a cada valor.fuente
Perl 6 , 62 bytes
Pruébalo en línea!
REALMENTE tuve que trabajar para que mi número de bytes fuera inferior al de las otras soluciones que no son de lenguaje de golf.
fuente