diff options
| author | Scimon Proctor <simon.proctor@gmail.com> | 2021-07-26 16:13:44 +0100 |
|---|---|---|
| committer | Scimon Proctor <simon.proctor@gmail.com> | 2021-07-26 16:13:44 +0100 |
| commit | 0b7728d89268a2e08459260dab7725ea7a7ff727 (patch) | |
| tree | 128a48cba28e2c548ee7dfdc4c4cd5ed41dc1b4e | |
| parent | 4231c2f762b397e1cacd2cb7e3c2799254fcc1a4 (diff) | |
| download | perlweeklychallenge-club-0b7728d89268a2e08459260dab7725ea7a7ff727.tar.gz perlweeklychallenge-club-0b7728d89268a2e08459260dab7725ea7a7ff727.tar.bz2 perlweeklychallenge-club-0b7728d89268a2e08459260dab7725ea7a7ff727.zip | |
Week 123 all done
| -rw-r--r-- | challenge-123/simon-proctor/raku/ch-1.raku | 27 | ||||
| -rw-r--r-- | challenge-123/simon-proctor/raku/ch-2.raku | 34 |
2 files changed, 61 insertions, 0 deletions
diff --git a/challenge-123/simon-proctor/raku/ch-1.raku b/challenge-123/simon-proctor/raku/ch-1.raku new file mode 100644 index 0000000000..e06dbfa654 --- /dev/null +++ b/challenge-123/simon-proctor/raku/ch-1.raku @@ -0,0 +1,27 @@ +#!/usr/bin/env raku + +multi MAIN("Test") is hidden-from-USAGE { + use Test; + ok is-ugly(1); + ok is-ugly(2); + ok is-ugly(3); + ok is-ugly(5); + ok !is-ugly(7); + ok !is-ugly(14); + done-testing; +} + +#| Given an Integer N return the Nth 'Ugly Number' (Indexed from 1), Given two number if prints the range +multi MAIN ( + Int \N where * > 0, + Int \M where 0 < * >= N = N, +) { + (1..*).grep( { is-ugly($_) } )[N-1..M-1].join(", ").say; +} + +my %ugly; +multi is-ugly( Int() $ where * ~~ 1|2|3|5 ) { True } +multi is-ugly( Int() $n where $n %% 5 ) { %ugly{$n} //= is-ugly($n / 5) } +multi is-ugly( Int() $n where $n %% 3 ) { %ugly{$n} //= is-ugly($n / 3) } +multi is-ugly( Int() $n where $n %% 2 ) { %ugly{$n} //= is-ugly($n / 2) } +multi is-ugly( $ ) { False } diff --git a/challenge-123/simon-proctor/raku/ch-2.raku b/challenge-123/simon-proctor/raku/ch-2.raku new file mode 100644 index 0000000000..bff4cbcc4e --- /dev/null +++ b/challenge-123/simon-proctor/raku/ch-2.raku @@ -0,0 +1,34 @@ +#!/usr/bin/env raku + +multi MAIN( 'Test' ) { + use Test; + ok is-square( 10, 20, 20, 20, 20, 10, 10, 10 ); + ok !is-square( 12, 24, 16,10, 20, 12, 18, 16 ); + ok is-square( 0, 10, 10, 0, 0, -10, -10, 0 ); + is sq-dist-between( 0,0, 3, 4 ), 25; + done-testing; +} + +#| Given a list of 8 numbers (making up 4 points) of a quadrilateral return 1 or 0 depending on if it's a square +multi MAIN( Num() $x1, Num() $y1, + Num() $x2, Num() $y2, + Num() $x3, Num() $y3, + Num()$x4, Num() $y4 ) { + say +is-square( $x1, $y1, $x2, $y2, $x3, $y3, $x4, $y4 ); +} + +multi sq-dist-between( $x1, $y1, $x2, $y2 ) { + ( $x1-$x2 )² + ( $y1-$y2 )²; +} + +multi is-square( $x1, $y1, $x2, $y2, $x3, $y3, $x4, $y4 ) { + my ( $d1, $d2, $d3, $d4, $d5, $d6 ) = ( + sq-dist-between( $x1,$y1, $x2, $y2), + sq-dist-between( $x1,$y1, $x3, $y3), + sq-dist-between( $x1,$y1, $x4, $y4), + sq-dist-between( $x2,$y2, $x3, $y3), + sq-dist-between( $x2,$y2, $x4, $y4), + sq-dist-between( $x3,$y3, $x4, $y4), + ).sort; + return $d1 ~~ $d2 ~~ $d3 ~~ $d4 && $d5 ~~ $d6; +} |
