diff options
| author | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2021-03-09 23:57:17 +0000 |
|---|---|---|
| committer | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2021-03-09 23:57:17 +0000 |
| commit | a8e8b5bfedbdd62e18667bed24fec3a3ea42fc29 (patch) | |
| tree | 4785520b8696b92d18ad9ed0016dca7e2418c957 /challenge-103 | |
| parent | 9c4c1c069ca23eead71c4b07e162bdf2686d43cc (diff) | |
| download | perlweeklychallenge-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.cpp | 18 | ||||
| -rw-r--r-- | challenge-103/ulrich-rieke/haskell/ch-1.hs | 18 | ||||
| -rw-r--r-- | challenge-103/ulrich-rieke/perl/ch-1.pl | 15 | ||||
| -rw-r--r-- | challenge-103/ulrich-rieke/perl/ch-2.pl | 39 | ||||
| -rw-r--r-- | challenge-103/ulrich-rieke/raku/ch-1.raku | 13 | ||||
| -rw-r--r-- | challenge-103/ulrich-rieke/raku/ch-2.raku | 23 |
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 ] ; +} |
