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 1se reemplaza por 3, 3se reemplaza por 4+5+1=10(observe cómo se recuperó desde el principio), 4por 5+1+3+4=13y 5por 1+3+4+5+1=14.
Dado [3,2,1,9], su programa debe producir [12,10,9,33], porque lo sustituimos 3con 2+1+9=12, 2con 1+9=10, 1con 9y 9con 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-~ves 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']*3es['a','b','a','b','a','b']). El-~v*apodría ser reemplazado pora+v*ael mismo número de bytes. Por último,[i:i+v]es una indexación de sectores, que mantiene los elementos solo (indexadosiai+v-10).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:_)%#_]}IotaLo que esto significa es que el diente derecho
Iotase aplica al argumentoxy 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.#xes una forma corta de decir el tamaño dexoSize[x]. En esencia, esta función está mapeando laSumfunció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
Nelementos de índices enxmod#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
xy 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ó
cumsumqué activó algo en mi cerebro para usardiffinvy 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+les 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==1oM==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 lmatriz en R pormatrix(a,max(a)*l+1,l). Debido a que R se reciclaaen el orden principal de la columna, terminamos con una matriz que repite los elementosacomo tales:Cada columna son los sucesores cíclicos de cada elemento de
a, con aatravé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 adicional0como la primera fila, generando la matrizEn la primera columna, la entrada
6=4+2es 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+2es igual a10=3 + (4+1+2), y así sucesivamente.Entonces, en la columna
i, laa[i]+2entrada 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 tomarlcomo 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 primeroxes el valor y el segundoyes 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 yintlongitud.Pruébalo en línea . Tenga en cuenta que he seguido
System.outeste 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.01042 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←1fuente
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