aboutsummaryrefslogtreecommitdiff
path: root/challenge-103
diff options
context:
space:
mode:
authorarnesom <arne@bbop.org>2021-03-14 17:16:48 +0100
committerarnesom <arne@bbop.org>2021-03-14 17:16:48 +0100
commit150f7ca7e5de3c1b4e802d49928b6b195960a7db (patch)
tree82ae090f64d502498309355f4e4f5616eb4d9b07 /challenge-103
parent4a289a702db8c240e4362ae01c10c203cb19c968 (diff)
downloadperlweeklychallenge-club-150f7ca7e5de3c1b4e802d49928b6b195960a7db.tar.gz
perlweeklychallenge-club-150f7ca7e5de3c1b4e802d49928b6b195960a7db.tar.bz2
perlweeklychallenge-club-150f7ca7e5de3c1b4e802d49928b6b195960a7db.zip
Arne Sommer
Diffstat (limited to 'challenge-103')
-rw-r--r--challenge-103/arne-sommer/blog.txt1
-rwxr-xr-xchallenge-103/arne-sommer/raku/ch-1.raku14
-rwxr-xr-xchallenge-103/arne-sommer/raku/ch-2.raku42
-rwxr-xr-xchallenge-103/arne-sommer/raku/chinese-zodiac14
-rwxr-xr-xchallenge-103/arne-sommer/raku/chinese-zodiac-c23
-rw-r--r--challenge-103/arne-sommer/raku/filelist.csv7
-rwxr-xr-xchallenge-103/arne-sommer/raku/whats-playing42
7 files changed, 143 insertions, 0 deletions
diff --git a/challenge-103/arne-sommer/blog.txt b/challenge-103/arne-sommer/blog.txt
new file mode 100644
index 0000000000..f5acbd33c3
--- /dev/null
+++ b/challenge-103/arne-sommer/blog.txt
@@ -0,0 +1 @@
+https://raku-musings.com/playing-zodiac.html
diff --git a/challenge-103/arne-sommer/raku/ch-1.raku b/challenge-103/arne-sommer/raku/ch-1.raku
new file mode 100755
index 0000000000..e1d87d6bd0
--- /dev/null
+++ b/challenge-103/arne-sommer/raku/ch-1.raku
@@ -0,0 +1,14 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (Int $year);
+
+my @animals = <Rat Ox Tiger Rabbit Dragon Snake Horse Goat Monkey Rooster Dog Pig>;
+my @elements = <Wood Wood Fire Fire Earth Earth Metal Metal Water Water>;
+
+my $animals = @animals.elems;
+my $elements = @elements.elems;
+
+my $base-year = 1924;
+my $year-diff = $year - $base-year;
+
+say "{ @elements[ $year-diff % $elements] } { @animals[ $year-diff % $animals] }";
diff --git a/challenge-103/arne-sommer/raku/ch-2.raku b/challenge-103/arne-sommer/raku/ch-2.raku
new file mode 100755
index 0000000000..2105d4b9a2
--- /dev/null
+++ b/challenge-103/arne-sommer/raku/ch-2.raku
@@ -0,0 +1,42 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (Int $start, Int $current where $current > $start, $file where $file.IO.f && $file.IO.r, :v(:$verbose));
+
+my @duration;
+my @title;
+
+my $start-ms = $start * 1000;
+my $current-ms = $current * 1000;
+
+for $file.IO.lines -> $line
+{
+ my ($time, $title) = $line.split(",", 2);
+
+ @duration.push: $time;
+ @title.push: $title;
+}
+
+my $time-ms = $start-ms;
+my $title = 0;
+
+LOOP: loop
+{
+ for ^@duration.elems -> $index
+ {
+ $title = $index;
+
+ last LOOP if $time-ms + @duration[$index] > $current-ms;
+
+ $time-ms += @duration[$index];
+
+ say ": $time-ms starting @title[$index]" if $verbose;
+ }
+}
+
+say @title[$title];
+
+my $d = ($current-ms - $time-ms) / 1000;
+
+my ($sec, $min, $hour) = $d.polymod(60,60);
+
+say "{ $hour.fmt('%02d') }:{ $min.fmt('%02d') }:{ $sec.fmt('%02d') }";
diff --git a/challenge-103/arne-sommer/raku/chinese-zodiac b/challenge-103/arne-sommer/raku/chinese-zodiac
new file mode 100755
index 0000000000..e1d87d6bd0
--- /dev/null
+++ b/challenge-103/arne-sommer/raku/chinese-zodiac
@@ -0,0 +1,14 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (Int $year);
+
+my @animals = <Rat Ox Tiger Rabbit Dragon Snake Horse Goat Monkey Rooster Dog Pig>;
+my @elements = <Wood Wood Fire Fire Earth Earth Metal Metal Water Water>;
+
+my $animals = @animals.elems;
+my $elements = @elements.elems;
+
+my $base-year = 1924;
+my $year-diff = $year - $base-year;
+
+say "{ @elements[ $year-diff % $elements] } { @animals[ $year-diff % $animals] }";
diff --git a/challenge-103/arne-sommer/raku/chinese-zodiac-c b/challenge-103/arne-sommer/raku/chinese-zodiac-c
new file mode 100755
index 0000000000..fa73fe5b38
--- /dev/null
+++ b/challenge-103/arne-sommer/raku/chinese-zodiac-c
@@ -0,0 +1,23 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (Int $year, :c(:$chinese));
+
+my @animals = <Rat Ox Tiger Rabbit Dragon Snake Horse Goat Monkey Rooster Dog Pig>;
+my @elements = <Yang/Wood Yin/Wood Yang/Fire Yin/Fire Yang/Earth Yin/Earth Yang/Metal Yin/Metal Yang/Water Yin/Water>;
+
+my %chinese = ( Rat => '子', Ox => '丑', Tiger => '寅', Rabbit => '卯',
+ Dragon => '辰', Snake => '巳', Horse => '午', Goat => '未',
+ Monkey => '申', Rooster => '酉', Dog => '戌', Pig => '亥',
+ 'Yang/Wood' => '甲', 'Yin/Wood' => '乙', 'Yang/Fire' => '丙', 'Yin/Fire' => '丁',
+ 'Yang/Earth' => '戊', 'Yin/Earth' => '己', 'Yang/Metal' => '庚', 'Yin/Metal' => '辛',
+ 'Yang/Water' => '壬', 'Yin/Water' => '癸');
+
+my $animals = @animals.elems;
+my $elements = @elements.elems;
+
+my $base-year = 1924;
+my $year-diff = $year - $base-year;
+
+say $chinese
+?? "{ %chinese{ @elements[ $year-diff % $elements] } } { %chinese{ @animals[ $year-diff % $animals] } }"
+!! "{ @elements[ $year-diff % $elements] } { @animals[ $year-diff % $animals] }";
diff --git a/challenge-103/arne-sommer/raku/filelist.csv b/challenge-103/arne-sommer/raku/filelist.csv
new file mode 100644
index 0000000000..0b652b0a37
--- /dev/null
+++ b/challenge-103/arne-sommer/raku/filelist.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)" \ No newline at end of file
diff --git a/challenge-103/arne-sommer/raku/whats-playing b/challenge-103/arne-sommer/raku/whats-playing
new file mode 100755
index 0000000000..2105d4b9a2
--- /dev/null
+++ b/challenge-103/arne-sommer/raku/whats-playing
@@ -0,0 +1,42 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (Int $start, Int $current where $current > $start, $file where $file.IO.f && $file.IO.r, :v(:$verbose));
+
+my @duration;
+my @title;
+
+my $start-ms = $start * 1000;
+my $current-ms = $current * 1000;
+
+for $file.IO.lines -> $line
+{
+ my ($time, $title) = $line.split(",", 2);
+
+ @duration.push: $time;
+ @title.push: $title;
+}
+
+my $time-ms = $start-ms;
+my $title = 0;
+
+LOOP: loop
+{
+ for ^@duration.elems -> $index
+ {
+ $title = $index;
+
+ last LOOP if $time-ms + @duration[$index] > $current-ms;
+
+ $time-ms += @duration[$index];
+
+ say ": $time-ms starting @title[$index]" if $verbose;
+ }
+}
+
+say @title[$title];
+
+my $d = ($current-ms - $time-ms) / 1000;
+
+my ($sec, $min, $hour) = $d.polymod(60,60);
+
+say "{ $hour.fmt('%02d') }:{ $min.fmt('%02d') }:{ $sec.fmt('%02d') }";