58 lines
3.2 KiB
Markdown
58 lines
3.2 KiB
Markdown
---
|
|
id: 5900f3db1000cf542c50feec
|
|
title: '問題 109: ダーツ'
|
|
challengeType: 5
|
|
forumTopicId: 301733
|
|
dashedName: problem-109-darts
|
|
---
|
|
|
|
# --description--
|
|
|
|
ダーツゲームのターゲットボードは 20 等分され、それぞれのエリアに 1 から 20 までの番号が割り振られています。プレイヤーはそれに向けてダーツを 3 本投げます。
|
|
|
|
<img class="img-responsive center-block" alt="ダーツボード" src="https://cdn.freecodecamp.org/curriculum/project-euler/darts.png" style="background-color: white; padding: 10px;" />
|
|
|
|
ダーツのスコアは、ダーツが刺さったエリアの番号によって決まります。 外側にある赤と緑の輪よりも外に刺さったダーツは 0 点です。 この輪の内側にある黒と白の領域は、シングルスコアを表しています。 ただし、赤と緑の輪のうち、外側の輪はダブルスコア、中間の輪はトリプルスコアを表しています。
|
|
|
|
ボードの中央には、「ブル」または「ブルズアイ」と呼ばれる同心円が 2 つあります。 外側のブルは 25 点、内側のブルはその倍の 50 点です。
|
|
|
|
ルールには数多くのバリエーションがありますが、最も一般的なゲームでは 301 点 または 501 点から始め、現在の得点を最も早く 0 点にまで減らしたプレイヤーが勝ちます。 ただし、通常は「ダブルアウト」方式でプレイをします。この方式では、最後のダーツをダブル (ボード中央にあるダブルブルズアイを含む) に刺さなければ勝利できません。それ以外のダーツで現在の得点を 1 点以下に減らしてしまうと、その 3 本組のダーツのスコアは「バスト (無効)」になります。
|
|
|
|
プレイヤーが現在の得点で終了できることは「チェックアウト」と呼ばれます。チェックアウトでの最高スコアは 170: T20 T20 D25 (トリプルの 20 x 2 とダブルのブル) です。 スコア 6 でチェックアウトする方法は次ように 11 通りあります。
|
|
|
|
$$\begin{array} \text{D3} & & \\\\
|
|
D1 & D2 & \\\\ S2 & D2 & \\\\
|
|
D2 & D1 & \\\\ S4 & D1 & \\\\
|
|
S1 & S1 & D2 \\\\ S1 & T1 & D1 \\\\
|
|
S1 & S3 & D1 \\\\ D1 & D1 & D1 \\\\
|
|
D1 & S2 & D1 \\\\ S2 & S2 & D1 \end{array}$$
|
|
|
|
注意点として、D1 D2 と D2 D1 は異なるダブルで終了したので互いに異なるとみなされます。 ただし、S1 T1 D1 の組み合わせは T1 S1 D1 と同じとみなされます。 また、組み合わせを考える際にミスは含まれません。例えば D3 は、0 D3 および 0 0 D3 と同じです。 チェックアウトの方法は全部でなんと 42336 通りもあります。 プレイヤーが 100 未満のスコアでチェックアウトする方法は何通りありますか。
|
|
|
|
# --hints--
|
|
|
|
`darts()` は `38182` を返す必要があります。
|
|
|
|
```js
|
|
assert.strictEqual(darts(), 38182);
|
|
```
|
|
|
|
# --seed--
|
|
|
|
## --seed-contents--
|
|
|
|
```js
|
|
function darts() {
|
|
|
|
return true;
|
|
}
|
|
|
|
darts();
|
|
```
|
|
|
|
# --solutions--
|
|
|
|
```js
|
|
// solution required
|
|
```
|