From 4392d711881b135e4eac7e545f6f514974304a21 Mon Sep 17 00:00:00 2001 From: Mark Anderson Date: Sat, 31 May 2025 03:47:12 +0000 Subject: Challenge 323 Solutions (Raku) --- challenge-323/mark-anderson/raku/ch-1.raku | 12 ++++++++++++ challenge-323/mark-anderson/raku/ch-2.raku | 18 ++++++++++++++++++ 2 files changed, 30 insertions(+) create mode 100644 challenge-323/mark-anderson/raku/ch-1.raku create mode 100644 challenge-323/mark-anderson/raku/ch-2.raku diff --git a/challenge-323/mark-anderson/raku/ch-1.raku b/challenge-323/mark-anderson/raku/ch-1.raku new file mode 100644 index 0000000000..c712cd2f95 --- /dev/null +++ b/challenge-323/mark-anderson/raku/ch-1.raku @@ -0,0 +1,12 @@ +#!/usr/bin/env raku +use Test; + +is increment-decrement(<--x x++ x++>), 1; +is increment-decrement(), 3; +is increment-decrement(), 0; + +sub increment-decrement(@operations) +{ + my %m is Map = @operations.classify({ .contains('+') }); + quietly %m - %m +} diff --git a/challenge-323/mark-anderson/raku/ch-2.raku b/challenge-323/mark-anderson/raku/ch-2.raku new file mode 100644 index 0000000000..1935ad2b5e --- /dev/null +++ b/challenge-323/mark-anderson/raku/ch-2.raku @@ -0,0 +1,18 @@ +#!/usr/bin/env raku +use Test; + +is tax-amount(10, ([3,50], [7,10], [12,25])), 2.65; +is tax-amount(2, ([1,0], [4,25], [5,50])), 0.25; +is tax-amount(0, ([2,50])), 0; + +sub tax-amount($income, @tax) +{ + my @brackets = @tax.flat[0,2...*]; + my @taxes = @tax.flat[1,3...*]; + my $end = @brackets.first(* >= $income, :k); + + @brackets[$end] = $income; + @brackets = flat 0, @brackets[0..$end]; + + ([+] @brackets.rotor(2 => -1).flat.map({ $^b - $^a }) Z* @taxes) / 100 +} -- cgit