# [Purdue-pm] The Weekly Challenge 147

Mark Senn mark at purdue.edu
Sun Jan 16 19:09:38 PST 2022

This week's weekly challenge is at
https://theweeklychallenge.org/blog/perl-weekly-challenge-147/

My Raku solutions are at
https://engineering.purdue.edu/~mark/twc-147-1.pdf
and
https://engineering.purdue.edu/~mark/twc-147-2.pdf

Comments on some maybe interesteding Raku language stuff:

for (2 .. Inf).grep(*.is-prime).grep({! /0/}) -> \$test {

SNIPPETT            WHAT IT DOES
for (2 .. Inf)      let \$_ go from 2 to infinitiy...it doesn't compute
an infinite amount of stuff this is "lazy" and just
computes stuff as it needs it...when \$test is used
the first time a new \$test is computed...having
laziness is a feature I use a lot
.grep(*.is-prime)   only use prime numbers
.grep({! /0/})      the prime numbers must not contain zero
-> \$test            put each of the primes without 0 in \$test
one at a time

It is common for me to use this general setup of .grep(...),
.grep(...), .grep(...) to only pick out the wanted elements so I
don't need to put code inside the loop to pick wanted elements or
eliminate non-wanted elements.

my \$p := 0, 1, 5, -> \$a, \$b { 2*\$b - \$a + 3 } ... Inf;

SNIPPET     WHAT IT DOES
my \$p :=    compute a lazy array \$p[0] = 0
0, 1, 5, -> \$a, \$b { 2*\$b - \$a + 3 }
\$p[0] = 0, \$p[1] = 1, \$p[2] = 5,
\$p[3] for example, is 2*\$p[2] - \$p[1] + 3
... Inf;   and do it lazily to infinity

(1 .. \$n).map({%is-pentagonal{\$p[\$_]} = True});

SNIPPETT            WHAT IT DOES
for (1 .. \$n)      let \$_ go from 1 to \$n
map({%is-pentagonal{\$p[\$_]} = True})   set the %is-petagonal hash
element \$p[\$_} to True

-mark