N、S、E、Wの文字列が与えられた場合、方位(北から時計回りの角度、度単位)を出力し、小数点以下5桁に修正します。
従来のコンパス表記、文字列は、わずか2(NNWまたはESEのような)これらの文字で構成されています。ここでは、4つすべてを含む文字列(WNNNSEなど)も受け入れる必要があります。2つのシンボルのみを使用すると、人間が意味を直感的に理解できます。4つのシンボルを許可すると読みにくくなりますが、指定された精度で方位を記述するより短い方法が許可されます。
ASはで指摘(コメントによってuser2357112、それはあなたが、私は偽の前提にこの課題に基づきまして、任意のベアリングのために、4記号列は、2記号列とまったく同じ長さになることを証明することができ判明します。この実用的な目的の欠如が、チャレンジの楽しみを損なうことはないことを願っています...)
正確な方法を以下に説明し、従来の表記法と同等です(変更するのではなく、拡張します)。
入力
- 入力は、文字のみを含む単一の文字列
NESW
です。 - 必要に応じて、入力に文字のシーケンスを使用できますが、これには前処理が含まれていません。たとえば、ネストされたリスト
[N, [E, [S, [W]]]]
を使用して処理の順序を支援することは許可されていません。 - 異なるキャラクターを使用することは許可されていません。の
1234
代わりにの文字列を使用することはできませんNESW
。
出力
- 出力は、10進数または1のストリング表現でなければなりません(有理数/分数ではありません)。
- 末尾のゼロを表示する必要はありません。方位がの場合、
9.00000
出力9
は小数点以下5桁まで正しいものとしてカウントされます。 - 出力の範囲は[0、360)です。つまり、0を含むが360は除外されます。
- 出力が小数点以下5桁に丸められることにより、正当性がチェックされます。ベアリングが0.000005の場合、これは0.00001に丸められます。出力0.00001と0.000005は両方とも正しいです。
- 一部の入力については科学表記法での出力が許容されます。たとえば、の
1e-5
代わりに0.00001
。
変換
- 単一文字コンパスポイント
N
、E
、S
、及びW
対応する0°、90°、180°、及び270°夫々 。 - これらのいずれかを文字列の前に付けると、単一文字の方位と元の文字列の方位を二分する方位になります。
- NEが225度ではなく45度を表すように、2つの可能な二等分軸受のうち最も近いものが選択されます。
- これは、二分される角度が180度である場合を除いて明確です。したがって
NS
、SN
、WE
、及びEW
不定ベアリングに対応し、入力は、これらのいずれかで終わることはありません。ただし、これらはあいまいさを引き起こさないため、入力文字列の他の場所に表示される場合があります。 - 最後の2つの文字が同一である場合、2分割が同じ方位を返すため、最後の文字は冗長になります。これは表記に何も追加しないため、コードでこれを処理する必要はありません。したがって
NN
、EE
、SS
、及びWW
不定ベアリングに対応し、入力は、これらのいずれかで終わることはありません。ただし、入力文字列の他の場所に表示される場合があります。
例
N: 0
E: 90
S: 180
SE: halfway between S and E: 135
NSE: halfway between N and SE: 67.5
NNSE: halfway between N and NSE: 33.75
NNNSE: halfway between N and NNSE: 16.875
NNNNSE: halfway between N and NNNSE: 8.4375
テストケース
提出は、すべてのテストケースに対して正しい出力を提供する場合にのみ有効です。テストケースは、倍精度で処理できる範囲に限界があることに注意してください。デフォルトで単精度になっている言語では、正しい出力を得るために、おそらくバイトを使用して倍精度を指定する必要があります。
テストケースの出力は、小数点以下5桁に丸められ、任意の精度で表示されます。両方とも有効な出力です。
WNE 337.5 337.5
WEN 337.5 337.5
WEWEWEWEWEWEWEWEWEWEWEN 330.00001 330.000007152557373046875
NESWNESWNESWNESWNESWNESWNESW 90 89.99999932944774627685546875
NNNNNNNNNNNNNNNNNNNNNNNE 0.00001 0.0000107288360595703125
NNNNNNNNNNNNNNNNNNNNNNNW 359.99999 359.9999892711639404296875
SNNNNNNNNNNNNNNNNNNNNNNNE 90.00001 90.00000536441802978515625
SNNNNNNNNNNNNNNNNNNNNNNNW 269.99999 269.99999463558197021484375
得点
これはcode-golfです。スコアは、バイト単位のソースコードの長さであり、最短が勝ちです。
衒学
私は、「North by North West」が有効なコンパスの方向だと考えて間違えました。それは挑戦のアイデアにつながったが、私は、その後から発見されたので、幸せな間違いは、ウィキペディアのページ:
「アルフレッド・ヒッチコック1959映画のタイトル、北北西に進路を取れは、実際に32風のコンパスの方向点ではなく、映画にはノースウエスト航空への言及が含まれています。」
また、このチャレンジに使用される方法は、16ポイントコンパスまでの従来のコンパスポイントとのみ一貫していることがわかります。そのページで説明されている32風のコンパスは微妙に異なっており、この挑戦のためにその存在を都合よく見落としていました。
最後に、「South East」の代わりに「Southeast」を使用する必要があると考える人には、。
WNNNSE
、出力はになります323.4375
。この場合に同じ方法で適用されるウォークスルーについては、例のセクションを参照してください。
f(N,N,N,S,E)
大丈夫ですか?
WNNNSE
<=投稿開始時のこのエントリ例の出力はどうなりますか?私には無効に聞こえますが、それを伝えるのは難しいです。