증분을 두 배로 늘리면서 카운트 다운


14

입력:

비어 있지 않은 목록 / 벡터로 각 요소에 값 / 문자가 포함 되어 카운트 또는 다운 여부를 나타냅니다 . 내가 사용합니다 1-1,하지만 당신은 당신이 원하는대로 선택할 수 있습니다. 당신은 당신이 사용할 수 없습니다,이 개 값을 사용할 수 있습니다 1,2,3...-1,-2,-3...최대를 위해 아래로 각각.

도전:

기하학적 시리즈 1, 2, 4, 8, 16, 32 ... 의 숫자를 사용합니다 . 카운트 업 또는 카운트 다운을 시작할 때마다 1 , 2 , 4 등 으로 증가 합니다. 다른 방법으로 변경하고 계산을 시작하면 1 , 2 , 4 등 을 뺍니다 . 결과는 당신이 마지막에 얻는 숫자입니다.

예 :

아래 예에서 첫 번째 줄은 입력이고, 두 번째 줄은 카운트 다운 / 업다운하는 숫자이고, 세 번째 줄은 누적 합계이며, 마지막 줄은 출력입니다.

예 1 :

1   1   1   1   1   1   1   1   1   1   
1   2   4   8   16  32  64  128 256 512 
1   3   7   15  31  63  127 255 511 1023
1023

예 2 :

1   1   1   1   1   1   -1  -1  -1  -1  1   1   1
1   2   4   8   16  32  -1  -2  -4  -8  1   2   4
1   3   7   15  31  63  62  60  56  48  49  51  55
55

보시다시피, 첫 번째 1또는 -1"재설정"하고 우리가 세는 값, 그리고 연속적인 값 1또는 -1두 배의 값을 의미합니다.

예 3 :

-1  -1  1   1   -1  -1  -1
-1  -2  1   2   -1  -2  -4
-1  -3  -2  0   -1  -3  -7
-7

몇 가지 추가 테스트 사례는 잠재적 인 코너 사례를 설명합니다.

입력은 첫 번째 줄에 있습니다. 출력은 두 번째입니다.

1
1
-------    
-1
-1
-------
-1   1  -1   1  -1   1  -1   1  -1   1  -1   1
0

이것은 이므로 각 언어로 가장 짧은 제출이 이깁니다.

답변:



6

MATL , 6 바이트

Y'Wq*s

온라인으로 사용해보십시오! 또는 모든 테스트 사례를 확인하십시오 .

설명

입력을 고려하십시오 [1 1 1 1 1 1 -1 -1 -1 -1 1 1 1].

     % Implicit input
     % STACK: [1 1 1 1 1 1 -1 -1 -1 -1 1 1 1]
Y'   % Run-length encoding
     % STACK: [1 -1 1], [6 4 3]
W    % Exponentiation with base 2, element-wise
     % STACK: [1 -1 1], [64 16 8]
q    % Subtract 1
     % STACK: [1 -1 1], [63 15 7]
*    % Multiply, element-wise
     % STACK: [63 -15 7]
s    % sum of array
     % STACK: 55
     % Implicit display

6

Japt , 8 6 바이트

@ETHproductions 덕분에 -2 바이트

ò¦ xì2

온라인으로 사용해보십시오!

설명

암시 적 입력 : [1, 1, 1, -1, -1, -1, -1, 1, 1]

ò¦

ò다른 ( ¦) 요소 사이의 입력 배열 ( ) :
[[1, 1, 1], [-1, -1, -1, -1], [1, 1]]

ì2

2자릿수 를 기본 자릿수 ( ì) 의 배열로 구문 분석 한 자체 맵핑하십시오 .[7, -15, 3]

x

x결과 배열 의 합 ( )을 가져옵니다.-5


좋은 기술. 나는 변경할 수 있다고 생각 ®ì2Ãx하는 xì22 바이트를 저장합니다.
ETHproductions

@ETHproductions Man, 당신은 내 게시물에 온통했습니다. 다시 감사합니다!
저스틴 마리너 (Justin Mariner)

5

Cubix , 65 바이트

W(?\q.p)w.;0.w;/0>I!U-unP(nwUs;q\^q:;^!u?P(w!u+w.;;>2p!u/@Os..sr\

온라인으로 사용해보십시오!

        W ( ? \
        q . p )
        w . ; 0
        . w ; /
0 > I ! U - u n P ( n w U s ; q
\ ^ q : ; ^ ! u ? P ( w ! u + w
. ; ; > 2 p ! u / @ O s . . s r
\ . . . . . . . . . . . . . . .
        . . . .
        . . . .
        . . . .
        . . . .

달려 봐

이에 대한 간단한 설명으로 :

  • 각 정수 (1 또는 -1)를 읽고 이전과 비교하십시오. 만약:
    • 카운터의 시작과 같이 바닥으로 밀어
    • 그렇지 않으면 카운터를 맨 위로 가져오고 적절하게 증가 / 감소시킵니다.
  • 입력이 완료되면 각 카운터를 상단으로 가져오고 네거티브 처리는 2 ^ 카운터-1을 수행합니다.
  • 결과 합산 및 출력

4

자바 스크립트 (ES6), 38 바이트

a=>a.map(e=>r+=d=d*e>0?d+d:e,r=d=0)&&r

3

R , 32 바이트

sum((2^(R=rle(scan()))$l-1)*R$v)

온라인으로 사용해보십시오!

이것은 다른 몇 가지 방법과 동일합니다.

입력으로 -1 -1 1 1 -1 -1 -1

  • 입력에서 실행 길이 인코딩을 수행하십시오. 길이 2, 2, 3와 값이있는 결과-1, 1, -1
  • 길이-1의 거듭 제곱에 2를 수행합니다. 3, 3, 7
  • RLE 값을 곱하면 -3, 3, -7
  • 합계를 돌려줍니다 -7



2

C ++ 14, 58 바이트

[](auto v,int&s){int p=s=0;for(auto x:v)s+=p=x*p<1?x:2*p;}

v인수 ( std::vector, 또는 반복 가능한 컨테이너) 를 통해 입력을 받아 인수로 출력합니다 s(참조). 의 각 요소는 또는 v중 하나 여야합니다 .1-1

사용 사례 및 테스트 사례


2

Brachylog , 13 바이트

ḅ⟨{ȧᵐ~ḃ}×h⟩ᵐ+

온라인으로 사용해보십시오!

Brachylog _대신을 사용 합니다 -.

설명:

?ḅ⟨{ȧᵐ~ḃ}×h⟩ᵐ+. Predicate (implicit ?.)
?               The input
 ḅ              A list where its elements' elements are equal, and when concatenated is ?
            ᵐ   The result of mapping this predicate over ?
  ⟨        ⟩      The result of forking two predicates over ? with a third
   {    }           The result of this predicate on ?
     ᵐ                The result of mapping this predicate over ?
    ȧ                   The absolute value of ?
      ~               An input where the result of this predicate over it is ?
       ḃ                A list that represents the digits of ? in base I (default 2)
          h         An object that is the first element of ?
         ×          A number that is the product of ?
             +  A number that is the sum of ?
              . The output




1

CJam (13 바이트)

{e`{(*2b}%1b}

온라인 테스트 스위트 . 이것은 익명 블록 (함수)이며 스택에 정수 배열을 가져 와서 스택에 정수를 남깁니다. 마지막 테스트는 빈 배열을 올바르게 처리하여 0을 제공한다는 것을 보여줍니다.

이 방법은 간단한 실행 길이 인코딩과 각 실행 및 기본 변환의 수동 실행 길이 디코드입니다. run-length 디코드에 내장을 사용하면 {e`1/:e~2fb1b}or로 1 바이트를 더 얻습니다 {e`{ae~2b}%1b}.



1

하스켈, 54 53 바이트

k#(a:b:c)=k+last(b:[k*2|a==b])#(b:c)
k#_=k
(#)=<<head

온라인으로 사용해보십시오!

누산기를 두 배로 늘리 k거나 1/로 재설정하고 -1각 단계의 값을 추가 하는 간단한 재귀입니다 .


0

Mathematica, 60 바이트

Tr[Last@*Accumulate/@(#[[1]]2^(Range@Tr[1^#]-1)&/@Split@#)]&


0

자바, 91 바이트

int f(int[]a){int s=0,r=0,i=-1;while(++i<a.length)r+=s=s!=0&s>0==a[i]>0?2*s:a[i];return r;}

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.