diff options
| author | arnesom <arne@bbop.org> | 2021-03-14 17:16:48 +0100 |
|---|---|---|
| committer | arnesom <arne@bbop.org> | 2021-03-14 17:16:48 +0100 |
| commit | 150f7ca7e5de3c1b4e802d49928b6b195960a7db (patch) | |
| tree | 82ae090f64d502498309355f4e4f5616eb4d9b07 /challenge-103 | |
| parent | 4a289a702db8c240e4362ae01c10c203cb19c968 (diff) | |
| download | perlweeklychallenge-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.txt | 1 | ||||
| -rwxr-xr-x | challenge-103/arne-sommer/raku/ch-1.raku | 14 | ||||
| -rwxr-xr-x | challenge-103/arne-sommer/raku/ch-2.raku | 42 | ||||
| -rwxr-xr-x | challenge-103/arne-sommer/raku/chinese-zodiac | 14 | ||||
| -rwxr-xr-x | challenge-103/arne-sommer/raku/chinese-zodiac-c | 23 | ||||
| -rw-r--r-- | challenge-103/arne-sommer/raku/filelist.csv | 7 | ||||
| -rwxr-xr-x | challenge-103/arne-sommer/raku/whats-playing | 42 |
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') }"; |
