aboutsummaryrefslogtreecommitdiff
path: root/challenge-103
diff options
context:
space:
mode:
authorMohammad S Anwar <mohammad.anwar@yahoo.com>2021-03-09 23:57:17 +0000
committerMohammad S Anwar <mohammad.anwar@yahoo.com>2021-03-09 23:57:17 +0000
commita8e8b5bfedbdd62e18667bed24fec3a3ea42fc29 (patch)
tree4785520b8696b92d18ad9ed0016dca7e2418c957 /challenge-103
parent9c4c1c069ca23eead71c4b07e162bdf2686d43cc (diff)
downloadperlweeklychallenge-club-a8e8b5bfedbdd62e18667bed24fec3a3ea42fc29.tar.gz
perlweeklychallenge-club-a8e8b5bfedbdd62e18667bed24fec3a3ea42fc29.tar.bz2
perlweeklychallenge-club-a8e8b5bfedbdd62e18667bed24fec3a3ea42fc29.zip
- Added solutions by Ulrich Rieke.
Diffstat (limited to 'challenge-103')
-rw-r--r--challenge-103/ulrich-rieke/cpp/ch-1.cpp18
-rw-r--r--challenge-103/ulrich-rieke/haskell/ch-1.hs18
-rw-r--r--challenge-103/ulrich-rieke/perl/ch-1.pl15
-rw-r--r--challenge-103/ulrich-rieke/perl/ch-2.pl39
-rw-r--r--challenge-103/ulrich-rieke/raku/ch-1.raku13
-rw-r--r--challenge-103/ulrich-rieke/raku/ch-2.raku23
6 files changed, 126 insertions, 0 deletions
diff --git a/challenge-103/ulrich-rieke/cpp/ch-1.cpp b/challenge-103/ulrich-rieke/cpp/ch-1.cpp
new file mode 100644
index 0000000000..28bbd58011
--- /dev/null
+++ b/challenge-103/ulrich-rieke/cpp/ch-1.cpp
@@ -0,0 +1,18 @@
+#include <vector>
+#include <string>
+#include <iostream>
+#include <cstdlib>
+
+int main( int argc, char * argv[] ) {
+ int year = std::atoi( argv[1] ) ;
+ std::vector<std::string> animals {"Rat" , "Ox" , "Tiger" , "Rabbit" , "Dragon" , "Snake",
+ "Horse" , "Goat" , "Monkey" , "Rooster", "Dog" , "Pig" } ;
+ std::vector<std::string> elements {"Wood" , "Fire" , "Earth" , "Metal" , "Water" } ;
+ int elementlen = elements.size( ) ;
+ int animallen = animals.size( ) ;
+ int yeardiff = year - 1924 ;
+ int animalindex = yeardiff % animallen ;
+ int elementindex = ( yeardiff / 2 ) % elementlen ;
+ std::cout << elements[ elementindex ] << " " << animals[ animalindex ] << std::endl ;
+ return 0 ;
+}
diff --git a/challenge-103/ulrich-rieke/haskell/ch-1.hs b/challenge-103/ulrich-rieke/haskell/ch-1.hs
new file mode 100644
index 0000000000..e5bbc726ea
--- /dev/null
+++ b/challenge-103/ulrich-rieke/haskell/ch-1.hs
@@ -0,0 +1,18 @@
+module Challenge103
+ where
+import Data.List ( (!!) )
+
+animals :: [String]
+animals = ["Rat" , "Ox" , "Tiger" , "Rabbit" , "Dragon" , "Snake" ,
+ "Horse" , "Goat" , "Monkey" , "Rooster", "Dog" , "Pig"]
+
+elements :: [String]
+elements = ["Wood" , "Fire" , "Earth" , "Metal" , "Water"]
+
+solution :: Int -> String
+solution year = (elements !! element) ++ " " ++ (animals !! animal)
+where
+ element :: Int
+ element = mod ((year - 1924 ) `div` 2) ( length elements )
+ animal :: Int
+ animal = mod ( year - 1924 ) ( length animals )
diff --git a/challenge-103/ulrich-rieke/perl/ch-1.pl b/challenge-103/ulrich-rieke/perl/ch-1.pl
new file mode 100644
index 0000000000..4d7d1b1eb1
--- /dev/null
+++ b/challenge-103/ulrich-rieke/perl/ch-1.pl
@@ -0,0 +1,15 @@
+#!/usr/bin/perl ;
+use strict ;
+use warnings ;
+use feature 'say' ;
+
+my $year = $ARGV[0] ;
+my @animalsuccession = ("Rat" , "Ox" , "Tiger" , "Rabbit" , "Dragon" , "Snake" ,
+ "Horse" , "Goat" , "Monkey" , "Rooster", "Dog" , "Pig" ) ;
+my @elements = ("Wood" , "Fire" , "Earth" , "Metal" , "Water" ) ;
+my $animallen = scalar @animalsuccession ;
+my $elementlen = scalar @elements ;
+my $yeardiff = $year - 1924 ;
+my $animal = $yeardiff % $animallen ;
+my $element = (int( $yeardiff / 2 )) % $elementlen ;
+say "$elements[ $element ] $animalsuccession[ $animal ]" ;
diff --git a/challenge-103/ulrich-rieke/perl/ch-2.pl b/challenge-103/ulrich-rieke/perl/ch-2.pl
new file mode 100644
index 0000000000..8f103f6094
--- /dev/null
+++ b/challenge-103/ulrich-rieke/perl/ch-2.pl
@@ -0,0 +1,39 @@
+#!/usr/bin/perl ;
+use strict ;
+use warnings ;
+use List::Util qw( sum ) ;
+use feature 'say' ;
+
+my $starttime = $ARGV[0] ;
+my $currenttime = $ARGV[1] ;
+my $file = $ARGV[2] ;
+my @playtimes ; #for the lengths of the titles
+my @titles ; #for the titles
+open my $fh , "<" , $file or die "Can't open file $file!\n" ;
+while ( my $line = <$fh> ) {
+ chomp $line ;
+ my ( $playlength , $title ) = split( /,/ , $line ) ;
+ push @playtimes, $playlength ;
+ push @titles, $title ;
+}
+close $fh ;
+my $totalplaytime = sum @playtimes ;
+my $time_passed = ($currenttime - $starttime) * 1000 ;
+my $total_playcycles = int ( $time_passed / $totalplaytime );
+my $time_left = $time_passed - ( $total_playcycles * ($totalplaytime) ) ;
+#convert $time_left to milliseconds ;
+my $i = 0 ;
+my $sumtime = 0 ;
+$sumtime += $playtimes[ $i ] ;
+while ( $sumtime < $time_left ) {
+ $i++ ;
+ $sumtime += $time_left ;
+}
+my $remainder ;
+if ( $i > 0 ) {
+ $remainder = $sumtime - sum @playtimes[0..$i] ;
+}
+else { #$i == 0
+ $remainder = $sumtime ;
+}
+say $titles[ $i ] ;
diff --git a/challenge-103/ulrich-rieke/raku/ch-1.raku b/challenge-103/ulrich-rieke/raku/ch-1.raku
new file mode 100644
index 0000000000..d4d260a93d
--- /dev/null
+++ b/challenge-103/ulrich-rieke/raku/ch-1.raku
@@ -0,0 +1,13 @@
+use v6 ;
+
+sub MAIN( Int $year ) {
+ my @animalsuccession = ("Rat" , "Ox" , "Tiger" , "Rabbit" , "Dragon" , "Snake" ,
+ "Horse" , "Goat" , "monkey" , "Rooster", "Dog" , "Pig" ) ;
+ my @elements = ("Wood" , "Fire" , "Earth" , "Metal" , "Water" ) ;
+ my $animallen = @animalsuccession.elems ;
+ my $elementlen = @elements.elems ;
+ my $yeardiff = $year - 1924 ;
+ my $animal = $yeardiff % $animallen ;
+ my $element = ( $yeardiff div 2 ) % $elementlen ;
+ say "@elements[ $element ] @animalsuccession[ $animal ]" ;
+}
diff --git a/challenge-103/ulrich-rieke/raku/ch-2.raku b/challenge-103/ulrich-rieke/raku/ch-2.raku
new file mode 100644
index 0000000000..b0c31358a1
--- /dev/null
+++ b/challenge-103/ulrich-rieke/raku/ch-2.raku
@@ -0,0 +1,23 @@
+use v6 ;
+
+sub MAIN( Int $from , Int $to, Str $file ) {
+ my @playtimes ;
+ my @titles ;
+ for $file.IO.lines -> $line {
+ my ($playtime, $title ) = $line.split( /','/ ) ;
+ @playtimes.push( $playtime ) ;
+ @titles.push( $title ) ;
+ }
+ my $timediff = ($to - $from) * 1000 ; #in milliseconds
+ my $totalplaytime = [+] @playtimes ;
+ my $playcycles = $timediff div $totalplaytime ;
+ my $remainder = $timediff - $playcycles * $totalplaytime ;
+ my $sumtime = 0 ;
+ my $i = 0 ;
+ $sumtime += @playtimes[ $i ] ;
+ while ( $sumtime < $remainder ) {
+ $i++ ;
+ $sumtime += @playtimes[ $i ] ;
+ }
+ say @titles[ $i ] ;
+}