전리품에 대한 주름 잡기


12

소개

오랜 전투 끝에 수수께끼의 경쟁에서 스핑크스를 물리 쳤습니다. 당신의 기술에 깊은 스핑크스는 당신에게 당신의 영리함에 상응하는 보상을주기를 원하며, 숫자가 들어있는 8 개의 상자로 나누어 진 마법의 양피지가 존재하게합니다.

스핑크스는 "양피지를 만들어 상자가 겹치도록하고 상자는 덧셈이나 곱셈을 통해 합쳐질 것"이라고 말했다.

직무

목록 / 배열 / 8 개의 자연수를 입력으로 사용하고 일련의 '주름'연산을 통해 얻을 수있는 최대 보상을 반환 / 인쇄하는 프로그램 또는 함수를 작성해야합니다.

역학

'크림'연산은 일부 셀 수에서 +또는 *연산자로 수행됩니다. 목록의 처음 n 개 셀은 연산자를 사용하여 대상 셀에 접 히고 병합됩니다. 병합 작업에서 소비되지 않은 셀은 수정되지 않은 상태로 남아 있습니다.

다음은 n = 3 셀을 사용한 주름의 예입니다.

여기에 이미지 설명을 입력하십시오

추가를 사용하면 다음과 같은 결과가 발생합니다.

여기에 이미지 설명을 입력하십시오

또는 곱셈, 결과는 다음과 같습니다.

여기에 이미지 설명을 입력하십시오

참고 : 단순화를 위해 목록 길이보다 크거나 같은 여러 셀을 사용하여 주름을 잡는 것처럼 1 개 미만의 셀을 사용하여 주름을 잡을 수 없습니다. 그러나 목록은 셀 수의 절반 이상으로 늘어날 수 있습니다.

8 개의 셀 목록을 5로 구할 수 있으므로 길이 5의 새 목록 이 생성 됩니다. 연산자를 [0,1,2,3,4,5,6,7]사용하여 5 개의 셀로 구부 립니다.+[9,9,9,1,0]

채점

표준 코드 골프 규칙-올바른 출력을 생성하고 가장 적은 바이트 수를 갖는 코드입니다.

보너스 : 코드에서 주름 작업 순서를 반환 / 인쇄하여 최대 보상을 얻는 경우 점수에 0.8을 곱하십시오. 출력 예는 다음과 같습니다.

crease 5 +
crease 2 *
crease 2 +
crease 1 *

다음과 같은 형식으로 이러한 입력 및 결과를 사용하여 코드를 테스트하십시오 input - maximum reward.

[0, 1, 2, 3, 4, 5, 6, 7] - 7560
[0, 9, 0, 3, 2, 6, 1, 5] - 1944
[0, 1, 0, 3, 0, 2, 0, 4] - 36
[6, 0, 9, 1, 9, 0, 7, 3] - 11907
[0, 5, 2, 0, 1, 3, 8, 8] - 2560

"점수"표제 아래의 예제 출력이 유효하지 않습니다. 5와 2를 주름 잡은 후에는 3 개의 셀만 남으므로 3을 주름 잡는 것은 의미가 없습니다.
Hand-E-Food

좋은 지적. 변경하겠습니다.
phosgene

답변:


2

Pyth, 31 바이트

Le+bSyMsm,sMJ.T,_<bd>bdm*FkJtUb

이것은 y주름 값을 계산 하는 함수를 정의 합니다.

데모.

이것은 가능한 모든 후계자의 점수를 최대한 활용하여 recusive 방법을 사용합니다.

재귀의 기본 사례는 입력을 가능한 후속 작업의 정렬 된 값에 연결 한 다음 결과 목록의 끝을 가져 와서 구현됩니다. 입력에 하나의 요소 만있는 경우 후속 작업이 없으므로 목록의 끝이 입력의 한 요소입니다.


이길 것으로 상상하기 어렵다. 아마도 CJam은 기회가 있습니까?
phosgene

2

C #, 275 272 바이트

모든 분기를 순회하고 최고 점수를 반환하는 재귀 함수입니다.

명확성을 위해 들여 쓰기 :

using M=System.Math;
int F(int[]n){
    int b=0,g,h,i=0,j,k,l=n.Length;
    if(l<2)
        return n[0];
    for(;++i<l;){
        int[]m=new int[k=M.Max(i,l-i)],o=new int[k];
        for(j=0;j<k;j++){
            m[j]=((g=i-j-1)<0?0:n[g])+((h=i+j)<l?n[h]:0);
            o[j]=h<l&g>=0?n[g]*n[h]:m[j];
        }
        b=M.Max(b,M.Max(F(m),F(o)));
    }
    return b;
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.