From 7f84f0b1330ecf5338e117596ed155d6c2a513cd Mon Sep 17 00:00:00 2001 From: Mark <53903062+andemark@users.noreply.github.com> Date: Tue, 9 Nov 2021 21:38:19 +0000 Subject: Challenge 138 Solutions (Raku) --- challenge-138/mark-anderson/raku/ch-1.raku | 41 +++++++++++++++++++++++------- challenge-138/mark-anderson/raku/ch-2.raku | 24 +++++++++++------ 2 files changed, 48 insertions(+), 17 deletions(-) diff --git a/challenge-138/mark-anderson/raku/ch-1.raku b/challenge-138/mark-anderson/raku/ch-1.raku index 192b2e7822..d5928ef653 100644 --- a/challenge-138/mark-anderson/raku/ch-1.raku +++ b/challenge-138/mark-anderson/raku/ch-1.raku @@ -1,17 +1,40 @@ #!/usr/bin/env raku -say workdays(2021); -say workdays(2020); +use Test; +plan 9; + +is workdays(2020), 262; +is workdays(2021), 261; +is workdays(2022), 260; +is workdays(2050), 260; +is workdays(2051), 260; +is workdays(2052), 262; +is workdays(2053), 261; +is workdays(2075), 261; +is workdays(2076), 262; sub workdays($year) { + my %h is Map = False => { + 6 => 260, + 7 => 260, + 1 => 261, + 2 => 261, + 3 => 261, + 4 => 261, + 5 => 261 + }, + True => { + 6 => 260, + 5 => 261, + 7 => 261, + 1 => 262, + 2 => 262, + 3 => 262, + 4 => 262 + } + my $dt = Date.new($year, 1, 1); - my $days = $dt.is-leap-year ?? 366 !! 365; - for 1..$days - { - state $wd++ if $dt.day-of-week ~~ 1..5; - $dt .= later(:1days); - LAST { return $wd } - } + %h{ $dt.is-leap-year }{ $dt.day-of-week } } diff --git a/challenge-138/mark-anderson/raku/ch-2.raku b/challenge-138/mark-anderson/raku/ch-2.raku index 0eced882d6..9b43a7edb6 100644 --- a/challenge-138/mark-anderson/raku/ch-2.raku +++ b/challenge-138/mark-anderson/raku/ch-2.raku @@ -1,8 +1,17 @@ #!/usr/bin/env raku -say split-number(81); -say split-number(9801); -say split-number(36); +use Test; +plan 9; + +isnt split-number(36), 1; +is split-number(81), 1, '9 = 8 + 1'; +is split-number(100), 1, '10 = 10 + 0'; +is split-number(9801), 1, '99 = 98 + 0 + 1'; +is split-number(55225), 1, '235 = 5 + 5 + 225'; +is split-number(136161), 1, '369 = 1 + 361 + 6 + 1'; +is split-number(11329956), 1, '3366 = 11 + 3299 + 56'; +is split-number(57562569), 1, '7587 = 5 + 7562 + 5 + 6 + 9'; +is split-number(100000000), 1, '10000 = 10000 + 0 + 0 + 0 + 0'; sub split-number($n) { @@ -10,15 +19,14 @@ sub split-number($n) { my @a = $n.comb.rotor($_); next if first { .elems > 1 and .head == 0 }, @a; - return 1 if @a>>.join.sum == $n.sqrt; + return 1 if @a.map(*.join).sum == $n.sqrt; } return 0; } -sub terms($u) +sub terms($n) { - map { - ((.fmt: '%0' ~ $u ~ 'b') ~~ m:g/(.)[$0+]?/).map(*.chars) - }, 1..2**($u-1)-1; + map { ((.fmt: '%0' ~ $n ~ 'b') ~~ m:g/ (.) [$0+]? /).map(*.chars) }, + 1..2**($n-1)-1; } -- cgit From 5e5f1cf3f56dc531e64ce47c8889177a26822719 Mon Sep 17 00:00:00 2001 From: Mark <53903062+andemark@users.noreply.github.com> Date: Wed, 10 Nov 2021 02:10:02 +0000 Subject: array instead of hash --- challenge-138/mark-anderson/raku/ch-1.raku | 23 +++-------------------- 1 file changed, 3 insertions(+), 20 deletions(-) diff --git a/challenge-138/mark-anderson/raku/ch-1.raku b/challenge-138/mark-anderson/raku/ch-1.raku index d5928ef653..96f10551a7 100644 --- a/challenge-138/mark-anderson/raku/ch-1.raku +++ b/challenge-138/mark-anderson/raku/ch-1.raku @@ -15,26 +15,9 @@ is workdays(2076), 262; sub workdays($year) { - my %h is Map = False => { - 6 => 260, - 7 => 260, - 1 => 261, - 2 => 261, - 3 => 261, - 4 => 261, - 5 => 261 - }, - True => { - 6 => 260, - 5 => 261, - 7 => 261, - 1 => 262, - 2 => 262, - 3 => 262, - 4 => 262 - } + my @a = [ Nil, 261, 261, 261, 261, 261, 260, 260 ], + [ Nil, 262, 262, 262, 262, 261, 260, 261 ]; my $dt = Date.new($year, 1, 1); - - %h{ $dt.is-leap-year }{ $dt.day-of-week } + @a[ +$dt.is-leap-year ][ $dt.day-of-week ]; } -- cgit From df31708387155952a1e1bed6a6b86d25966cf1bb Mon Sep 17 00:00:00 2001 From: Mark <53903062+andemark@users.noreply.github.com> Date: Wed, 10 Nov 2021 02:16:04 +0000 Subject: array instead of hash --- challenge-138/mark-anderson/raku/ch-1.raku | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/challenge-138/mark-anderson/raku/ch-1.raku b/challenge-138/mark-anderson/raku/ch-1.raku index 96f10551a7..91c1424e51 100644 --- a/challenge-138/mark-anderson/raku/ch-1.raku +++ b/challenge-138/mark-anderson/raku/ch-1.raku @@ -15,9 +15,9 @@ is workdays(2076), 262; sub workdays($year) { - my @a = [ Nil, 261, 261, 261, 261, 261, 260, 260 ], - [ Nil, 262, 262, 262, 262, 261, 260, 261 ]; + my $a := [ Nil, 261, 261, 261, 261, 261, 260, 260 ], + [ Nil, 262, 262, 262, 262, 261, 260, 261 ]; my $dt = Date.new($year, 1, 1); - @a[ +$dt.is-leap-year ][ $dt.day-of-week ]; + $a[ +$dt.is-leap-year ][ $dt.day-of-week ]; } -- cgit