インクリメントを倍増しながらカウントアップとダウン


14

入力:

各要素は、あなたが数えるだろうかどうかを示す値/文字を保持している非空のリスト/ベクトルアップ またはダウン。とを使用1-1ますが、好きなものを選択できます。あなたが唯一の2つの値を使用することができ、あなたが使用することはできません1,2,3...し、-1,-2,-3...それぞれ上下ために、。

チャレンジ:

幾何級数1、2、4、8、16、32 ...の数字を使用します。あなたがカウントアップまたはダウンを開始するたびに、単位でカウントします1その後、2、その後、4というように。変更や他の方法を数え始めるなら、あなたは引くよ1、そして2、そして4などを。出力は、最終的に取得する番号でなければなりません。

例:

以下の例では、最初の行は入力、2番目の行はカウントアップ/ダウンする数値、3番目の行は累積合計、最後の行は出力です。

例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

いくつかの潜在的なコーナーケースを説明する追加のテストケース。

入力は最初の行にあります。出力は2番目にあります。

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

Japt8 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Ãxxì2て2バイト節約できると思います。
ETHproductions

@ETHproductions Man、あなたは私の投稿をずっと見てきました。再度、感謝します!
ジャスティンマリナー

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 ^ counter-1を実行します
  • 結果と出力を合計する

4

JavaScript(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

  • 入力に対してRun Length Encodingを実行します。長さ2, 2, 3と値の結果-1, 1, -1
  • 2の長さのべき乗-1。 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

ブラキログ、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}

オンラインテストスイート。これは、スタック上のintの配列を受け取り、スタック上にintを残す匿名ブロック(関数)です。最後のテストは、空の配列を正しく処理し、0を与えることを示しています。

このアプローチは、単純なランレングスエンコーディングと、それに続く各ランおよびベース変換の手動のランレングスデコードです。組み込みのランレングスデコードを使用して、{e`1/:e~2fb1b}またはでさらに1バイトを取得します{e`{ae~2b}%1b}




0

Mathematica、60バイト

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


0

Java、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.