Definamos f n (k) como la suma de los primeros k términos de los números naturales [1, ∞) donde cada número se repite n veces.
k | 0 1 2 3 4 5 6 7 8 9
--------+-------------------------------------------------
f_1(k) | 0 1 3 6 10 15 21 28 36 45
deltas | +1 +2 +3 +4 +5 +6 +7 +8 +9
--------+-------------------------------------------------
f_2(k) | 0 1 2 4 6 9 12 16 20 25
deltas | +1 +1 +2 +2 +3 +3 +4 +4 +5
--------+-------------------------------------------------
f_3(k) | 0 1 2 3 5 7 9 12 15 18
deltas | +1 +1 +1 +2 +2 +2 +3 +3 +3
Los anti-diagonales de esto como una matriz cuadrada son similares a la secuencia OEIS A134546 .
Desafío
Escriba un programa / función que tome dos enteros no negativos nyk y produzca f n (k) .
Especificaciones
- Normas estándar de E / S se aplican .
- Las lagunas estándar están prohibidas .
- Su solución puede estar indexada a 0 o indexada a 1 para n y / o k, pero especifique cuál.
- Este desafío no se trata de encontrar el enfoque más corto en todos los idiomas, sino de encontrar el enfoque más corto en cada idioma .
- Su código se puntuará en bytes , generalmente en la codificación UTF-8, a menos que se especifique lo contrario.
- Las funciones integradas que calculan esta secuencia están permitidas, pero se recomienda incluir una solución que no se base en una función integrada.
- Se alientan las explicaciones, incluso para los idiomas "prácticos" .
Casos de prueba
En estos casos de prueba, n está indexado en 1 yk está indexado en 0.
n k fn(k)
1 2 3
2 11 36
11 14 17
14 21 28
21 24 27
24 31 38
31 0 0
En algunos formatos mejores:
1 2
2 11
11 14
14 21
21 24
24 31
31 0
1, 2
2, 11
11, 14
14, 21
21, 24
24, 31
31, 0
Implementación de referencia
Esto está escrito en Haskell .
f n k = sum $ take k $ replicate n =<< [1..]
f_n(0) = 0
dek
0 indexado?k
términos de la lista de números naturales repetidos, no los primerosn*k
términos.Respuestas:
Ruby ,
32 2823 bytesPruébalo en línea!
Explicación
Visualicemos la suma como el área de un triángulo, por ejemplo con n = 3 yk = 10:
Luego sumamos por columna en lugar de fila: la primera columna es
k
, luegok-n
,k-2n
y así sucesivamente.fuente
Python 2 ,
3428 bytesPruébalo en línea!
Gracias Martin Ender, Neil y Mr Xcoder por ayudar.
fuente
k/n
todos modos,k-(k/n)*n
es justok%n
. Ver mi respuesta por lotes.Casco , 4 bytes
Pruébalo en línea!
Explicación
Esto acaba siendo una traducción directa de la implementación de referencia en el desafío:
fuente
APL (Dyalog) ,
12108 bytesPruébalo en línea!
n
a la izquierda,k
(0 indexado) a la derecha.fuente
Mathematica, 40 bytes
Pruébalo en línea!
Pruébalo en línea!
Mathematica, 18 bytes
por Martin Ender
Pruébalo en línea!
Pruébalo en línea!
fuente
Tr@Range[#2,0,-#]&
on~Sum~{n,#2,0,-#}&
usando el truco de la respuesta de GB Ruby.MATL ,
1211 bytesPruébalo en línea!
k
está indexado a 0. Toma la entrada en orden inverso.Guardado 1 byte gracias a @Giuseppe
fuente
Jalea , 5 bytes
Un byte más que la solución Jelly de @ Mr.Xcoder, pero esta es mi primera presentación en Jelly y todavía estoy confundido acerca de cómo la tacidez de Jelly elige operandos, así que todavía estoy satisfecho. Tenga en cuenta el orden de las entradas son
k
entoncesn
.Explicación
Pruébalo en línea!
fuente
Jalea , 4 bytes
1 indexado
Pruébalo en línea! o ver un conjunto de pruebas .
fuente
Ḷ:S
también funcionaJavaScript (ES6),
2421 bytesToma entrada en la sintaxis de curry
(n)(k)
. Devoluciones enfalse
lugar de0
.Casos de prueba
Mostrar fragmento de código
¿Cómo?
Esto es similar a la respuesta de Ruby de @ GB .
El desafío describe cómo construir la 'escalera' de izquierda a derecha, mientras que esta función recursiva la construye de abajo hacia arriba. Con n = 2 y k = 11 :
fuente
Lote, 34 bytes
Una fórmula de forma cerrada que encontré. El primer argumento
n
está indexado en 1, el segundo argumentok
está indexado en 0.fuente
Python 2 , 29 bytes
Pruébalo en línea!
¡Gracias a totalmente humano por -3 bytes!
Python 2 , 30 bytes
Pruébalo en línea!
fuente
Haskell , 28 bytes
Pruébalo en línea!
Un enfoque que encontré simplemente jugando con algunos parámetros de rango. Definitivamente no es el más corto, pero es genial cómo hay tantos enfoques diferentes.
fuente
C,
3834 bytesDefinición recursiva.
-4 bytes gracias a Steadybox .
Pruébalo en línea!
32 bytes por el Sr. Xcoder , GB
Pruébalo en línea!
fuente
f(n,k){return k--?1+f(n,k)+k/n:0;}
Pruébelo en línea!R ,
373331 bytes-6 bytes gracias a Giuseppe
Pruébalo en línea!
Nada sofisticado.
El[0:k]
maneja el caso cuando k = 0.fuente
rep.default
, puede deshacerse de ellos[0:k]
usando,rep(1:k,,k,n)
pero su respuesta es básicamente rturnbull pero con base R en lugar deR + pryr
{}
C ++, 53 bytes
Solo usa la fórmula.
n
está indexado en 1 yk
está indexado en 0.Pruébalo en línea!
fuente
~
operador.[](int n,int k){return-k/n*~(k/n)/2*n-k%n*~(k/n);};
J , 13 bytes
Cómo funciona:
El argumento izquierdo es n, el derecho es k.
i.
genera una lista 0..k-11+
agrega uno a cada número de la lista, yealding 1,2, ..., k#
forma un gancho con lo anterior, por lo que se copian n copias de cada elemento de la lista.]{.
toma el primero de ellos1#.
encuentre su suma por conversión de base.Pruébalo en línea!
fuente
Retina ,
2926 bytesPruébalo en línea! El enlace incluye casos de prueba y encabezado para volver a formatearlos a su entrada preferida (
k
primero indexado 0 ,n
segundo indexado 1 ). Me inspiró la respuesta Ruby de @ GB. Explicación:Convierte a unario.
Haga coincidir cada secuencia
n
internak
y reemplace la coincidencia con todo después de la coincidencia. Esto esk-n
,k-2n
,k-3n
, peron
también después del partido, para que pueda obtenerk
,k-n
,k-2n
etc. Esto también partidosn
, que se elimina simplemente (que ya no es necesario).Suma los resultados y convierte de nuevo a decimal.
fuente
Pyth , 5 bytes
Pruébalo aquí!
La respuesta de Ruby del puerto de GB. Un puerto de mi Jelly one sería de 6 bytes:
+s/Rvz
fuente
Perl 6 , 39 bytes
Pruébalo
n y k son ambos 1 basado
Expandido:
fuente
Kotlin , 40 bytes
Pruébalo en línea!
fuente
Java (OpenJDK 8) , 23 bytes
Pruébalo en línea!
Puerto de la respuesta Python 2 de GB .
fuente
05AB1E , 9 bytes
Pruébalo en línea!
Explicación
fuente
Python 2 , 44 bytes
Pruébalo en línea!
fuente
Python 2 , 38 bytes
Pruébalo en línea!
fuente
Clojure, 54 bytes
El segundo argumento
k
está indexado a 0, por lo que(f 14 20)
es 28.fuente
APL + WIN, 13 bytes
Solicita la entrada de pantalla para n y luego para k. Origen del índice = 1.
fuente
Brain-Flak , 78 bytes
Pruébalo en línea!
Estoy seguro de que esto se puede hacer mejor, pero es un comienzo.
fuente
Japt ,
76 bytes¡Originalmente inspirado en la solución de GB y evolucionado a un puerto!
Toma
k
como la primera entrada yn
como la segunda.Intentalo
Explicación
Entrada implícita de enteros
U=k
yV=n
. Genere una matriz de enteros (õ
) desde1
hastaU
con un paso deV
negado (n
) y reduzca mediante la suma (x
).fuente
R , 27 bytes
Función anónima que toma
k
yn
en ese orden. Crea una lista de longitudk
(tercer argumento pararep
) que se compone de1
throughk
(primer argumento pararep
), repitiendo cada elementon
veces (cuarto argumento pararep
). Luego toma la suma de esa lista.n
está indexado en 1 yk
está indexado en 0. Devuelve un error paran<1
.Pruébalo en línea!
fuente
Befunge, 27 Bytes
Pruébalo en línea
Toma k y luego n como entrada. Utiliza la respuesta de GB como su base matemática.
fuente