From 150f7ca7e5de3c1b4e802d49928b6b195960a7db Mon Sep 17 00:00:00 2001 From: arnesom Date: Sun, 14 Mar 2021 17:16:48 +0100 Subject: Arne Sommer --- challenge-103/arne-sommer/blog.txt | 1 + challenge-103/arne-sommer/raku/ch-1.raku | 14 +++++++++ challenge-103/arne-sommer/raku/ch-2.raku | 42 +++++++++++++++++++++++++ challenge-103/arne-sommer/raku/chinese-zodiac | 14 +++++++++ challenge-103/arne-sommer/raku/chinese-zodiac-c | 23 ++++++++++++++ challenge-103/arne-sommer/raku/filelist.csv | 7 +++++ challenge-103/arne-sommer/raku/whats-playing | 42 +++++++++++++++++++++++++ 7 files changed, 143 insertions(+) create mode 100644 challenge-103/arne-sommer/blog.txt create mode 100755 challenge-103/arne-sommer/raku/ch-1.raku create mode 100755 challenge-103/arne-sommer/raku/ch-2.raku create mode 100755 challenge-103/arne-sommer/raku/chinese-zodiac create mode 100755 challenge-103/arne-sommer/raku/chinese-zodiac-c create mode 100644 challenge-103/arne-sommer/raku/filelist.csv create mode 100755 challenge-103/arne-sommer/raku/whats-playing 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 = ; +my @elements = ; + +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 = ; +my @elements = ; + +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 = ; +my @elements = ; + +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') }"; -- cgit