スコアリング6,5,4(別名船、船長、および乗組員)


8

Arnauldによるこのサイコロの挑戦からインスピレーションを得て略奪

入力

バイナリ3x3サブマトリックスで構成される5x1または1x5(選択)のダイスマトリックスが与えられます。

ゴール

有効なサイコロマトリックスが与えられたら、次のような6,5,4のルールを使用してスコアを付けます。

  • ロールに6,5,4が含まれている場合は、他の2つのサイコロを一緒に追加します。例:4、X、5,6、Y = X + Y
  • それ以外の場合、スコアは0です。例:5、5、5、4、1 = 0

ゲームのWiki記事

サイコロパターン

10000100002100000001または001000100100010001または001010100410100010151010101016101101101または111000111

ルール

  • 行列には有効な面のみが含まれることが保証されていますが、2、3、6の順列が含まれます。また、都合の良い方法で、どちらの向きでも使用できます。選択した方向を回答に記入してください。
  • 計算されたスコアを出力する
  • 標準の抜け穴は禁止されています
  • これはです。

// 2,5,2,4,6: Output should be: 4
[ [ 0,0,1 ],
  [ 0,0,0 ],
  [ 1,0,0 ], 
  [ 1,0,1 ],
  [ 0,1,0 ],
  [ 1,0,1 ], 
  [ 0,0,1 ],
  [ 0,0,0 ],
  [ 1,0,0 ], 
  [ 1,0,1 ],
  [ 0,0,0 ],
  [ 1,0,1 ], 
  [ 1,1,1 ],
  [ 0,0,0 ],
  [ 1,1,1 ] ]

// 1,6,2,4,6: Output should be: 0
[ [ 0,0,0, 1,0,1, 1,0,0, 1,0,1, 1,1,1  ],
  [ 0,1,0, 1,0,1, 0,0,0, 0,0,0, 0,0,0  ],
  [ 0,0,0, 1,0,1, 0,0,1, 1,0,1, 1,1,1  ] ]

// 5,6,6,4,6: Output should be: 12
[ [ 1,0,1, 1,0,1, 1,1,1, 1,0,1, 1,1,1  ],
  [ 0,1,0, 1,0,1, 0,0,0, 0,0,0, 0,0,0  ],
  [ 1,0,1, 1,0,1, 1,1,1, 1,0,1, 1,1,1  ] ]

// 3,3,4,5,6: Output should be: 6
[ [ 0,0,1, 1,0,0, 1,0,1, 1,0,1, 1,1,1  ],
  [ 0,1,0, 0,1,0, 0,0,0, 0,1,0, 0,0,0  ],
  [ 1,0,0, 0,0,1, 1,0,1, 1,0,1, 1,1,1  ] ]

// 2,5,2,5,6: Output should be: 0
[ [ 0,0,1, 1,0,1, 1,0,0, 1,0,1, 1,1,1  ],
  [ 0,0,0, 0,1,0, 0,0,0, 0,1,0, 0,0,0  ],
  [ 1,0,0, 1,0,1, 0,0,1, 1,0,1, 1,1,1  ] ]

推奨されるテストケース:のように、値5が2回存在する場合[2,5,2,5,6]。私の現在の解決策は、4つのテストケースすべてに対して機能します(値を並べ替えてサブリストを削除する非常に悪い方法を使用することにより[4,5,6]5。もちろん、が2回存在すると失敗します。
Kevin Cruijssen

6
核となるアイデアは良いですが、ドラフトの方法は、課題を書くときに避けなければならない、つまり「不要な綿毛を追加する」というカテゴリの1つに該当するように感じます。サイコロを解析することは課題の主な部分ではないようですが、コードの半分がかかる可能性があります。
ジョナサンアラン

1
@JonathanAllanサイコロのゲームなので、サイコロをあげました。私は彼らに顔を検証させることはふわふわであるのでそれは挑戦の一部ではないことに同意します。ダイス行列は、整数で654をスコアリングするだけでもそれほど難しくないため、興味深いソリューションを可能にします。
Veskah 2018

1
@JonathanAllan今後のために覚えておきますが、今のところ仕様は変更しません。
Veskah

1
@Veskahはい、間違いなく仕様を変更しないでください!ここにもっと多くの楽しい挑戦があります:)
ジョナサン・アラン

回答:


4

05AB1E、15バイト

3ôO<O©3LsK_P®O*

オンラインでお試しください!またはテストスイートをチェックしてください!

Chas BrownとLynnが使用するのと同じトリックを使用します。最後に15を引くのではなく、各3x3サブマトリックスの各整数を減らします。列形式の入力が必要です。

使い方

3ôO<OD3LsK_PsO* – Full program.
3ô              – Split the input in 3x3 matrices representing dice faces.
  O<O           – Sum each, subtract one and sum each again.
                  This works because after the first O there are 3 elements in each
                  list and there are 5 lists in total, so 3 * 5 = 15 = 4 + 5 + 6.
     ©          – Copy this to the register.
      3LsK      – Push [1, 2, 3] and perform set subtraction. In this scenario, we
                  have already subtracted 3 from each list, so [1, 2, 3] represent
                  the actual dice values [4, 5, 6]. If the resulting list is empty,
                   that means that those values do exist in our roll. Therefore:
          _P    – Produce a list of zeros of that length and take the product
                  (4,5,6 isn't in the dice roll if the list is empty 
                  and this method assures that in this case the product is 1, else 0)
            ®O* – Sum what's in the register and multiply by that.

3

ゼリー、14バイト

s3§’§µ3Rœ-⁸ṆaS

オンラインでお試しください!

サイコロの列を受け入れます。

                  With the input (a 15×3 binary matrix):
s3                 Split into threes: now we have 5 dice, each a 3×3 matrix.
  §                Sum-each. Now we have a list of triples.
   ’               Decrement: turn each triple [x,y,z] into [x−1,y−1,z−1].
    §              Sum-each. Now we have a list of dice pip sums minus 3.
     µ            With these sums X:
      3Rœ-⁸        Subtract them from {1, 2, 3} as a multiset.
           Ṇ       Is the result empty? (This means {1, 2, 3} ⊆ X.)
            aS     If so, yield sum(X). Else the result stays 0.

Chas BrownのPythonの回答と同様に、これは各サイコロの値を-3だけオフセットするため、最後の合計から15(4 + 5 + 6)を減算する必要はありません。



3

Perl 6の48の 46バイト

-2バイトのRamilliesに感謝

{(^3+4⊂.flat.rotor(9)>>.sum)*(.flat.sum-15)}

オンラインでお試しください!

行列を垂直方向に取り、整数を返す匿名コードブロック。

説明:

{                                          } # Anonymous code block
                             (.flat.sum-15)  # Get the total sum of the array minus 15
                            * # Multiply by:
 (^3+4                    )    # Whether 4,5,6 is a sub-array of:
       .flat.rotor(9)>>.sum     # The value of each dice

1
私はあなたの代わりに、配列の束のリストの1個のリストを取り、使用する場合は1つのバイトを保存することができると思う.flatの代わりに.[*;*]次のように
Ramillies

3

MATL、12バイト

9es3-I:ymp*s

オンラインでお試しください!

水平方向の入力を3x15マトリックスとして受け取ります。@Chas Brownの早い段階で(後で15ではなく)3を引くというトリックにより、さまざまな方法で複数のバイトが節約されました。

9e      % reshape input to have 9 rows - each dice matrix is linearized into a column
s       % sum each column (to get dice values)
3-      % subtract 3 from each value, let's call this array A
I:      % form range 1 to 3
y       % bring a copy of array A to the top of stack
m       % check if each of 1, 2, 3 are members of A
        %  returns a logical array of 3 boolean values
p       % product of that result - 0 if any were not members, 1 if they all were
*       % multiply the original array A by this result 
s       % sum 

3

Brachylog23 22バイト

+ᵐ-₁ᵐḍ₅+ᵐJo⊇~⟦₁3∧J+|∧0
  • +3バイトですが、4、5、6がない場合はfalseではなく0を出力します(Fatalize)
  • - 2 4バイト(サンダー)

私の最初のBranchylogプログラムの1つ。おそらくもっとゴルフすることができます。4,5,6がない場合はfalseを出力します。idkに0を出力させる方法。

オンラインでお試しください!


1
まだチャレンジを読んでいませんが、プログラムで0instad を出力したい場合は、最後falseに追加する|∧0とうまくいきます。
18

1
延期することで2バイト節約できると思いますḍ₅オンラインでお試しください!
sundar-モニカを復活させる'08年

1
2つの以上のバイトは、〜演算子を使用し、必要避けることにより保存することができますIオンラインそれをお試しください!|∧0ここにも追加したことに注意してください)。
サンダー-モニカを復活させる'08年


2

Pyth、20バイト

*-ssQ15}j456TySsMc5s

(テストケース1のように)入力をサイコロの列として期待します。ここでオンライン試すか、ここですべてのテストケースを一度に確認してください

*-ssQ15}j456TySsMc5sQ   Implicit: Q=eval(input()), T=10
                        Trailing Q inferred
                   sQ   Flatten input into a single array
                 c5     Chop into 5 pieces
               sM       Take the sum of each piece
              S         Sort
             y          Take the power set
       }                Does the above contain...
        j456T           ... [4,5,6]? 1 if so, 0 otherwise <a>
  ssQ                   Deep sum of input (total pips)
 -   15                 Subtract 15 <b>
*                       Multiply <a> and <b>, implicit print

2

05AB1E30 29 22 バイト

3ôOOJ456vyõ.;}Dg<iSOë0

ダイスマトリックスを互いに下に配置します。

オンラインそれを試してみたり、すべてのテストケースを確認してください

説明:

3ô              # Split into sub-lists of 3, so we now have our dices
                #  i.e. [[A],[B],[C],[D],[E],[F],...] → [[[A],[B],[C]],[[D],[E],[F]],...]
  OO            # Sum each row, and then sum the total
                #  i.e. [[0,0,1],[0,0,0],[1,0,0]] → [1,0,1] → 2
    J           # Join everything together to a single string
                #  [5,4,2,5,6] → '54256'
     456v    }  # For each `y` in [4,5,6]:
         yõ.;   #  Replace the first occurrence with an empty string
                #  i.e. '54256' → '52'
D               # Duplicate the result
 g              # Take the length
                #  i.e. '52' → 2
  <i            # If the length is exactly 2 (and thus we've successfully removed [4,5,6]):
    SO          #  Split the string into digits again, and sum them as result
  ë             # Else:
    0           #  The result is 0 instead

2

JavaScript(ES6)、78バイト

サイコロの列として入力を受け取ります。

a=>!(a+0).replace(/.{18}/g,s=>(t+=n=s.split`1`.length,a|=1<<n),t=-20)|a>223&&t

オンラインでお試しください!

どうやって?

実行することによりa + 0、暗黙的にフラット化して入力配列を文字列に変換し、末尾"0"にを追加します。これにより、正確に5x18 = 90文字が得られます。

たとえば、最初のテストケースは次のようになります。

0,0,1,0,0,0,1,0,0,1,0,1,0,1,0,1,0,1,0,0,1,0,0,0,1,0,0,1,0,1,0,0,0,1,0,1,1,1,1,0,0,0,1,1,10
\____dice #1____/ \____dice #2____/ \____dice #3____/ \____dice #4____/ \____dice #5____/

18 文字各ダイス部分文字列sについて、ピップの数n + 1を計算し、ピップtの総数を次のように更新します。

t += n = s.split`1`.length

入力配列aをビットマスクとして再利用して、少なくとも1回発生した各ダイスを追跡します。

a |= 1 << n

ロールが少なくとも一つ含まれている場合は4、1 5と一つ6、ビットマスクAは以下のビットが設定されています。

11100000 (224 in decimal)

これをテストしてみa > 223ます。成功した場合、tを返します。サイコロごとに1つの追加のピップを数え、結果で4 + 5 + 6を数えたくないので、t-(5 +(4 + 5 + 6))= -20に初期化されます。


2

Dyalog APL28 27バイト

{+/⍵×∧/∨/⍉⍵∘.=⍳33+(+/¨,¨)

オンラインでお試しください!

3x3ダイスマトリックスの1x5マトリックスを入力として受け取ります。

+/¨,¨各サイコロのピップ値を合計します。次に、3を減算し∨/⍉⍵∘.=⍳3て、(1、2、3)のそれぞれに少なくとも1つのインスタンスがあるかどうかを確認し、結果と一緒にAND ∧/を実行し、結果(0または1)に調整済みダイス値の合計を乗算します(+/⍵)。


1

Retina 0.8.2、45バイト

¶

M!`.{9}
%M`1
O`
¶

G`4.*5.*6
.
$*
1{15}

1

オンラインでお試しください!垂直ダイスをとります。説明:

¶

M!`.{9}

サイコロを5つの個別の行に再形成します。

%M`1

各行の値を取得します。

O`

それらを順番に並べ替えます。

それらを1つの文字列に結合します。

G`4.*5.*6

必要な3つのサイコロが存在することを確認します。

.
$*

各ダイを単項に変換します。

1{15}

一致する4、5、6を差し引きます。

1

合計して10進数に変換します。




弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.