4
巻数を計算する
巻数は、観察者が所定の閉じた経路を追従させておく必要があり、正味反時計回りの回転の整数です。時計回りの回転は、巻数に向かってマイナスにカウントされることに注意してください。パスは自己交差できます。 いくつかの例(Wikipediaから恥知らずに取られた)を以下に示します。 あなたの目標は、与えられたパスの曲がりくねった数を計算することです。 入力 観測者は原点に(0,0)いると想定されます。 入力は、任意の入力ソースからの点の有限シーケンス(整数のペアのような)であり、区分的な線形パスを記述します。必要に応じて、これを整数の1Dシーケンスにフラット化し、入力をスウィズルして、すべてのy座標/逆の前にすべてのx座標を取得することもできます。入力を複素数として取得することもできますa+b i。パスは自己交差する場合があり、長さゼロのセグメントを含む場合があります。最初の点はパスの開始点であり、正のx軸上のどこかにあると想定されます。 パスのどの部分も原点と交差しません。パスは常に閉じられます(つまり、最初のポイントと失われたポイントは同じです)。あなたのコードは最後のポイントを暗示しているか、それを含める必要があるかもしれません。 たとえば、好みに応じて、両方の入力が同じ正方形を指定します。 暗黙のエンドポイント 1,0 1,1 -1,1 -1,-1 1,-1 明示的なエンドポイント 1,0 1,1 -1,1 -1,-1 1,-1 1,0 出力 出力はワインディング番号の単一の整数です。これは、任意のソース(戻り値、標準出力、ファイルなど)に対するものです。 例 すべての例には、エンドポイントが明示的に定義されており、x、yのペアとして指定されています。ちなみに、暗黙的に定義されたエンドポイントを想定し、出力が同じであることを前提として、これらの例をコードに直接入力することもできます。 1.基本テスト 1,0 1,1 -1,1 -1,-1 1,-1 1,0 出力 1 2.反復ポイントテスト 1,0 1,0 1,1 1,1 -1,1 -1,1 -1,-1 -1,-1 1,-1 1,-1 1,0 出力 1 3.時計回りテスト …