Angles (geometric), normalization and conversion: Difference between revisions

m (→‎{{header|Haskell}}: fixed the zero representation)
Line 2,100:
= 339.51308232311027d = 377.2367581367892g = 6035.788130188627m = 5.925621140132833r
</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}}==
Line 2,193 ⟶ 2,301:
1000000 radians 339.5130823 377.2367581 6035.7881302 5.9256211
</pre>
 
 
=={{header|Kotlin}}==
2,442

edits