diff options
| author | rir <rirans@comcast.net> | 2023-01-10 10:44:02 -0500 |
|---|---|---|
| committer | rir <rirans@comcast.net> | 2023-01-10 10:44:02 -0500 |
| commit | 6cb50536c8f43f8a998abcaa44a19339d0c1ab5d (patch) | |
| tree | 4e7e37b4b2e1c3049c1b80d6828deb95612c69e6 | |
| parent | b8a1cd65abd85f6cf9df5b9dc5bc34677763b531 (diff) | |
| download | perlweeklychallenge-club-6cb50536c8f43f8a998abcaa44a19339d0c1ab5d.tar.gz perlweeklychallenge-club-6cb50536c8f43f8a998abcaa44a19339d0c1ab5d.tar.bz2 perlweeklychallenge-club-6cb50536c8f43f8a998abcaa44a19339d0c1ab5d.zip | |
199
| -rwxr-xr-x | challenge-199/0rir/raku/ch-1.raku | 68 | ||||
| -rwxr-xr-x | challenge-199/0rir/raku/ch-2.raku | 94 |
2 files changed, 162 insertions, 0 deletions
diff --git a/challenge-199/0rir/raku/ch-1.raku b/challenge-199/0rir/raku/ch-1.raku new file mode 100755 index 0000000000..867cc81695 --- /dev/null +++ b/challenge-199/0rir/raku/ch-1.raku @@ -0,0 +1,68 @@ +#!/usr/bin/env raku +# :vim ft=raku sw=4 expandtab # 🦋 ∅ ≡ ∩ ≢ ∈ «» +use v6.d; +use lib $?FILE.IO.parent(2).add("lib"); +use Test; + +=begin comment +199-1: Good Pairs Submitted by: Mohammad S Anwar +Given a list of integers, @list, find the total count of Good Pairs. +A pair (i, j) is called good if list[i] == list[j] and i < j. + +Example 1 +Input: @list = (1,2,3,1,1,3) +Output: 4 + +4 good pairs found: (0,3) (0,4) (3,4) (2,5) + +Example 2 +Input: @list = (1,2,3) +Output: 0 + +Example 3 +Input: @list = (1,1,1,1) +Output: 6 + +Good pairs are: (0,1) (0,2) (0,3) (1,2) (1,3) (2,3) +=end comment + +multi sub ct-good-pairs( Empty --> 0 ) {} +multi sub ct-good-pairs( @list --> Int) { + #A pair (i, j) is called good if list[i] == list[j] and i < j. + my $return = 0; + for 0..@list.end -> $i { + for $i^..@list.end -> $j { + ++ $return if @list[$i] == @list[$j]; + } + } + $return; +} + +multi MAIN ( ) { + my @Test = + [6,6,6,6] => 6, + [3,3,3] => 3, + [1,1] => 1, + [0,] => 0, + [0,2,3] => 0, + [1,2,1,2] => 2, + [1,2,3,1,2,3] => 3, + [1,2,9,1,2,9,1,2,9] => 9, + [3,4,5,3,4,5,1,2,12,1,2,12,1,2,12] => 12, + [12,11,10,3,4,5,3,4,5,1,2,9,1,2,9,1,2,9] => 12, + [12,11,10,6,7,8,3,4,5,3,4,5,1,2,9,1,2,9,1,2,9] => 12, + ; + plan 2 * @Test +1; + + is ct-good-pairs(Empty), 0, '0 <- ' ~ (Empty).raku; + for @Test -> $p { + is ct-good-pairs( $p.key), $p.value, "$p.value() <- $p.key().raku()"; + is ct-good-pairs( $p.key.pick(*)), $p.value, + "$p.value() <- $p.key().pick(*).Array.raku() shuffle"; + } + done-testing; + + my @list = [12,11,10,3,4,5,3,4,5,1,2,9,1,2,9,1,2,9]; + say "\nInput: \@list = @list.raku()\nOutput: &ct-good-pairs(@list)"; + exit; +} diff --git a/challenge-199/0rir/raku/ch-2.raku b/challenge-199/0rir/raku/ch-2.raku new file mode 100755 index 0000000000..562400e230 --- /dev/null +++ b/challenge-199/0rir/raku/ch-2.raku @@ -0,0 +1,94 @@ +#!/usr/bin/env raku +# :vim ft=raku sw=4 expandtab # 🦋 ∅ ≡ ∩ ≢ ∈ «» +use v6.d; +use Test; + +=begin comment +199-2: Good Triplets Submitted by: Mohammad S Anwar +Given an array of integers, @array and three integers $x,$y,$z, +find the total of Good Triplets in the given array. + +Array[i], array[j], and array[k] are a Good Triplet if they satisfies +the following conditions: + +a) 0 <= i < j < k <= n (size of given array) +b) abs(array[i] - array[j]) <= x +c) abs(array[j] - array[k]) <= y +d) abs(array[i] - array[k]) <= z + +Example 1 +Input: @array = (3,0,1,1,9,7) and $x = 7, $y = 2, $z = 3 +Output: 4 + +Good Triplets are as below: +(3,0,1) where (i=0, j=1, k=2) +(3,0,1) where (i=0, j=1, k=3) +(3,1,1) where (i=0, j=2, k=3) +(0,1,1) where (i=1, j=2, k=3) +Example 2 +Input: @array = (1,1,2,2,3) and $x = 0, $y = 0, $z = 1 +Output: 0 +=end comment + +sub ct-good-triplets( @array, :$x, :$y, :$z --> Int ) { + my $return = 0; + for 0..@array.end -> $i { + for $i^..@array.end -> $j { + for $j^..@array.end -> $k { + if abs(@array[$i] - @array[$j]) <= $x + and abs(@array[$j] - @array[$k]) <= $y + and abs(@array[$i] - @array[$k]) <= $z { + ++$return; + } } } } + $return; +} + +multi MAIN() { + my @Test = + { array => Empty, x => 7, y => 2, z => 3, exp => 0 }, + { array => [3,0,1,1,9,7], x => 7, y => 2, z => 3, exp => 4 }, + { array => [1,1,2,2,3], x => 0, y => 0, z => 1, exp => 0 }, + + { array => [5,3,3], x => 1, y => 1, z => 2, exp => 0 }, + { array => [4,3,3], x => 1, y => 1, z => 2, exp => 1 }, + { array => [3,3,3], x => 1, y => 1, z => 2, exp => 1 }, + { array => [2,3,3], x => 1, y => 1, z => 2, exp => 1 }, + { array => [1,3,3], x => 1, y => 1, z => 2, exp => 0 }, + { array => [0,3,3], x => 1, y => 1, z => 2, exp => 0 }, + + { array => [3,5,3], x => 1, y => 1, z => 2, exp => 0 }, + { array => [3,4,3], x => 1, y => 1, z => 2, exp => 1 }, + { array => [3,3,3], x => 1, y => 1, z => 2, exp => 1 }, + { array => [3,2,3], x => 1, y => 1, z => 2, exp => 1 }, + { array => [3,1,3], x => 1, y => 1, z => 2, exp => 0 }, + { array => [3,0,3], x => 1, y => 1, z => 2, exp => 0 }, + + { array => [3,3,5], x => 1, y => 1, z => 2, exp => 0 }, + { array => [3,3,4], x => 1, y => 1, z => 2, exp => 1 }, + { array => [3,3,3], x => 1, y => 1, z => 2, exp => 1 }, + { array => [3,3,2], x => 1, y => 1, z => 2, exp => 1 }, + { array => [3,3,1], x => 1, y => 1, z => 2, exp => 0 }, + { array => [3,3,0], x => 1, y => 1, z => 2, exp => 0 }, + + { array => [1,2,3], x => 1, y => 0, z => 3, exp => 0 }, + { array => [1], x => 7, y => 2, z => 3, exp => 0 }, + { array => [1,2], x => 7, y => 2, z => 3, exp => 0 }, + { array => [3,0,1,1,9,7], x => 7, y => 2, z => 3, exp => 4 }, + { array => [1,1,2,2,3], x => 0, y => 0, z => 1, exp => 0 }, + { array => [-3,0,-1,-1,-9,-7], x => -7, y => -2, z => -3, exp => 0 }, + { array => [-3,0,-1,-1,-9,-7], x => 7, y => 2, z => 3, exp => 4 }, + { array => [-1,-1,-2,-2,-3], x => 0, y => 0, z => 1, exp => 0 }, + ; + + plan +@Test; + for @Test -> %t { + is ct-good-triplets( %t<array>, :x(%t<x>), :y(%t<y>), :z(%t<z>) ), + %t<exp>, "%t<exp> <-- %t<x> %t<y> %t<z> %t<array>.raku()"; + } + done-testing; + + my @array = (3,0,1,1,9,7); + my ($x,$y,$z) = 7, 2,3; + say "\nInput: \@array = @array.raku() and \$x = $x, \$y = $y, \$z = $z\n" + ~ "Output: ", ct-good-triplets( @array, :$x, :$y, :$z); +} |
