基準角度を見つける


17

これはかなり単純な質問です。よると、私が見つけたこのランダムなウェブサイト- Webアーカイブ、基準角度は、the acute angle formed by the terminal side of the given angle and the x-axis.あなたがこれらを見つけるためのプログラムを記述する必要があります。

代数2のことは何も覚えていませんが、これはどういう意味ですか?

通常、角度は標準形式で与えられます。これは、角度の片側を配置し、反対側を反時計回りに測定することで測定されます。

標準形

これが入力になります。出力はこれの基準角度になります。これは、基本的に端末側からx軸までの最小距離と考えることができます。ただし、距離ではなく角度です。ここではいくつかの例を示します。

Quad 2 ref クワッド1 ref

クワッド3 ref クワッド4 ref

明確化

  • 入力および提出に関するすべてのデフォルト。
  • 角度は度単位です。
  • 負の角度、非整数の角度、および360度超える角度許可されます。
  • 形式で出力します60 deg
  • これはなので、バイト単位の最短コードが勝ちです!

別の役立つリンク

テストケース

70      ->  70 deg
135     ->  45 deg
210     ->  30 deg
-60     ->  60 deg
91      ->  89 deg
610     ->  70 deg
-1000   ->  80 deg

1
90を入力するとどうなりますか?
リトシアスト

2
@ThomasKwaどちらの方向からも90になります。
マルティセン

1
短い解決策はですがabs(arcsin(sin(input)))+" deg"、どの言語が勝つかわかりません(学位と文字列操作をサポートする必要があります)。
リトシアスト

入力は常に整数ですか?
リスト管理者

6
非整数の角度が許可されているため、テストケースに角度を含める必要があります。
デニス

回答:




5

Python 2、34バイト

lambda x:`90-abs(x%180-90)`+' deg'

"%d deg"括弧が必要なため、文字列フォーマットの使用は長くなります。



4

DC、25

90?90+d*v180%-d*vn[ deg]p

dcはの_代わりに-ve記号として使用し-ます。

テスト出力:

$ for test in 70 135 210 _60 91 610 _1000; do dc -e'90?90+d*v180%-d*vn[ deg]p' <<< $test ; done
70 deg
45 deg
30 deg
60 deg
89 deg
70 deg
80 deg
$


3

Python 2、35

lambda x:`min(x%180,-x%180)`+' deg'

小さい方の角度とその負のモジュロ180。角度を0〜180の範囲に効果的に変換し、端点に近い距離を取ります。-x%180としてグループ化することに注意してください(-x)%180

Python 3の文字列フォーマットと同じ長さ:

lambda x:'%d deg'%min(x%180,-x%180)

3

パイス 25 30バイト

トリガー関数を使用した、痛みを伴う創造的なソリューション。パーマリンク

+.R.t.a.t.t.tQ7Z3 6?%Q1Q0" deg

どんな提案も歓迎します。


1
.tコールを+.R.t.a.tF[Q7Z3)6?%Q1Q0" deg
受け取り

きちんとした。90.5 => 90.0 degただし、浮動小数点入力では動作しないようです。
ウィニー

それは、あなたもpyth.herokuapp.com/…で
Maltysen

面白いキャッチ。入力-60.5 => 60.5 degあり60.5 => 60.0 deg。Pythの問題のようです-pyth / macros.pyを使用した例
Winny

1

JavaScript(ES6)、43バイト

Sp3000の答えに似ていますが、モジュロはJavaScriptの動作のために非常に長くなります

f=x=>90-Math.abs((x%180+180)%180-90)+' deg'

デモ

ブラウザの互換性のために、ES5でコードが書き直されます。

function f(x){return 90-Math.abs((x%180+180)%180-90)+' deg'}

// Snippet stuff
console.log = function(x){document.body.innerHTML += x + '<br>'};
[70,135,210,-60,91,610,-1000].map(function(v){console.log(f(v))});

CoffeeScript、45バイト

f=(x)->90-Math.abs((x%180+180)%180-90)+' deg'

5
それは、PDPハードウェアエンジニアによる設計上の決定であり、数十年経った今でも、%賢明に実装できる言語が非常に少ないという事実に責任があると思います。
ピーターテイラー

最初の180を(t=180)置き換えてから、次の180をtに置き換えると、おそらく数バイト節約できます
-Downgoat

@ vihan1086同じです
rink.attendant.6


1

Matlab、44

無名関数を使用する:

f=@(x)[num2str(min(mod([x -x],180))) ' deg']

例:

>> f=@(x)[num2str(min(mod([x -x],180))) ' deg']
f = 
    @(x)[num2str(min(mod([x,-x],180))),' deg']

>> f(70)
ans =
70 deg

>> f(210)
ans =
30 deg

>> f(-1000)
ans =
80 deg

4
ただし、これは末尾に「deg」を追加しません。(ダウン投票しませんでした。)
ルジャンドル

@Legendreおっと。ありがとう!修正済み
ルイスメンドー



-1

PHP、44バイト

1つのコマンドラインパラメーターを受け取ります。繰り返しますが、PHPにはJavaScriptと同じ問題があります

<?=90-abs(($argv[1]%180+180)%180-90)+' deg';

正規のソリューションを使用するには53バイトが必要です(度とラジアンの変換には多くの文字が必要です)。

<?=rad2deg(abs(asin(sin(deg2rad($argv[1])))))+' deg';

1
PHP .は連結に使用しませんか?
ダウンゴート

@ vihan1086はい、PHPはを使用し.ます。修正されるまでダウン投票
イスマエルミゲル
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.