diff options
| -rw-r--r-- | challenge-026/simon-proctor/perl6/ch-2.p6 | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/challenge-026/simon-proctor/perl6/ch-2.p6 b/challenge-026/simon-proctor/perl6/ch-2.p6 new file mode 100644 index 0000000000..7cecefa708 --- /dev/null +++ b/challenge-026/simon-proctor/perl6/ch-2.p6 @@ -0,0 +1,33 @@ +#!/usr/bin/env perl6 + +use v6; + +my %*SUB-MAIN-OPTS = :named-anywhere; + +#| Document script +multi sub MAIN( Bool :h(:$help) where ?* ) { say $*USAGE } + +#| Take a list of angles in Radians and return the Mean of them in Radians +multi sub MAIN( + *@rad-angles where *.elems > 1 #= List of at least 2 angles in Radians +) { + say find-mean( @rad-angles ); +} + + +#| Take a list of angles in Degress and return the Mean of them in Degrees +multi sub MAIN ( + Bool :deg(:$degrees) where ?*, #= Degrees flag + *@deg-angles where *.elems > 1 #= List of at least 2 angles in Degrees +) { + my @rad-angles = @deg-angles.map( * * π / 180 ); + + say ( find-mean(@rad-angles) * (180 / π) ).round(0.01); +} + +sub find-mean( @angles is copy ) { + my $sin = (1/@angles.elems) * ( [+] @angles.map( { sin($_) } ) ); + my $cos = (1/@angles.elems) * ( [+] @angles.map( { cos($_) } ) ); + + $sin.atan2( $cos ); +} |
