aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xchallenge-102/feng-chang/raku/ch-1.raku17
-rwxr-xr-xchallenge-102/feng-chang/raku/ch-2.raku15
-rwxr-xr-xchallenge-103/feng-chang/raku/ch-1.raku8
-rwxr-xr-xchallenge-103/feng-chang/raku/ch-2.raku26
-rw-r--r--challenge-103/feng-chang/raku/playlist.csv7
5 files changed, 73 insertions, 0 deletions
diff --git a/challenge-102/feng-chang/raku/ch-1.raku b/challenge-102/feng-chang/raku/ch-1.raku
new file mode 100755
index 0000000000..463aa8f413
--- /dev/null
+++ b/challenge-102/feng-chang/raku/ch-1.raku
@@ -0,0 +1,17 @@
+#!/bin/env raku
+
+sub is-square(UInt:D \N --> Bool:D) {
+ my UInt $n = N.sqrt.UInt;
+ N == $n * $n;
+}
+
+sub MAIN(UInt:D \N) {
+ my UInt $min = ('1' ~ '0' x N-1).UInt;
+ my UInt $max = ('9' x N).UInt;
+ for $min..$max -> $m {
+ my UInt $n = $m.flip.UInt;
+ next if $n > $m;
+
+ put $m if is-square($m + $n) and is-square($m - $n);
+ }
+}
diff --git a/challenge-102/feng-chang/raku/ch-2.raku b/challenge-102/feng-chang/raku/ch-2.raku
new file mode 100755
index 0000000000..394fede9ae
--- /dev/null
+++ b/challenge-102/feng-chang/raku/ch-2.raku
@@ -0,0 +1,15 @@
+#!/bin/env raku
+
+sub MAIN(UInt:D \N) {
+ my Str:D $s = '#';
+ my UInt:D $pos = N;
+
+ while $s.chars < N {
+ $s = $pos ~ $s;
+ $pos = N - $s.chars;
+
+ $s = '#' ~ $s if $s.chars < N;
+ }
+
+ put $s;
+}
diff --git a/challenge-103/feng-chang/raku/ch-1.raku b/challenge-103/feng-chang/raku/ch-1.raku
new file mode 100755
index 0000000000..e9a57ed7bb
--- /dev/null
+++ b/challenge-103/feng-chang/raku/ch-1.raku
@@ -0,0 +1,8 @@
+#!/bin/env raku
+
+my @animals = <Rat Ox Tiger Rabbit Dragon Snake Horse Goat Monkey Rooster Dog Pig>;
+my @elements = <Wood Fire Earth Metal Water>;
+
+sub MAIN(UInt:D \Year) {
+ put @elements[(Year + 4) % 5], ' ', @animals[(Year + 8) % 12];
+}
diff --git a/challenge-103/feng-chang/raku/ch-2.raku b/challenge-103/feng-chang/raku/ch-2.raku
new file mode 100755
index 0000000000..cec82cafc0
--- /dev/null
+++ b/challenge-103/feng-chang/raku/ch-2.raku
@@ -0,0 +1,26 @@
+#!/bin/env raku
+
+sub MAIN(UInt:D \Start, UInt:D \Current, Str:D \CSV where *.IO.e) {
+ my @music;
+ my UInt $cnt;
+ CSV.IO.linesĀ».split(',').map({ @music[$cnt++] = (title => .[1], length => .[0]).Hash; });
+
+ my $cycle = @musicĀ».<length>.sum / 1000;
+ my $pos = (Current - Start) % $cycle;
+
+ $cnt = 0;
+ while $pos > @music[$cnt]<length> {
+ $pos -= @music[$cnt++]<length>;
+ }
+
+ my UInt $hours = ($pos / 3600).UInt;
+ $pos -= $hours * 3600;
+
+ my UInt $minutes = ($pos / 60).UInt;
+ $pos -= $minutes * 60;
+
+ my UInt $seconds = $pos.UInt;
+
+ put @music[$cnt]<title>;
+ put "{ $hours.fmt('%02d') }:{ $minutes.fmt('%02d') }:{ $seconds.fmt('%02d') }";
+}
diff --git a/challenge-103/feng-chang/raku/playlist.csv b/challenge-103/feng-chang/raku/playlist.csv
new file mode 100644
index 0000000000..9428b93004
--- /dev/null
+++ b/challenge-103/feng-chang/raku/playlist.csv
@@ -0,0 +1,7 @@
+1709363,"Les Miserables Episode 1: The Bishop (broadcast date: 1937-07-23)"
+1723781,"Les Miserables Episode 2: Javert (broadcast date: 1937-07-30)"
+1723781,"Les Miserables Episode 3: The Trial (broadcast date: 1937-08-06)"
+1678356,"Les Miserables Episode 4: Cosette (broadcast date: 1937-08-13)"
+1646043,"Les Miserables Episode 5: The Grave (broadcast date: 1937-08-20)"
+1714640,"Les Miserables Episode 6: The Barricade (broadcast date: 1937-08-27)"
+1714640,"Les Miserables Episode 7: Conclusion (broadcast date: 1937-09-03)"