找到参考角


17

这是一个相当简单的问题。根据我发现的这个随机网站-Web Archive的参考,the acute angle formed by the terminal side of the given angle and the x-axis.您必须编写一个程序来查找这些内容。

我不记得代数2的任何内容,这是什么意思?

角度通常以标准形式给出,方法是将角度的一侧放置,然后逆时针向另一侧测量,如下所示:

标准格式

这将是您的输入。您的输出将为此的参考角度。您可以认为这是从终端到X轴的最小距离。除了角度,不是距离。这里有些例子:

Quad 2参考 Quad 1参考

Quad 3参考 Quad 4参考

澄清说明

  • 输入和提交的所有默认设置。
  • 角度以度为单位
  • 负角,非整数的角度和角度> 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怎么办?
lirtosiast 2015年

2
@ThomasKwa从任一方向都是90。
Maltysen,2015年

1
一个简短的解决方案是abs(arcsin(sin(input)))+" deg",尽管我不知道哪种语言会获胜(它需要支持度和字符串运算)。
lirtosiast

输入始终是整数吗?
lirtosiast 2015年

6
由于允许使用非整数角度,因此应在测试用例中包括一个。
丹尼斯

Answers:




5

Python 2,34个字节

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

"%d deg"由于需要括号,使用字符串格式的时间会更长。



4

直流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

Mathematica,22 31

ToString@Abs@Mod[#,180,-90]deg&

1
@ LegionMammal978如果我乘以它deg0 deg它将变为0
alephalpha

1
由于您不关心输出类型,因此可以保存2个字节,例如:Row@{Abs@Mod[#,180,-90],deg}&
LegionMammal978

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字节

使用trig函数,带来痛苦的创造性解决方案。固定链接

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

任何建议欢迎。


1
.t接听电话并将其折叠后,降至28点:+.R.t.a.tF[Q7Z3)6?%Q1Q0" deg
Maltysen

整齐。我注意到它似乎不适用于浮点输入:90.5 => 90.0 deg
Winny

那是因为您的原因都不是:pyth.herokuapp.com/…– Maltysen
2015年

有趣的收获。有输入-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硬件工程师做出的设计决定,该决定负责以下事实:几十年后,我们仍然只有很少的语言能够%明智地实现。
彼得·泰勒

(t=180)用t 替换第一个180,然后用t替换后面的180,可能会节省一些字节
Downgoat 2015年

@ vihan1086一样
rink.attendant.15年


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糟糕。谢谢!已更正
Luis Mendo



-1

PHP,44字节

接受一个命令行参数。同样,PHP也遭受与JavaScript相同的问题

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

使用规范解决方案需要53个字节(度和弧度转换需要很多字符):

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

1
PHP不.用于串联吗?
Downgoat

@ vihan1086是的,PHP使用.。拒绝投票,直到它被修复为止
Ismael Miguel
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.