Tengo un desafío simple para ti esta vez. Dada una serie de enteros positivos A (o el equivalente en su idioma), reemplace cada entrada A i con la suma de los siguientes elementos A i de A , retrocediendo desde el principio si no hay suficientes elementos.
Como de costumbre, puede competir en cualquier lenguaje de programación y puede tomar entradas y proporcionar salidas a través de cualquier método estándar y en cualquier formato razonable, mientras toma nota de que estas lagunas están prohibidas por defecto. Opcionalmente, también puede tomar el tamaño de A como entrada. Este es el código de golf , por lo que gana el envío más corto (en bytes) para cada idioma .
Ejemplos / Casos de prueba
Dado [1,3,4,5]
, su código debería salir [3,10,13,14]
, porque 1
se reemplaza por 3
, 3
se reemplaza por 4+5+1=10
(observe cómo se recuperó desde el principio), 4
por 5+1+3+4=13
y 5
por 1+3+4+5+1=14
.
Dado [3,2,1,9]
, su programa debe producir [12,10,9,33]
, porque lo sustituimos 3
con 2+1+9=12
, 2
con 1+9=10
, 1
con 9
y 9
con 3+2+1+9+3+2+1+9+3=33
(observe cómo nos hemos recuperado desde el principio más de una vez).
Algunos casos de prueba más para elegir:
[4,3,2,1] -> [10,7,5,4]
[3,2,1,9] -> [12,10,9,33]
[1,3,4,5] -> [3,10,13,14]
[4,4,3,2,2] -> [11,11,8,6,8]
[3,5,3,2,1] -> [10,14,6,4,3]
[3,2,4,3,2,1,1] -> [9,7,7,4,2,1,3]
[7,8,6,5,4,3,2,1,5] -> [29,33,20,15,11,8,6,5,30]
[28,2,4,2,3,2,3,4,5,3] -> [137,6,10,5,9,7,12,38,39,34]
[1,2,3,4,5,4,3,2,1,2,3,4,3,2,1] -> [2,7,13,14,12,8,5,3,2,7,9,7,4,2,1]
fuente
+
al final). Además, eh, tal vez me ninja la próxima vez. :)Python , 55 bytes
Pruébalo en línea!
fuente
~
operador no es bit a bit, es efectivamente una abreviatura-1-v
, por lo que-~v
es una abreviatura para lo-(-1-v)
que es justo1+v
(pero evita paréntesis(1+v)*a
). En segundo lugar, en Python se puede multiplicar una lista por un número entero para repetirla (por ejemplo,['a','b']*3
es['a','b','a','b','a','b']
). El-~v*a
podría ser reemplazado pora+v*a
el mismo número de bytes. Por último,[i:i+v]
es una indexación de sectores, que mantiene los elementos solo (indexadosi
ai+v-1
0).J, 33 bytes
sin golf
explicación
Pruébalo en línea!
fuente
C (gcc) ,
8685 bytesPruébalo en línea!
fuente
for(k=i=0;i++<y[l];)k+=y[(l+i)%c];
C(y,c,l,i,k)
.Haskell,
504744 bytesPruébalo en línea!
fuente
05AB1E ,
87 bytesPruébalo en línea!
Explicación
fuente
K4 / K (oK) ,
2019 bytesSolución:
Pruébalo en línea!
Ejemplos:
Explicación:
Reformar la entrada, soltar primero, tomar x longitud de cada uno, resumir.
fuente
Jalea , 7 bytes
Pruébalo en línea!
fuente
Adjunto , 26 bytes
Pruébalo en línea!
Explicación
Esta es una bifurcación de dos funciones:
{Sum=>_[(_2+1:_)%#_]}
Iota
Lo que esto significa es que el diente derecho
Iota
se aplica al argumentox
y se pasa como el segundo argumento al diente central (la primera función). Entonces esto se convierte, para entradax
:Sustituyendo a aquellos por
_
y_2
:Iota[x]
devuelve una matriz de los índices dex
. Es equivalente a0...#x
.#x
es una forma corta de decir el tamaño dex
oSize[x]
. En esencia, esta función está mapeando laSum
función sobre la segunda expresión:El
x[...]
bit externo significa que...
generará una serie de índices para seleccionarx
. La parte más importante de generar los índices es esta:Esta expresión usa un poco de vectorización. Para visualizar esto, supongamos que la entrada es
x := [1, 3, 4, 5]
. Entonces, esta expresión es equivalente a:Esta es una lista de índices que representan los siguientes
N
elementos de índices enx
mod#x
. Para que sean seguros para su recuperación, tomamos este mod de matriz#x
:Esto nos da los índices adecuados, que luego se obtienen de
x
y se suma cada matriz, dando los resultados adecuados.Otros intentos
36 bytes:
{Sum@_&Get=>((_2+1.._2+_)%#_)}#Iota
- Olvidéx[...]
completamente vectorizar, por lo que se convierte en:30 bytes:
{Sum=>_[(_2+1.._2+_)%#_]}#Iota
- pero luego me di cuenta de que_2+
en el rango interno se podía factorizar, lo que significa que podríamos guardar paréntesis usando en:
lugar de..
, dándonos la versión actual.fuente
R ,
8964 bytesPruébalo en línea!
La idea principal es generar un vector de índice de ciclo lo suficientemente largo que pueda usar para obtener los elementos necesarios del vector de entrada.
Versión original:
Pruébalo en línea!
fuente
R ,
6258 bytesPruébalo en línea!
Una alternativa a la otra solución R . En los comentarios, JayCe mencionó
cumsum
qué activó algo en mi cerebro para usardiffinv
y reciclar la matriz en lugar de hacerlorep
.Explicación:
Dada la matriz de entrada
a
, letM=max(a)
yl=length(a)
.Observe que ese
M+l
es el índice máximo posible al que tendríamos que acceder, y queM+l<=M*l+1
, dado que siM,l>1
,M+l<=M*l
(con igualdad solo cuandoM=l=2
) y sil==1
oM==1
, entoncesM+l==M*l+1
.A modo de ejemplo, let
a=c(4,3,2,1)
. EntoncesM=l=4
.Construimos la
M*l+1 x l
matriz en R pormatrix(a,max(a)*l+1,l)
. Debido a que R se reciclaa
en el orden principal de la columna, terminamos con una matriz que repite los elementosa
como tales:Cada columna son los sucesores cíclicos de cada elemento de
a
, con aa
través de la primera fila; Esto se debe a la forma en que R recicla sus argumentos en una matriz.A continuación, tomamos la "derivada" inversa con
diffinv
, esencialmente la suma acumulativa de cada columna con un adicional0
como la primera fila, generando la matrizEn la primera columna, la entrada
6=4+2
es igual a14=4 + (3+2+1+4)
, que es la suma de sucesor cíclico (CSS) más un encabezado4
. Del mismo modo, en la segunda columna, la entrada5=3+2
es igual a10=3 + (4+1+2)
, y así sucesivamente.Entonces, en la columna
i
, laa[i]+2
entrada nd es igual aCSS(i)+a[i]
. Por lo tanto, tomamos filas indexadas pora+2
, dando una matriz cuadrada:Las entradas a lo largo de la diagonal son iguales a las sumas cíclicas del sucesor más
a
, por lo que extraemos la diagonal y restamosa
, devolviendo el resultado como las sumas cíclicas del sucesor.fuente
Map
, y originalmente esto era como 68 bytes antes de que descubriera que podía tomarl
como entrada.Pyth,
1311 bytesGuardado 2 bytes gracias al Sr. Xcoder.
Pruébalo aquí
Explicación
fuente
Carbón , 12 bytes
Pruébalo en línea! El enlace es a la versión detallada del código. Explicación:
fuente
JavaScript ES6, 65 bytes
Solución directa. Sin golf:
La
map()
función de JavaScript es perfecta para el trabajo, ejecuta la devolución de llamada dada contra cada elemento y la reemplaza por el resultado de la devolución de llamada. La devolución de llamada recibe dos parámetros, el primerox
es el valor y el segundoy
es el índice. Al tomar el móduloi % a.length
, podemos recorrer fácilmente la matriz, varias veces si es necesario.Fragmento de prueba
(Ponga la entrada como notación JSON)
Mostrar fragmento de código
fuente
Java 8, 87 bytes
Un lambda vacío curry tomando una
int[]
lista yint
longitud.Pruébalo en línea . Tenga en cuenta que he seguido
System.out
este programa para obtener resultados para una impresión más bonita.fuente
Julia 0.6 ,
635553 bytesPruébalo en línea!
Solución anterior:
Julia 0.6 , 65 bytes
Pruébalo en línea!
Otra solución. No es bueno por bytecount, pero me gusta, y probablemente sea más eficiente que los otros dos, especialmente si la entrada tiene números grandes.
Julia 0.6 , 69 bytes
Pruébalo en línea!
fuente
Lienzo , 10 bytes.
Pruébalo aquí!
Explicación:
fuente
QBasic 1.1 , 115 bytes
La primera entrada es la longitud L , luego las entradas posteriores L son los elementos en orden. Las salidas L representan la matriz resultante, con los elementos en el orden en que se presentan.
fuente
Japt, 7 bytes
Pruébalo aquí
fuente
APL + WIN, 37 bytes
Solicitudes de entrada:
Pruébalo en línea! Cortesía de Dyalog Classic.
Explicación:
fuente
Rubí , 38 bytes.
Pruébalo en línea!
fuente
JavaScript, 65 bytes 3̶0̶0̶ ̶b̶y̶t̶e̶s̶
golf
sin golf
Pruébalo en línea!
(versión no golfizada arriba) ¡Soy nuevo en esto del codegolf!
*¡actualizado! Gracias a los útiles enlaces proporcionados en los comentarios, ¡logré reducir el tamaño a 65 bytes!
fuente
n
), que no permitimos. Bienvenido a PPCG, aunque :)Perl 5 con
-M5.010
42 bytesPruébalo en línea!
fuente
JavaScript, 46 bytes
Pruébalo en línea
fuente
Cjam, 23 bytes
Pruébalo en línea!
fuente
Pip
-rn
, 14 bytesToma números de entrada en líneas sucesivas de stdin; da números de salida en líneas sucesivas de stdout.Pruébalo en línea!
Explicación
O, usando un ejemplo trabajado:
fuente
APL (Dyalog Classic) , 12 bytes
Pruébalo en línea!
usos
⎕io←1
fuente
Perl 6 ,
5032 bytesPruébalo en línea!
Soy nuevo en el golf en Perl 6, así que estoy seguro de que esto puede ser más corto.¡Ya no es nuevo y volvemos al golf!fuente