From f7356b14dfd9d99bbd154ae71b77338a97025da1 Mon Sep 17 00:00:00 2001 From: Roger Bell_West Date: Mon, 8 Mar 2021 15:52:40 +0000 Subject: Solutions for challenge #103 --- challenge-103/roger-bell-west/perl/ch-1.pl | 24 ++++++++++++++ challenge-103/roger-bell-west/perl/ch-2.pl | 32 +++++++++++++++++++ challenge-103/roger-bell-west/python/ch-1.py | 22 +++++++++++++ challenge-103/roger-bell-west/python/ch-2.py | 31 ++++++++++++++++++ challenge-103/roger-bell-west/raku/ch-1.p6 | 22 +++++++++++++ challenge-103/roger-bell-west/raku/ch-2.p6 | 34 ++++++++++++++++++++ challenge-103/roger-bell-west/ruby/ch-1.rb | 28 +++++++++++++++++ challenge-103/roger-bell-west/ruby/ch-2.rb | 34 ++++++++++++++++++++ challenge-103/roger-bell-west/rust/ch-1.rs | 29 +++++++++++++++++ challenge-103/roger-bell-west/rust/ch-2.rs | 47 ++++++++++++++++++++++++++++ challenge-103/roger-bell-west/t2.csv | 7 +++++ 11 files changed, 310 insertions(+) create mode 100755 challenge-103/roger-bell-west/perl/ch-1.pl create mode 100755 challenge-103/roger-bell-west/perl/ch-2.pl create mode 100755 challenge-103/roger-bell-west/python/ch-1.py create mode 100755 challenge-103/roger-bell-west/python/ch-2.py create mode 100755 challenge-103/roger-bell-west/raku/ch-1.p6 create mode 100755 challenge-103/roger-bell-west/raku/ch-2.p6 create mode 100755 challenge-103/roger-bell-west/ruby/ch-1.rb create mode 100755 challenge-103/roger-bell-west/ruby/ch-2.rb create mode 100755 challenge-103/roger-bell-west/rust/ch-1.rs create mode 100644 challenge-103/roger-bell-west/rust/ch-2.rs create mode 100644 challenge-103/roger-bell-west/t2.csv (limited to 'challenge-103') diff --git a/challenge-103/roger-bell-west/perl/ch-1.pl b/challenge-103/roger-bell-west/perl/ch-1.pl new file mode 100755 index 0000000000..53d6dcaf63 --- /dev/null +++ b/challenge-103/roger-bell-west/perl/ch-1.pl @@ -0,0 +1,24 @@ +#! /usr/bin/perl + +use strict; +use warnings; + +use Test::More tests => 2; + +is(cz(2017),'Fire Rooster','example 1'); +is(cz(1938),'Earth Tiger','example 2'); + +sub cz { + my $yy=shift; + my $y=$yy; + if ($y<0) { + $y++; + } + $y%=60; + while ($y<0) { + $y+=60; + } + return join(' ', + [qw(Metal Water Wood Fire Earth)]->[int($y/2)%5], + [qw(Monkey Rooster Dog Pig Rat),'Water Buffalo',qw(Tiger Cat Dragon Snake Horse Goat)]->[$y%12]); +} diff --git a/challenge-103/roger-bell-west/perl/ch-2.pl b/challenge-103/roger-bell-west/perl/ch-2.pl new file mode 100755 index 0000000000..a99a672b78 --- /dev/null +++ b/challenge-103/roger-bell-west/perl/ch-2.pl @@ -0,0 +1,32 @@ +#! /usr/bin/perl + +use strict; +use warnings; + +use Test::More tests => 1; + +is(wp(1606134123,1614591276,'t2.csv'),'00:10:24 Les Miserables Episode 1: The Bishop (broadcast date: 1937-07-23)','example 1'); + +use Text::CSV_XS qw(csv); +use List::Util qw(sum); + +sub wp { + my $ts=shift; + my $tn=shift; + my $csvfile=shift; + my $td=($tn-$ts)*1000; + my $aoa=csv(in => $csvfile); + my $tp=sum(map {$_->[0]} @{$aoa}); + $td %= $tp; + foreach my $t (@{$aoa}) { + if ($td < $t->[0]) { + $td=int($td/1000); + my $h=int($td/3600); + my $m=int($td/60) % 60; + my $s=$td % 60; + return sprintf('%02d:%02d:%02d %s',$h,$m,$s,$t->[1]); + } else { + $td-=$t->[0]; + } + } +} diff --git a/challenge-103/roger-bell-west/python/ch-1.py b/challenge-103/roger-bell-west/python/ch-1.py new file mode 100755 index 0000000000..92708e26fa --- /dev/null +++ b/challenge-103/roger-bell-west/python/ch-1.py @@ -0,0 +1,22 @@ +#! /usr/bin/python3 + +def cz(yy): + y=int(yy) + if y<0: + y += 1 + y %= 60 + while y<0: + y += 60 + return " ".join([['Metal','Water','Wood','Fire','Earth'][int(y/2)%5],['Monkey','Rooster','Dog','Pig','Rat','Water Buffalo','Tiger','Cat','Dragon','Snake','Horse','Goat'][y%12]]) + +import unittest + +class TestCz(unittest.TestCase): + + def test_ex1(self): + self.assertEqual(cz(2017),'Fire Rooster','example 1') + + def test_ex2(self): + self.assertEqual(cz(1938),'Earth Tiger','example 2') + +unittest.main() diff --git a/challenge-103/roger-bell-west/python/ch-2.py b/challenge-103/roger-bell-west/python/ch-2.py new file mode 100755 index 0000000000..eb804da2eb --- /dev/null +++ b/challenge-103/roger-bell-west/python/ch-2.py @@ -0,0 +1,31 @@ +#! /usr/bin/python3 + +import csv +def wp(ts,tn,csvfile): + td=(tn-ts)*1000; + aoa=list() + with open(csvfile) as csvfile: + cr=csv.reader(csvfile) + for row in cr: + aoa.append(row) + tp=sum(int(t[0]) for t in aoa) + td %= tp + for t in aoa: + t[0]=int(t[0]) + if td < t[0]: + td=int(td/1000) + h=int(td/3600) + m=int(td/60) % 60 + s=td % 60 + return "{:02d}:{:02d}:{:02d} {:s}".format(h,m,s,t[1]) + else: + td -= t[0] + +import unittest + +class TestWp(unittest.TestCase): + + def test_ex1(self): + self.assertEqual(wp(1606134123,1614591276,'t2.csv'),'00:10:24 Les Miserables Episode 1: The Bishop (broadcast date: 1937-07-23)','example 1') + +unittest.main() diff --git a/challenge-103/roger-bell-west/raku/ch-1.p6 b/challenge-103/roger-bell-west/raku/ch-1.p6 new file mode 100755 index 0000000000..f75cbe4054 --- /dev/null +++ b/challenge-103/roger-bell-west/raku/ch-1.p6 @@ -0,0 +1,22 @@ +#! /usr/bin/perl6 + +use Test; + +plan 2; + +is(cz(2017),'Fire Rooster','example 1'); +is(cz(1938),'Earth Tiger','example 2'); + +sub cz($yy) { + my $y=$yy; + if ($y < 0) { + $y++; + } + $y%=60; + while ($y < 0) { + $y+=60; + } + return join(' ', + [qw|Metal Water Wood Fire Earth|].[floor($y/2)%5], + ['Monkey','Rooster','Dog','Pig','Rat','Water Buffalo','Tiger','Cat','Dragon','Snake','Horse','Goat'].[$y%12]); +} diff --git a/challenge-103/roger-bell-west/raku/ch-2.p6 b/challenge-103/roger-bell-west/raku/ch-2.p6 new file mode 100755 index 0000000000..5ed63d1a47 --- /dev/null +++ b/challenge-103/roger-bell-west/raku/ch-2.p6 @@ -0,0 +1,34 @@ +#! /usr/bin/perl6 + +use Test; + +plan 1; + +is(wp(1606134123,1614591276,'t2.csv'),'00:10:24 Les Miserables Episode 1: The Bishop (broadcast date: 1937-07-23)','example 1'); + +sub wp($ts,$tn,$csvfile) { + my $td=($tn-$ts)*1000; + my $fh=open :r,$csvfile; + my @aoa; + for $fh.lines { + .chomp; + my ($len,$title)=$_.comb(/<-[,]>+/,2); + $title ~~ s/^\"//; + $title ~~ s/\"$//; + @aoa.push([$len,$title]); + } + my $tp=sum(map {$_[0]},@aoa); + $td %= $tp; + for @aoa -> @t { + if ($td < @t[0]) { + $td=floor($td/1000); + my $h=floor($td/3600); + my $m=floor($td/60) % 60; + my $s=$td % 60; + return sprintf('%02d:%02d:%02d %s',$h,$m,$s,@t[1]); + } else { + $td-=@t[0]; + } + } +} + diff --git a/challenge-103/roger-bell-west/ruby/ch-1.rb b/challenge-103/roger-bell-west/ruby/ch-1.rb new file mode 100755 index 0000000000..7b335d9cbe --- /dev/null +++ b/challenge-103/roger-bell-west/ruby/ch-1.rb @@ -0,0 +1,28 @@ +#! /usr/bin/ruby + +def cz(yy) + y=yy + if y<0 then + y += 1 + end + y = y % 60 + while y<0 + y += 60 + end + return [['Metal','Water','Wood','Fire','Earth'][(y/2).floor%5], + ['Monkey','Rooster','Dog','Pig','Rat','Water Buffalo','Tiger','Cat','Dragon','Snake','Horse','Goat'][y%12]].join(' ') +end + +require 'test/unit' + +class TestCz < Test::Unit::TestCase + + def test_ex1 + assert_equal('Fire Rooster',cz(2017)) + end + + def test_ex2 + assert_equal('Earth Tiger',cz(1938)) + end + +end diff --git a/challenge-103/roger-bell-west/ruby/ch-2.rb b/challenge-103/roger-bell-west/ruby/ch-2.rb new file mode 100755 index 0000000000..85778e0927 --- /dev/null +++ b/challenge-103/roger-bell-west/ruby/ch-2.rb @@ -0,0 +1,34 @@ +#! /usr/bin/ruby + +require 'csv' + +def wp(ts,tn,csvfile) + td=(tn-ts)*1000 + aoa=Array.new + CSV.foreach(csvfile) do |row| + aoa.push([row[0].to_i,row[1]]) + end + tp=aoa.map{|t| t[0]}.sum + td=td%tp + aoa.each do |t| + if td String { + let mut y: i32=yy; + if y<0 { + y += 1; + } + y %= 60; + while y<0 { + y += 60; + } + let yu: usize=y as usize; + let mut out="".to_string(); + out.push_str(vec!["Metal","Water","Wood","Fire","Earth"][(yu/2)%5]); + out.push_str(" "); + out.push_str(vec!["Monkey","Rooster","Dog","Pig","Rat","Water Buffalo","Tiger","Cat","Dragon","Snake","Horse","Goat"][yu%12]); + return out; +} diff --git a/challenge-103/roger-bell-west/rust/ch-2.rs b/challenge-103/roger-bell-west/rust/ch-2.rs new file mode 100644 index 0000000000..c1b2015c9e --- /dev/null +++ b/challenge-103/roger-bell-west/rust/ch-2.rs @@ -0,0 +1,47 @@ +// Cargo.toml needs: +// [dependencies] +// csv = "1.1" + +use std::fs::File; + +#[test] +fn test_ex1() { + assert_eq!(wp(1606134123,1614591276,"t2.csv"),"00:10:24 Les Miserables Episode 1: The Bishop (broadcast date: 1937-07-23)"); +} + +pub struct Track { + length: i64, + title: String +} + +fn wp (ts: i64,tn: i64,csvfile: &str) -> String { + let mut td: i64=(tn-ts)*1000; + let file=File::open(&csvfile).unwrap(); + let mut rdr = csv::ReaderBuilder::new() + .has_headers(false) + .from_reader(file); + let mut aoa: Vec=vec![]; + for result in rdr.records() { + let record = result.unwrap(); + aoa.push(Track { + length: record.get(0).unwrap().parse::().unwrap(), + title: record.get(1).unwrap().to_string() + }); + } + let tp: i64=aoa.iter() + .map(|t| t.length) + .sum(); + td %= tp; + for t in aoa { + if td < t.length { + td=td/1000; + let h=td/3600; + let m=(td/60) % 60; + let s=td % 60; + return format!("{:02}:{:02}:{:02} {}",h,m,s,t.title); + } else { + td -= t.length; + } + } + return "".to_string(); +} diff --git a/challenge-103/roger-bell-west/t2.csv b/challenge-103/roger-bell-west/t2.csv new file mode 100644 index 0000000000..4d66b079d7 --- /dev/null +++ b/challenge-103/roger-bell-west/t2.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)" -- cgit From 97b6868b492a7e9991c9e489b51b9da4aed2062e Mon Sep 17 00:00:00 2001 From: chirvasitua Date: Mon, 8 Mar 2021 11:06:35 -0500 Subject: 1st commit on 103_haskell --- challenge-103/stuart-little/haskell/ch-1.hs | 21 +++++++++++++++++ challenge-103/stuart-little/haskell/ch-2.hs | 36 +++++++++++++++++++++++++++++ 2 files changed, 57 insertions(+) create mode 100755 challenge-103/stuart-little/haskell/ch-1.hs create mode 100755 challenge-103/stuart-little/haskell/ch-2.hs (limited to 'challenge-103') diff --git a/challenge-103/stuart-little/haskell/ch-1.hs b/challenge-103/stuart-little/haskell/ch-1.hs new file mode 100755 index 0000000000..695d6e2d62 --- /dev/null +++ b/challenge-103/stuart-little/haskell/ch-1.hs @@ -0,0 +1,21 @@ +#!/usr/bin/env runghc + +-- run