diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2019-09-21 10:29:24 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2019-09-21 10:29:24 +0100 |
| commit | bf968f300ced17cd98e0818751d9a6d8a3dacb4f (patch) | |
| tree | 948601384c1f5a58978ddf6c127bb8b84b59a5dd | |
| parent | 46742d04f0c11a82dd4db224590380788c05b15e (diff) | |
| parent | b0c7e074a39fa483f4a52cceb4170a2f749c630d (diff) | |
| download | perlweeklychallenge-club-bf968f300ced17cd98e0818751d9a6d8a3dacb4f.tar.gz perlweeklychallenge-club-bf968f300ced17cd98e0818751d9a6d8a3dacb4f.tar.bz2 perlweeklychallenge-club-bf968f300ced17cd98e0818751d9a6d8a3dacb4f.zip | |
Merge pull request #646 from noudald/challenge-026-noud
Solutions to challenge 026 problem 1 and 2 in Perl 6 by Noud
| -rw-r--r-- | challenge-026/noud/perl6/ch-1.p6 | 13 | ||||
| -rw-r--r-- | challenge-026/noud/perl6/ch-2.p6 | 45 |
2 files changed, 58 insertions, 0 deletions
diff --git a/challenge-026/noud/perl6/ch-1.p6 b/challenge-026/noud/perl6/ch-1.p6 new file mode 100644 index 0000000000..f31eed9c8a --- /dev/null +++ b/challenge-026/noud/perl6/ch-1.p6 @@ -0,0 +1,13 @@ +# Create a script that accepts two strings, let us call it, “stones” and +# “jewels”. It should print the count of “alphabet” from the string “stones” +# found in the string “jewels”. For example, if your stones is “chancellor” and +# “jewels” is “chocolate”, then the script should print “8”. To keep it simple, +# only A-Z,a-z characters are acceptable. Also make the comparison case +# sensitive. + +# I hope I understood the exercise. +sub count_abc(Str $stones, Str $jewels) { + $jewels.comb.grep({$_ (elem) $stones.comb.Set}).elems; +} + +count_abc('chancellor', 'chocolate').say; diff --git a/challenge-026/noud/perl6/ch-2.p6 b/challenge-026/noud/perl6/ch-2.p6 new file mode 100644 index 0000000000..e1a03f3091 --- /dev/null +++ b/challenge-026/noud/perl6/ch-2.p6 @@ -0,0 +1,45 @@ +# Create a script that prints mean angles of the given list of angles in +# degrees. Please read wiki page that explains the formula in details with an +# example. + +sub mean(@array) { + @array.sum / @array.elems; +} + +# Mean of circular quantities using atan2. +sub mean_angle(@angles) { + atan2(mean(@angles.map(&sin)), mean(@angles.map(&cos))); +} + +# Mean of circular quantities using complex numbers. +sub mean_angle2(@angles) { + my $z = mean(@angles.map({ exp(i * $_) })); + atan($z.im / $z.re); +} + +# Mean of circular quantities using modulo over the circle +sub mean_angle3(@angles) { + mean(@angles.map({ ($_ + pi) % (2 * pi) - pi })); +} + +# Compute means in radians +mean_angle((0.1, 2 * pi + 0.2, -2 * pi + 0.3)).say; +mean_angle2((0.1, 2 * pi + 0.2, -2 * pi + 0.3)).say; +mean_angle3((0.1, 2 * pi + 0.2, -2 * pi + 0.3)).say; + +# Wrap methods to convert degrees to radians +sub deg2rad($degree) { + $degree * pi / 180; +} + +sub rad2deg($rad) { + $rad * 180 / pi; +} + +&mean_angle.wrap: -> @arr { rad2deg(callwith(@arr.map(°2rad))) }; +&mean_angle2.wrap: -> @arr { rad2deg(callwith(@arr.map(°2rad))) }; +&mean_angle3.wrap: -> @arr { rad2deg(callwith(@arr.map(°2rad))) }; + +mean_angle((10, 20 + 360, 30 - 360)).say; +mean_angle2((10, 20 + 360, 30 - 360)).say; +mean_angle3((10, 20 + 360, 30 - 360)).say; |
