Introducción
Observemos esta matriz: [3, 2, 4, 1, 1, 5, 1, 2]
.
Cada elemento muestra la longitud de la subcadena que debe resumirse. Echemos un vistazo al primer elemento de la matriz anterior:
[3, 2, 4, 1, 1, 5, 1, 2]
^
El elemento en el primer índice es 3 , por lo que ahora tomamos una subcadena de longitud tres con el mismo índice que la posición inicial:
[3, 2, 4]
Cuando resumió, esto se traduce en 9 , por lo que el primer elemento del conjunto suma subcadena es 9
.
Hacemos esto para todos los elementos de la matriz:
3 -> [3, 2, 4]
2 -> [2, 4]
4 -> [4, 1, 1, 5]
1 -> [1]
1 -> [1]
5 -> [5, 1, 2]
1 -> [1]
2 -> [2]
Puedes ver que el número 5 es un caso un poco extraño. Ese número excede la longitud de la matriz:
[3, 2, 4, 1, 1, 5, 1, 2]
^ ^ ^ ^ ^
Ignoraremos todo lo que exceda la matriz, por lo que solo usaremos [5, 1, 2]
.
El último paso es resumir todo:
[3, 2, 4] -> 9
[2, 4] -> 6
[4, 1, 1, 5] -> 11
[1] -> 1
[1] -> 1
[5, 1, 2] -> 8
[1] -> 1
[2] -> 2
Y esa es la matriz que se debe generar:
[9, 6, 11, 1, 1, 8, 1, 2]
La tarea
Dada una matriz no vacía con enteros positivos (no cero), genera el conjunto de suma de subcadenas . Este es el código de golf , por lo que gana el envío con el menor número de bytes.
Casos de prueba
[1, 2, 3, 4, 5] -> [1, 5, 12, 9, 5]
[3, 3, 3, 3, 3, 3, 3, 3] -> [9, 9, 9, 9, 9, 9, 6, 3]
[5, 1, 2, 4, 1] -> [13, 1, 6, 5, 1]
[1] -> [1]
Respuestas:
Jalea , 6 bytes
Pruébalo en línea! o verificar todos los casos de prueba .
Cómo funciona
fuente
Python, 40 bytes
Pruébalo en Ideone .
fuente
Excel, 21 bytes
=SUM(OFFSET(A1,,,A1))
Abra una nueva hoja de cálculo, coloque los valores de prueba en la columna A. Ingrese la fórmula en B1 y haga doble clic en el controlador de celda para recorrer el rango.
fuente
Python 3, 47 bytes
Implementación bastante sencilla. El comportamiento predeterminado de Python para los cortes que van más allá del final de la lista fue muy conveniente aquí.
fuente
Haskell,
34, 33 bytesUn byte guardado por nimi.
fuente
JavaScript ES6, 50 bytes
Bastante autoexplicativo. Está
map
sobre cada elemento de la matriz, obteniendo elslice
de esei
ndex a través del índice máse
el valor de ese elemento, ereduce
ing sumando.fuente
J, 11 bytes
Uso
Explicación
fuente
JavaScript (ES6), 45
reduce
golpeado de nuevo!fuente
f=
, al igual que en esta respuesta .f=
ya no se cuenta en los 45 bytesRetina , 38 bytes
El recuento de bytes asume la codificación ISO 8859-1.
La entrada y la salida son listas separadas por comas.
Pruébalo en línea! (La primera línea habilita un conjunto de pruebas separado por salto de línea).
fuente
Mathematica
6055 bytesp.ej
Gracias @MartinEnder por reducir 5 bytes :)
fuente
#+Tr@Take[x=Rest@x,UpTo[#-1]]&/@(x=#)&
todavía no estoy seguro de que sea óptima, pero ahorra 17 bytes.05AB1E,
118 bytesExplicación
Pruébalo en línea
fuente
Pyth , 8 bytes
Banco de pruebas.
Traducción de la respuesta de El en Python .
fuente
Erlang, 69 bytes
Las funciones de orden superior de Erlang para listas no reciben el índice del elemento actual. Esto usa el diccionario de proceso para establecer el índice del elemento actual.
fuente
Pyke,
127 bytesPruébalo aquí!
fuente
VBA, 160 bytes
fuente
Pyth, 6 bytes
Banco de pruebas
Esta es una solución diferente a cualquier otra hasta ahora. Recorre la entrada, corta y suma los valores iniciales, luego elimina el primer elemento de la entrada almacenada y repite.
Explicación:
fuente
Julia, 39 bytes
Pruébalo en línea!
fuente
F #,
8482 bytesfuente
JavaScript (ES6): 79 bytes
Una solución recursiva que no utiliza ninguno de los métodos de matriz:
Pruebas:
fuente
C #, 89 bytes
muy claro
ideas de mejora apreciadas
fuente
Brachylog , 27 bytes
Pruébalo en línea! o verificar todos los casos de prueba .
Explicación
fuente
Dyalog APL, 15 bytes
o
fuente
Programa PHP, 72 bytes
llamar con
php-cgi -f <filename> 'a[]=3&a[]=2&a[]=4...
+11 como una función:
+9 sin incorporaciones:
($ c mantiene los valores originales, $ a cuenta atrás para cada índice, $ r obtiene las sumas)
-3 como programa:
fuente
q (37 bytes)
Ejemplo:
fuente
Matrices , 25 bytes
¡Sí, finalmente un desafío para el que no necesito nuevas funciones!
Corre con:
python matricks.py substring.txt [[<input>]] 0
Explicación:
fuente
Javascript (usando la biblioteca externa) (66 bytes)
Enlace a lib: https://github.com/mvegh1/Enumerable
Explicación del código: _.Desde está cargando la matriz de entrada en la biblioteca, que es básicamente LINQ para js. Luego, cada elemento de la matriz se asigna de acuerdo con el siguiente predicado: tome la entrada, córtela del índice del elemento actual y tome ese índice más el valor del elemento actual. Luego, resume esa subsecuencia. Convierta el resultado en una matriz JS nativa y devuélvala
fuente
var
de las variables, no necesita eso en el golf. También puede cambiar.forEach
a lo.map
que cuesta menos bytes.Clojure, 63 bytes
Utiliza la coincidencia de patrones para descomponer el argumento de entrada en el primero y el resto de los argumentos.
fuente
MATL ,
171413 bytesExplicación
Pruébalo en línea! O verifique todos los casos de prueba (código modificado para manejar varias entradas).
fuente
C #, 94 bytes
Donde a es un int [] que representa la entrada a resolver.
fuente