From 3469b83f7fa98f887c79973e498d3138da73e11e Mon Sep 17 00:00:00 2001 From: Noud Aldenhoven Date: Sat, 4 Jan 2020 11:03:01 +0100 Subject: Solutions to challenge 041 task 1 and 2 in Raku by Noud --- challenge-041/noud/perl6/ch-1.p6 | 27 +++++++++++++++++++++++++++ challenge-041/noud/perl6/ch-2.p6 | 24 ++++++++++++++++++++++++ 2 files changed, 51 insertions(+) create mode 100644 challenge-041/noud/perl6/ch-1.p6 create mode 100644 challenge-041/noud/perl6/ch-2.p6 diff --git a/challenge-041/noud/perl6/ch-1.p6 b/challenge-041/noud/perl6/ch-1.p6 new file mode 100644 index 0000000000..e5bdb8c5df --- /dev/null +++ b/challenge-041/noud/perl6/ch-1.p6 @@ -0,0 +1,27 @@ +# Write a script to display attractive number between 1 and 50. +# +# A number is an attractive number if the number of its prime factors is +# also prime number. +# +# The number 20 is an attractive number, whose prime factors are 2, 2 and 5. +# The total prime factors is 3 which is also a prime number. + + +# From Challenge 023.#2 +sub decomp(Int $n) { + if ($n > 1) { + my $prime = (2..Inf).grep({ $n %% $_ })[0]; + ($prime, |(decomp(($n / $prime).Int))); + } +} + +sub attractive-number(Int $n) { + is-prime(decomp($n).elems); +} + +say "All attractive numbers between 1 and 50:"; +for 1..50 -> $n { + if (attractive-number($n)) { + say $n; + } +} diff --git a/challenge-041/noud/perl6/ch-2.p6 b/challenge-041/noud/perl6/ch-2.p6 new file mode 100644 index 0000000000..acbd775229 --- /dev/null +++ b/challenge-041/noud/perl6/ch-2.p6 @@ -0,0 +1,24 @@ +# Write a script to display first 20 Leonardo Numbers. Please checkout wiki +# page for more information. +# +# For example: +# L(0) = 1 +# L(1) = 1 +# L(2) = L(0) + L(1) + 1 = 3 +# L(3) = L(1) + L(2) + 1 = 5 +# +# and so on. + +# Define a lazy fibonacci sequence. +constant @fib = 0, 1, * + * ... *; + +# Leonard numbers are related to Fibonacci numbers as +# leonard(n) = 2 * fib(n) + 1 +sub leonard(Int $n) { + 2 * @fib[$n] + 1; +} + +say "Leonard numbers 0 to 20:"; +for 0..20 -> $n { + leonard($n).say; +} -- cgit