| Bytes | Lang | Time | Link |
|---|---|---|---|
| 006 | Japt | 240816T214901Z | Shaggy |
| 033 | Perl 5 MListUtil=sum a | 240816T211309Z | Xcali |
| 047 | R | 240816T203351Z | int 21h |
| 013 | MATL | 160722T005010Z | Luis Men |
| 063 | Clojure | 161225T210538Z | NikoNyrh |
| 066 | Javascript using External Library | 160722T005124Z | applejac |
| 033 | Haskell | 160722T012728Z | Michael |
| 006 | Pyth | 160725T053624Z | isaacg |
| 025 | Matricks | 160724T142049Z | Blue |
| 094 | C# | 160722T102235Z | supermee |
| 037 | q | 160723T161917Z | skeevey |
| 045 | JavaScript ES6 | 160722T085009Z | edc65 |
| 008 | 05AB1E | 160722T115149Z | Emigna |
| 072 | PHP program | 160722T174828Z | Titus |
| 160 | VBA | 160722T132458Z | user3819 |
| 015 | Dyalog APL | 160722T122139Z | lstefano |
| 027 | Brachylog | 160722T122013Z | Fatalize |
| 089 | C# | 160722T112919Z | downrep_ |
| 007 | Pyke | 160722T103149Z | Blue |
| 679 | JavaScript ES6 79 Bytes | 160722T094129Z | MT0 |
| 055 | Mathematica | 160722T061148Z | martin |
| 038 | Retina | 160722T070102Z | Martin E |
| 069 | Erlang | 160722T062642Z | c.P.u1 |
| 082 | F# | 160722T011114Z | asibahi |
| 011 | J | 160722T040529Z | miles |
| 039 | Julia | 160722T031440Z | Dennis |
| 006 | Jelly | 160722T015432Z | Dennis |
| 021 | Excel | 160722T011542Z | Joffan |
| 050 | JavaScript ES6 | 160722T005143Z | NinjaBea |
| 008 | Pyth | 160722T005341Z | Leaky Nu |
| 040 | Python | 160722T005022Z | Dennis |
| 047 | Python 3 | 160722T004700Z | El'e |
Japt, 6 bytes
£tYX x
£tYX x :Implicit input of array U
£ :Map each X at index Y
t : Sub-array of U
Y : starting at index Y
X : of length X
x : Reduce by addition
R, 47 bytes
\(a)Map(\(j,n)sum(a[0:n+j],na.rm=T),seq(a),a-1)
A function which inputs an array and outputs the list of the partial sums. Turned out that the straightforward implementation is also the shortest one.
The subsetting and summation functions are mapped to the input array. If the end of the subsetting range is greater than the last index, NA values will be generated and they will be removed thanks to na.rm argument.
MATL, 17 14 13 bytes
fGy+!-R0<G*!s
Explanation
Try it online! Or verify all test cases (code modified to handle several inputs).
f % Take input implicitly. Indices of nonzero elements: this gives [1 2 ... n]
% where n is input size
G % Push input again
y % Push a copy of [1 2 ... n]
+ % Add. Gives [a+1 b+2...] where [a b...] is the input
! % Transpose into a column vector
- % Subtraction with broadcast. Gives 2D array
R % Keep upper triangular part, making the rest of entries 0
0< % True for negative entries. Each row corresponds to a substring sum.
% For each row, this gives true for the entries of the input that make up
% that substring sum. Each row is thus a mask to select entries of the input
G % Push input again
* % Multiply with broadcast. This multiplies the input times each row
!s % Sum of each row. Implicitly display
Clojure, 63 bytes
(defn f[[b & r]](concat[(apply + b(take(dec b)r))](if r(f r))))
Uses pattern matching to decompose input argument in to the first and the rest of the arguments.
Javascript (using External Library) (66 bytes)
n=>_.From(n).Select((v,i)=>_.From(n).Slice(i,i+v).Sum()).ToArray()
Link to lib: https://github.com/mvegh1/Enumerable
Code explanation: _.From is loading the input array into the library, which is basically LINQ for js. Then each item in the array is mapped according to the following predicate: Take the input, and slice it from current item index and take that index plus the current item's value. Then Sum up that subsequence. Convert the result to a native JS array and return it
Haskell, 34, 33 bytes
f l@(x:y)=sum(take x l):f y
f x=x
One byte saved by nimi.
Pyth, 6 bytes
ms<~tQ
This is a different solution from any others so far. It loops over the input, slicing an summing the initial values, then removing the first element of the stored input, and repeat.
Explanation:
ms<~tQ
ms<~tQdQ Implicit variable introduction
Implicit: Q = eval(input())
m Q Map d over the input, Q
< Qd Take the first d elements of Q
s Sum them
~tQ Afterwards, set Q to the tail of Q, removing the first element.
Matricks, 25 bytes
Yay, finally a challenge I don't need new features for!
md{z:l-g:c;+c;q:c;};:1:l;
Run with: python matricks.py substring.txt [[<input>]] 0
Explanation:
m :1:l; #loop over entire input
#set each value to...
d{ } #the sum of...
z:l-g:c:+c;q:c; #the input cropped to
#the length of the value in the cell
C#, 94 bytes
Console.Write(String.Join(",",a.Select((v,i)=>a.Skip(i).Take(v).Sum().ToString()).ToArray()));
Where a is an int[] that represents the input to be solved.
q (37 bytes)
{sum each(til[count x],'x)sublist\:x}
Example:
q){sum each(til[count x],'x)sublist\:x}3 2 4 1 1 5 1 2
9 6 11 1 1 8 1 2
JavaScript (ES6), 45
reduce beaten again!
a=>a.map((v,i)=>eval(a.slice(i,v+i).join`+`))
F=
a=>a.map((v,i)=>eval(a.slice(i,v+i).join`+`))
;[[3, 2, 4, 1, 1, 5, 1, 2],
[1, 2, 3, 4, 5],
[3, 3, 3, 3, 3, 3, 3, 3,],
[5, 1, 2, 4, 1],
[1]].forEach(t=>console.log(t+' -> '+F(t)))
05AB1E, 11 8 bytes
[D¬£Oˆ¦Ž
Explanation
[ # infinite loop
D # duplicate current list
¬ # get head of list
£ # get that many elements from list
O # sum
ˆ # add to global array
¦ # remove first element of list
Ž # break if stack is empty
# implicitly push and print global array
PHP program, 72 Bytes
<?foreach($a=$_GET[a]as$i=>$v)echo array_sum(array_slice($a,$i,$v)),"
";
call with php-cgi -f <filename> 'a[]=3&a[]=2&a[]=4...
+11 as a function:
function f($a){foreach($a as$i=>$v)$r[]=array_sum(array_slice($a,$i,$v));return$r;}
+9 without builtins:
function p($a){foreach($c=$r=$a as$i=>$v)for($k=$i;$k--;)if(--$a[$k]>0)$r[$k]+=$v;return$r;}
($c keeps the original values, $a counts down for each index, $r gets the sums)
-3 as program:
<?foreach($a=$r=$c=$_GET[a]as$i=>$v)for($k=$i;$k--;)if(--$c[$k]>0)$r[$k]+=$v;print_r($r);
VBA, 160 bytes
Function e(g())
Dim h()
k=LBound(g)
l=UBound(g)
ReDim h(k To l)
On Error Resume Next
For i=k To l
For j=i To i+g(i)-1
h(i)=h(i)+g(j)
Next
Next
e=h
End Function
Dyalog APL, 15 bytes
{+/¨⍵↑∘⌽¨⌽,\⌽⍵}
or
{⌽+/¨(-↑¨,\)⌽⍵}
Brachylog, 27 bytes
.v|h~l(A:Tc?;A?)b:0&~b.h~+A
Try it online! or verify all test cases.
Explanation
.v Input = Output = []
| Or
h~l A is a list, its length is the value of the first element of the Input
(
A:Tc? The concatenation of A with another list T results in the Input
; Or
A? A = Input
)
b:0& Call recursively on Input minus the first element
~b. Output is the output of that call with an extra element at the beginning
h~+A That extra element is the sum of the elements of A
C#, 89 bytes
int[]s(List<int>a)=>a.Select((n,i)=>a.GetRange(i,Math.Min(n,a.Count-i)).Sum()).ToArray();
pretty straight forward
improvement ideas appreciated
Pyke, 12 7 bytes
FKo>i<s
- o = 0
F - for i in input:
o - o+=1
> - input[o:]
i< - ^[:i]
s - sum(^)
JavaScript (ES6) - 79 Bytes
A recursive solution that does not use any of the Array methods:
f=([a,...t],n)=>a&&n?a+f(t,n-1):0;g=([a,...t],r=[])=>a?g(t,[...r,a+f(t,a-1)]):r
Testing:
f=([a,...t],n)=>a&&n?a+f(t,n-1):0;
g=([a,...t],r=[])=>a?g(t,[...r,a+f(t,a-1)]):r;
[
[3, 2, 4, 1, 1, 5, 1, 2],
[1, 2, 3, 4, 5],
[3, 3, 3, 3, 3, 3, 3, 3,],
[5, 1, 2, 4, 1],
[1]
].forEach(a=>console.log(''+g(a)));
Mathematica 60 55 bytes
Tr@Take[#,UpTo@#&@@#]&/@Drop[#,t-1]~Table~{t,Length@#}&
eg
f = %; f /@ {{1, 2, 3, 4, 5}, {3, 3, 3, 3, 3, 3, 3, 3}, {5, 1, 2, 4, 1}, {1}}
(* {{1, 5, 12, 9, 5}, {9, 9, 9, 9, 9, 9, 6, 3}, {13, 1, 6, 5, 1}, {1}} *)
Thanks @MartinEnder for shaving off 5 bytes :)
Retina, 38 bytes
Byte count assumes ISO 8859-1 encoding.
\d+
$*
M!&`\b1(1)*(?<-1>,1+)*
M%`1
¶
,
Input and output are comma-separated lists.
Try it online! (The first line enables a linefeed-separated test suite.)
Erlang, 69 bytes
f(A)->put(1,1),L=lists,[L:sum(L:sublist(A,put(1,get(1)+1),X))||X<-A].
Erlang's higher-order functions for lists do not receive the index of the current element. This uses the process dictionary to set the index of the current element.
F#, 84 82 bytes
let f(A:int[])=[for i in 0..A.Length-1->Seq.skip i A|>Seq.truncate A.[i]|>Seq.sum]
J, 11 bytes
+/@{."_1]\.
Usage
f =: +/@{."_1]\.
f 3 2 4 1 1 5 1 2
9 6 11 1 1 8 1 2
f 1 2 3 4 5
1 5 12 9 5
Explanation
+/@{."_1]\. Input: A
]\. Get each suffix of A from longest to shortest
{."_1 For each value in A, take that many values from its corresponding suffix
+/@ Sum that group of values taken from that suffix
Return the sums
Jelly, 6 bytes
ṫJḣ"ḅ1
Try it online! or verify all test cases.
How it works
ṫJḣ"ḅ1 Main link. Argument: A (array)
J Index; yield the 1-based indices of A.
ṫ Tail; map k to the postfix of A that begins with the k-th element.
ḣ" Vectorized head; for each k in A, truncate the corr. postfix to length k.
ḅ1 Convert the resulting slices from base 1 to integer.
Excel, 21 bytes
=SUM(OFFSET(A1,,,A1))
Open a new spreadsheet, put the test values in column A. Enter the formula in B1 and double click the cell handle to ride the range.
JavaScript ES6, 50 bytes
a=>a.map((e,i)=>a.slice(i,i+e).reduce((a,b)=>a+b))
Pretty self-explanatory. It maps over each element in the array, getting the slice from that index through the index plus that element's value, and reduceing by adding.
f=
a=>a.map((e,i)=>a.slice(i,i+e).reduce((a,b)=>a+b))
;[
[3, 2, 4, 1, 1, 5, 1, 2],
[1, 2, 3, 4, 5],
[3, 3, 3, 3, 3, 3, 3, 3,],
[5, 1, 2, 4, 1],
[1]
].forEach(function(test){
document.getElementById('p').textContent += test + ' => ' + f(test) + '\n';
});
<pre id="p"></pre>
Python 3, 47 bytes
lambda X:[sum(X[i:i+k])for i,k in enumerate(X)]
Pretty straightforward implementation. Python's default behavior for slices that go past the end of the list was very convenient here.
