Files
freeCodeCamp/curriculum/challenges/japanese/10-coding-interview-prep/project-euler/problem-165-intersections.md

65 lines
2.6 KiB
Markdown
Raw Permalink Normal View History

---
id: 5900f4111000cf542c50ff24
title: '問題 165: 交点'
challengeType: 5
forumTopicId: 301799
dashedName: problem-165-intersections
---
# --description--
線分は 2 つの端点によって一意に定義されます。 平面上にある 2 本の線分について考えると、共有点がない、共有点が 1 つある、共有点が無数にある、という 3 つの可能性があります。
さらに、2 本の線分が共有点をちょうど 1 つ持つ場合、その共通点が、いずれかまたは両方の線分の端点であり得ます。 2 本の線分の共有点がいずれの線分の端点でもない場合、それは両方の線分の内点です。
点 $T$ が 2 本の線分 $L_1$ と $L_2$ の唯一の共有点であり、かつ、$T$ が両方の線分の内点である場合、$L_1$ と $L_2$ の共有点 $T$ を $L_1$ と $L_2$ の「真の交点」と呼ぶことにします。
3 本の線分 $L_1$, $L_2$, $L_3$ について考えます。
$$\begin{align} & L_1: (27, 44) \\;\text{から}\\; (12, 32) \\\\
& L_2: (46, 53) \\;\text{から}\\; (17, 62) \\\\ & L_3: (46, 70) \\;\text{から}\\; (22, 40) \\\\
\end{align}$$
線分 $L_2$ と $L_3$ が真の交点を持つことを確認できます。 なお、$L_3$ の一方の端点 (22, 40) は $L_1$ 上にありますが、これを真の交点とはみなしません。 $L_1$ と $L_2$ に共有点はありません。 したがって、この 3 本の線分には真の交差点が 1 つあります。
次に、5000 本の線分について同じことをします。 このために、"Blum Blum Shub" と呼ばれる擬似乱数法を使用して 20000 個の数を生成します。
$$\begin{align} & s_0 = 290797 \\\\
& s_{n + 1} = s_n × s_n (\text{mod}\\; 50515093) \\\\ & t_n = s_n (\text{mod}\\; 500) \\\\
\end{align}$$
それぞれの線分を作成するには、4 つの連続数字 $t_n$ を使用します。 つまり、最初の線分は次によって与えられます。
($_t$1, $t_2$) から ($t_3$, $t_4$)
上の生成法によって計算される最初の 4 つの数は 27, 144, 12, 232 です。 したがって、最初の線分は (27, 144) から (12, 232) となります。
これらの 5000 本の線分には、相異なる真の交点がいくつありますか。
# --hints--
`distinctIntersections()``2868868` を返す必要があります 。
```js
assert.strictEqual(distinctIntersections(), 2868868);
```
# --seed--
## --seed-contents--
```js
function distinctIntersections() {
return true;
}
distinctIntersections();
```
# --solutions--
```js
// solution required
```