소개
이 배열을 살펴 봅시다 : [3, 2, 4, 1, 1, 5, 1, 2]
.
각 요소는 합쳐야하는 부분 문자열의 길이를 표시합니다. 위 배열의 첫 번째 요소를 살펴 보겠습니다.
[3, 2, 4, 1, 1, 5, 1, 2]
^
첫 번째 인덱스의 요소는 3 이므로 시작 위치와 동일한 인덱스를 가진 길이가 3 인 하위 문자열을 가져옵니다.
[3, 2, 4]
합산하면 결과는 9 이므로 부분 문자열 합 집합 의 첫 번째 요소 는 9
입니다.
배열의 모든 요소에 대해이 작업을 수행합니다.
3 -> [3, 2, 4]
2 -> [2, 4]
4 -> [4, 1, 1, 5]
1 -> [1]
1 -> [1]
5 -> [5, 1, 2]
1 -> [1]
2 -> [2]
숫자 5 가 약간 이상한 경우 임을 알 수 있습니다 . 해당 숫자가 배열의 길이를 초과합니다.
[3, 2, 4, 1, 1, 5, 1, 2]
^ ^ ^ ^ ^
배열을 초과하는 모든 것을 무시하므로 그냥 사용하십시오 [5, 1, 2]
.
마지막 단계는 모든 것을 요약하는 것입니다.
[3, 2, 4] -> 9
[2, 4] -> 6
[4, 1, 1, 5] -> 11
[1] -> 1
[1] -> 1
[5, 1, 2] -> 8
[1] -> 1
[2] -> 2
그리고 그것은 출력되어야 할 배열입니다 :
[9, 6, 11, 1, 1, 8, 1, 2]
작업
양의 (0이 아닌) 정수를 가진 비어 있지 않은 배열이 주어지면 부분 문자열 합 set을 출력하십시오 . 이것은 code-golf 이므로 바이트 수가 가장 적은 제출이 승리합니다!
테스트 사례
[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]
답변
젤리 , 6 바이트
ṫJḣ"ḅ1
온라인으로 사용해보십시오! 또는 모든 테스트 사례를 확인하십시오 .
작동 원리
ṫ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.
답변
답변
엑셀, 21 바이트
=SUM(OFFSET(A1,,,A1))
새 스프레드 시트를 열고 A 열에 테스트 값을 입력하십시오. B1에 수식을 입력하고 셀 핸들을 두 번 클릭하여 범위를 타십시오.
답변
파이썬 3, 47 바이트
lambda X:[sum(X[i:i+k])for i,k in enumerate(X)]
매우 간단한 구현입니다. 리스트의 끝을 지나는 슬라이스에 대한 파이썬의 기본 동작은 여기서 매우 편리했습니다.
답변
하스켈, 34 , 33 바이트
f l@(x:y)=sum(take x l):f y
f x=x
nimi가 1 바이트를 절약했습니다.
답변
자바 스크립트 ES6, 50 바이트
a=>a.map((e,i)=>a.slice(i,i+e).reduce((a,b)=>a+b))
꽤 자명하다. 그것은 map
지고, 어레이의 각 요소를 통해 s의 slice
것과 i
인덱스 더한 것을 통해 ndex을 e
lement 값과 reduce
가산함으로써 보내고.
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>
답변
J, 11 바이트
+/@{."_1]\.
용법
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
설명
+/@{."_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