freeCodeCamp/curriculum/challenges/japanese/10-coding-interview-prep/project-euler/problem-382-generating-poly...

66 lines
1.8 KiB
Markdown

---
id: 5900f4eb1000cf542c50fffd
title: '問題 382: 多角形を生成する'
challengeType: 5
forumTopicId: 302046
dashedName: problem-382-generating-polygons
---
# --description--
多角形とは、閉路を形成するように結合された直線分からなる平面図形です。 多角形は少なくとも 3 本の辺で構成され、それ自体と交差することはありません。
以下の条件をすべて満たす正の数 $S$ の集合が多角形 $P$ を生成するものとします。
- $P$ のいずれの 2 辺も長さが異なる
- $P$ の各辺の長さが $S$ に含まれる
- $S$ にはそれ以外の値が含まれない
以下に例を示します。
集合 {3, 4, 5} は 辺長が 3, 4, 5 の多角形 (三角形) を生成します。
集合 {6, 9, 11, 24} は辺長が 6, 9, 11, 24 の多角形 (四角形) を生成します。
集合 {1, 2, 3} と集合 {2, 3, 4, 9} はいかなる多角形も生成しません。
次のように定義される数列 $s$ を考えます。
- $s_1 = 1$, $s_2 = 2$, $s_3 = 3$
- $n > 3$ のとき、$s_n = s_{n - 1} + s_{n - 3}$
$U_n$ を集合 $\\{s_1, s_2, \ldots, s_n\\}$ と定義します。 例えば、$U_{10} = \\{1, 2, 3, 4, 6, 9, 13, 19, 28, 41\\}$ です。
$U_n$ の部分集合のうち、少なくとも 1 つの多角形を生成する部分集合の数を $f(n)$ とします。
例えば、$f(5) = 7$, $f(10) = 501$, $f(25) = 18\\,635\\,853$ です。
$f({10}^{18})$ の下位 9 桁を求めなさい。
# --hints--
`generatingPolygons()``697003956` を返す必要があります。
```js
assert.strictEqual(generatingPolygons(), 697003956);
```
# --seed--
## --seed-contents--
```js
function generatingPolygons() {
return true;
}
generatingPolygons();
```
# --solutions--
```js
// solution required
```