freeCodeCamp/curriculum/challenges/japanese/10-coding-interview-prep/project-euler/problem-109-darts.md

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
```