Angles (geometric), normalization and conversion: Difference between revisions
Content added Content deleted
m (→{{header|Haskell}}: fixed the zero representation) |
|||
Line 2,100: | Line 2,100: | ||
= 339.51308232311027d = 377.2367581367892g = 6035.788130188627m = 5.925621140132833r |
= 339.51308232311027d = 377.2367581367892g = 6035.788130188627m = 5.925621140132833r |
||
</pre> |
</pre> |
||
=={{header|jq}}== |
|||
'''Adapted from [[#Wren]]''' |
|||
{{works with|jq}} |
|||
'''Works with gojq, the Go implementation of jq''' |
|||
'''Preliminaries''' |
|||
<lang jq>### Formatting |
|||
# Right-justify but do not truncate |
|||
def rjustify(n): |
|||
tostring | length as $length | if n <= $length then . else " " * (n-$length) + . end; |
|||
# Attempt to align decimals so integer part is in a field of width n |
|||
def align($n): |
|||
tostring |
|||
| index(".") as $ix |
|||
| if $ix |
|||
then if $n < $ix then . |
|||
elif $ix then (.[0:$ix]|rjustify($n)) +.[$ix:] |
|||
else rjustify($n) |
|||
end |
|||
else . + ".0" | align($n) |
|||
end ; |
|||
# number of decimal places ($n>=0) |
|||
def fround($n): |
|||
pow(10;$n) as $p |
|||
| (. * $p | round ) / $p |
|||
| tostring |
|||
| index(".") as $ix |
|||
| ("0" * $n) as $zeros |
|||
| if $ix then . + $zeros | .[0 : $ix + $n + 1] |
|||
else . + "." + $zeros |
|||
end; |
|||
def hide_trailing_zeros: |
|||
tostring |
|||
| (capture("(?<x>[^.]*[.].)(?<y>00*$)") // null) as $capture |
|||
| if $capture |
|||
then $capture | (.x + (.y|gsub("0"; " "))) |
|||
else . |
|||
end; |
|||
def lpad($len): tostring | ($len - length) as $l | (" " * $l)[:$l] + .; |
|||
</lang> |
|||
'''The Task''' |
|||
<lang jq># Normalization as per the task requirements |
|||
def mod($y): |
|||
(if . < 0 then -$y else 0 end) as $adjust |
|||
| $adjust + . - ($y * ((. / $y)|floor)); |
|||
def pi: (1|atan) * 4; |
|||
def d2d: mod(360); |
|||
def g2g: mod(400); |
|||
def m2m: mod(6400); |
|||
def r2r: mod(2*pi); |
|||
def d2g: d2d * 400 / 360; |
|||
def d2m: d2d * 6400 / 360; |
|||
def d2r: d2d * pi / 180; |
|||
def g2d: g2g * 360 / 400; |
|||
def g2m: g2g * 6400 / 400; |
|||
def g2r: g2g * pi / 200; |
|||
def m2d: m2m * 360 / 6400; |
|||
def m2g: m2m * 400 / 6400; |
|||
def m2r: m2m * pi / 3200; |
|||
def r2d: r2r * 180 / pi; |
|||
def r2g: r2r * 200 / pi; |
|||
def r2m: r2r * 3200 / pi; |
|||
def f1(a;b;c;d;e): "\(a|lpad(15)) \(b|lpad(15)) \(c|lpad(15)) \(d|lpad(15)) \(e|lpad(15))"; |
|||
def f2(a;b;c;d;e): |
|||
def al: fround(7) | align(10)| hide_trailing_zeros; |
|||
"\(a|al) \(b|al) \(c|al) \(d|al) \(e|al)"; |
|||
def angles: [-2, -1, 0, 1, 2, 6.2831853, 16, 57.2957795, 359, 399, 6399, 1000000]; |
|||
def task1: |
|||
f1( "degrees"; "normalized degs"; "gradians"; "mils"; "radians"), |
|||
(angles[] |
|||
| f2(.; d2d; d2g; d2m; d2r)) ; |
|||
def task2: |
|||
f1("gradians"; "normalized grds"; "degrees"; "mils"; "radians"), |
|||
(angles[] |
|||
| f2(.; g2g; g2d; g2m; g2r)); |
|||
def task3: |
|||
f1("mils"; "normalized mils"; "degrees"; "gradians"; "radians"), |
|||
(angles[] |
|||
| f2(.; m2m; m2d; m2g; m2r)); |
|||
def task4: |
|||
f1( "radians"; "normalized rads"; "degrees"; "gradians"; "mils"), |
|||
( angles[] |
|||
| f2(.; r2r; r2d; r2g; r2m) ); |
|||
task1, "", |
|||
task2, "", |
|||
task3, "", |
|||
task4</lang> |
|||
{{out}} |
|||
<pre> |
|||
As for [[#Wren]] |
|||
</pre> |
|||
=={{header|Julia}}== |
=={{header|Julia}}== |
||
Line 2,193: | Line 2,301: | ||
1000000 radians 339.5130823 377.2367581 6035.7881302 5.9256211 |
1000000 radians 339.5130823 377.2367581 6035.7881302 5.9256211 |
||
</pre> |
</pre> |
||
=={{header|Kotlin}}== |
=={{header|Kotlin}}== |