From b1b52f1c2205682f9bf4477d5232a460d5fe8a58 Mon Sep 17 00:00:00 2001 From: Roger Bell_West Date: Mon, 26 Apr 2021 14:17:55 +0100 Subject: Solutions for challenge #110 --- challenge-110/roger-bell-west/README | 2 +- challenge-110/roger-bell-west/input.ch1.txt | 5 ++++ challenge-110/roger-bell-west/input.ch2.txt | 5 ++++ challenge-110/roger-bell-west/output.ch1.txt | 3 +++ challenge-110/roger-bell-west/output.ch2.txt | 3 +++ challenge-110/roger-bell-west/perl/ch-1.pl | 8 ++++++ challenge-110/roger-bell-west/perl/ch-2.pl | 28 +++++++++++++++++++++ challenge-110/roger-bell-west/python/ch-1.py | 10 ++++++++ challenge-110/roger-bell-west/python/ch-2.py | 16 ++++++++++++ challenge-110/roger-bell-west/raku/ch-1.p6 | 5 ++++ challenge-110/roger-bell-west/raku/ch-2.p6 | 16 ++++++++++++ challenge-110/roger-bell-west/ruby/ch-1.rb | 9 +++++++ challenge-110/roger-bell-west/ruby/ch-2.rb | 19 +++++++++++++++ challenge-110/roger-bell-west/rust/ch-1.rs | 14 +++++++++++ challenge-110/roger-bell-west/rust/ch-2.rs | 23 ++++++++++++++++++ challenge-110/roger-bell-west/shell/ch-1.sh | 3 +++ challenge-110/roger-bell-west/test-harness.pl | 35 +++++++++++++++++++++++++++ 17 files changed, 203 insertions(+), 1 deletion(-) create mode 100644 challenge-110/roger-bell-west/input.ch1.txt create mode 100644 challenge-110/roger-bell-west/input.ch2.txt create mode 100644 challenge-110/roger-bell-west/output.ch1.txt create mode 100644 challenge-110/roger-bell-west/output.ch2.txt create mode 100755 challenge-110/roger-bell-west/perl/ch-1.pl create mode 100755 challenge-110/roger-bell-west/perl/ch-2.pl create mode 100755 challenge-110/roger-bell-west/python/ch-1.py create mode 100755 challenge-110/roger-bell-west/python/ch-2.py create mode 100755 challenge-110/roger-bell-west/raku/ch-1.p6 create mode 100755 challenge-110/roger-bell-west/raku/ch-2.p6 create mode 100755 challenge-110/roger-bell-west/ruby/ch-1.rb create mode 100755 challenge-110/roger-bell-west/ruby/ch-2.rb create mode 100644 challenge-110/roger-bell-west/rust/ch-1.rs create mode 100755 challenge-110/roger-bell-west/rust/ch-2.rs create mode 100755 challenge-110/roger-bell-west/shell/ch-1.sh create mode 100755 challenge-110/roger-bell-west/test-harness.pl diff --git a/challenge-110/roger-bell-west/README b/challenge-110/roger-bell-west/README index 245784dce5..f87212ec1a 100644 --- a/challenge-110/roger-bell-west/README +++ b/challenge-110/roger-bell-west/README @@ -1 +1 @@ -Solutions by Roger Bell West. +Solutions by Roger Bell_West. diff --git a/challenge-110/roger-bell-west/input.ch1.txt b/challenge-110/roger-bell-west/input.ch1.txt new file mode 100644 index 0000000000..48d6254741 --- /dev/null +++ b/challenge-110/roger-bell-west/input.ch1.txt @@ -0,0 +1,5 @@ +0044 1148820341 + +44 1148820341 + 44-11-4882-0341 +(44) 1148820341 + 00 1148820341 diff --git a/challenge-110/roger-bell-west/input.ch2.txt b/challenge-110/roger-bell-west/input.ch2.txt new file mode 100644 index 0000000000..716ebdce75 --- /dev/null +++ b/challenge-110/roger-bell-west/input.ch2.txt @@ -0,0 +1,5 @@ +name,age,sex +Mohammad,45,m +Joe,20,m +Julie,35,f +Cristina,10,f diff --git a/challenge-110/roger-bell-west/output.ch1.txt b/challenge-110/roger-bell-west/output.ch1.txt new file mode 100644 index 0000000000..c681c2e535 --- /dev/null +++ b/challenge-110/roger-bell-west/output.ch1.txt @@ -0,0 +1,3 @@ +0044 1148820341 + +44 1148820341 +(44) 1148820341 diff --git a/challenge-110/roger-bell-west/output.ch2.txt b/challenge-110/roger-bell-west/output.ch2.txt new file mode 100644 index 0000000000..0cb1eb87a1 --- /dev/null +++ b/challenge-110/roger-bell-west/output.ch2.txt @@ -0,0 +1,3 @@ +name,Mohammad,Joe,Julie,Cristina +age,45,20,35,10 +sex,m,m,f,f diff --git a/challenge-110/roger-bell-west/perl/ch-1.pl b/challenge-110/roger-bell-west/perl/ch-1.pl new file mode 100755 index 0000000000..e2aa6e30a5 --- /dev/null +++ b/challenge-110/roger-bell-west/perl/ch-1.pl @@ -0,0 +1,8 @@ +#! /usr/bin/perl + +use strict; +use warnings; + +while (<>) { + print if /^\s*(\+[0-9]{2}|\([0-9]{2}\)|[0-9]{4}) [0-9]{10}\s*$/; +} diff --git a/challenge-110/roger-bell-west/perl/ch-2.pl b/challenge-110/roger-bell-west/perl/ch-2.pl new file mode 100755 index 0000000000..071497ff09 --- /dev/null +++ b/challenge-110/roger-bell-west/perl/ch-2.pl @@ -0,0 +1,28 @@ +#! /usr/bin/perl + +use strict; +use warnings; + +use Text::CSV_XS; + +my $csv = Text::CSV_XS->new({eol => $/}); + +my $fh; +if (defined $ARGV[0] && -e $ARGV[0]) { + open $fh,'<',$ARGV[0]; +} else { + $fh=*STDIN; +} + +my @a; +my $ri=0; +while (my $row=$csv->getline($fh)) { + foreach my $ci (0..$#{$row}) { + $a[$ci][$ri]=$row->[$ci]; + } + $ri++; +} + +close $fh; + +$csv->say(*STDOUT,$_) for @a; diff --git a/challenge-110/roger-bell-west/python/ch-1.py b/challenge-110/roger-bell-west/python/ch-1.py new file mode 100755 index 0000000000..ff7e397315 --- /dev/null +++ b/challenge-110/roger-bell-west/python/ch-1.py @@ -0,0 +1,10 @@ +#! /usr/bin/python3 + +import fileinput +import re + +pn=re.compile("^ *(\+[0-9]{2}|\([0-9]{2}\)|[0-9]{4}) [0-9]{10} *$") +for line in fileinput.input(): + line=line.rstrip() + if re.match(pn,line): + print(line) diff --git a/challenge-110/roger-bell-west/python/ch-2.py b/challenge-110/roger-bell-west/python/ch-2.py new file mode 100755 index 0000000000..5ee699e520 --- /dev/null +++ b/challenge-110/roger-bell-west/python/ch-2.py @@ -0,0 +1,16 @@ +#! /usr/bin/python + +import fileinput + +a=[] + +for line in fileinput.input(): + line=line.rstrip() + r=line.split(',') + for ci in range(len(r)): + while len(a) < ci+1: + a.append([]) + a[ci].append(r[ci]) + +for r in a: + print (','.join(r)) diff --git a/challenge-110/roger-bell-west/raku/ch-1.p6 b/challenge-110/roger-bell-west/raku/ch-1.p6 new file mode 100755 index 0000000000..660a42b1cc --- /dev/null +++ b/challenge-110/roger-bell-west/raku/ch-1.p6 @@ -0,0 +1,5 @@ +#! /usr/bin/perl6 + +for lines() { + say $_ if /^\s*(\+<[0..9]> ** 2|\(<[0..9]> ** 2\)|<[0..9]> ** 4)\s<[0..9]> ** 10\s*$/; +} diff --git a/challenge-110/roger-bell-west/raku/ch-2.p6 b/challenge-110/roger-bell-west/raku/ch-2.p6 new file mode 100755 index 0000000000..609bb0c507 --- /dev/null +++ b/challenge-110/roger-bell-west/raku/ch-2.p6 @@ -0,0 +1,16 @@ +#! /usr/bin/perl6 + +my @a; +my $ri=0; + +for lines() { + my @r=split ',',$_; + for 0..@r.elems-1 -> $ci { + @a[$ci][$ri]=@r[$ci]; + } + $ri++; +} + +for @a -> @r { + say join(',',@r); +} \ No newline at end of file diff --git a/challenge-110/roger-bell-west/ruby/ch-1.rb b/challenge-110/roger-bell-west/ruby/ch-1.rb new file mode 100755 index 0000000000..20b375cfcb --- /dev/null +++ b/challenge-110/roger-bell-west/ruby/ch-1.rb @@ -0,0 +1,9 @@ +#! /usr/bin/ruby + +pn=Regexp.new('^ *(\+[0-9]{2}|\([0-9]{2}\)|[0-9]{4}) [0-9]{10} *$') + +while line=gets + if line =~ pn then + print line + end +end diff --git a/challenge-110/roger-bell-west/ruby/ch-2.rb b/challenge-110/roger-bell-west/ruby/ch-2.rb new file mode 100755 index 0000000000..8daaacc6ff --- /dev/null +++ b/challenge-110/roger-bell-west/ruby/ch-2.rb @@ -0,0 +1,19 @@ +#! /usr/bin/ruby + +a=[] + +while line=gets + line=line.chomp + r=line.split(',') + for ci in 0.upto(r.length-1) + while a.length < ci+1 + a.push([]) + end + a[ci].push(r[ci]) + end +end + +for r in a + print r.join(',') + print "\n" +end diff --git a/challenge-110/roger-bell-west/rust/ch-1.rs b/challenge-110/roger-bell-west/rust/ch-1.rs new file mode 100644 index 0000000000..9718da2298 --- /dev/null +++ b/challenge-110/roger-bell-west/rust/ch-1.rs @@ -0,0 +1,14 @@ +use std::io; +use std::io::prelude::*; +use regex::Regex; + +fn main() { + let vp=Regex::new(r"^ *(\+[0-9]{2}|\([0-9]{2}\)|[0-9]{4}) [0-9]{10} *$").unwrap(); + let stdin = io::stdin(); + for line in stdin.lock().lines() { + let ll=line.unwrap(); + if vp.is_match(&ll) { + println!("{}",ll); + } + } +} diff --git a/challenge-110/roger-bell-west/rust/ch-2.rs b/challenge-110/roger-bell-west/rust/ch-2.rs new file mode 100755 index 0000000000..0510ccc1f2 --- /dev/null +++ b/challenge-110/roger-bell-west/rust/ch-2.rs @@ -0,0 +1,23 @@ +#! /bin/sh +//usr/bin/env rustc $0 -o ${0}x && ./${0}x; rm -f ${0}x ; exit + +use std::io; +use std::io::prelude::*; + +fn main() { + let stdin = io::stdin(); + let mut a: Vec>=vec![]; + for line in stdin.lock().lines() { + let ll=line.unwrap(); + let r: Vec<&str>=ll.split(",").collect(); + for ci in 0..r.len() { + while a.len() < ci+1 { + a.push(vec![]); + } + a[ci].push(r[ci].to_string()); + } + } + for r in a { + println!("{}",r.join(",")); + } +} diff --git a/challenge-110/roger-bell-west/shell/ch-1.sh b/challenge-110/roger-bell-west/shell/ch-1.sh new file mode 100755 index 0000000000..f061457bdc --- /dev/null +++ b/challenge-110/roger-bell-west/shell/ch-1.sh @@ -0,0 +1,3 @@ +#! /bin/bash + +egrep "^ *(\+[0-9]{2}|\([0-9]{2}\)|[0-9]{4}) [0-9]{10} *$" diff --git a/challenge-110/roger-bell-west/test-harness.pl b/challenge-110/roger-bell-west/test-harness.pl new file mode 100755 index 0000000000..d8afeda46c --- /dev/null +++ b/challenge-110/roger-bell-west/test-harness.pl @@ -0,0 +1,35 @@ +#! /usr/bin/perl + +use strict; +use warnings; + +foreach my $program (@ARGV) { + my $n=1; + if ($program =~ /ch-2/) { + $n=2; + } + my $r=system("$program test.ch$n.txt"); + if ($r != 0) { + warn "$program failed\n"; + next; + } + my @l; + foreach my $file ("output.ch$n.txt","test.ch$n.txt") { + push @l,[]; + open I,'<',$file; + while () { + push @{$l[-1]},$_; + } + } + my $ok=1; + foreach my $ln(0..$#{$l[0]}) { + if (!defined $l[1][$ln] || $l[1][$ln] ne $l[0][$ln]) { + warn "$program failed to match at line $ln:\n$l[0][$ln]\n$l[1][$ln]\n"; + $ok=0; + } + } + if ($ok) { + warn "$program OK\n"; + } + unlink("test.ch$n.txt"); +} -- cgit