diff options
| author | Roger Bell_West <roger@firedrake.org> | 2022-12-05 12:25:37 +0000 |
|---|---|---|
| committer | Roger Bell_West <roger@firedrake.org> | 2022-12-05 12:25:37 +0000 |
| commit | e18e69a8940200d3c7fe15ff6db4250bc129bc69 (patch) | |
| tree | 327970485bae1971561cf90b86914eeb1a70a7c4 /challenge-194 | |
| parent | 8d4ad39acceae6916068d7661648e075877837cc (diff) | |
| download | perlweeklychallenge-club-e18e69a8940200d3c7fe15ff6db4250bc129bc69.tar.gz perlweeklychallenge-club-e18e69a8940200d3c7fe15ff6db4250bc129bc69.tar.bz2 perlweeklychallenge-club-e18e69a8940200d3c7fe15ff6db4250bc129bc69.zip | |
Solutions for challenge #194
Diffstat (limited to 'challenge-194')
18 files changed, 876 insertions, 0 deletions
diff --git a/challenge-194/roger-bell-west/javascript/ch-1.js b/challenge-194/roger-bell-west/javascript/ch-1.js new file mode 100755 index 0000000000..eed8a48113 --- /dev/null +++ b/challenge-194/roger-bell-west/javascript/ch-1.js @@ -0,0 +1,65 @@ +#! /usr/bin/node + +"use strict" + +function digitalclock(hhmm) { + let i = hhmm.indexOf("?"); + if (i == 0) { + if (hhmm.charAt(1) <= "3") { + return 2; + } + return 1; + } else if (i == 1) { + if (hhmm.charAt(0) < "2") { + return 9; + } + return 3; + } else if (i == 3) { + return 5; + } else if (i == 4) { + return 9; + } + return 0; +} + +if (digitalclock("?5:00") == 1) { + process.stdout.write("Pass"); +} else { + process.stdout.write("FAIL"); +} +process.stdout.write(" "); + +if (digitalclock("?3:00") == 2) { + process.stdout.write("Pass"); +} else { + process.stdout.write("FAIL"); +} +process.stdout.write(" "); + +if (digitalclock("1?:00") == 9) { + process.stdout.write("Pass"); +} else { + process.stdout.write("FAIL"); +} +process.stdout.write(" "); + +if (digitalclock("2?:00") == 3) { + process.stdout.write("Pass"); +} else { + process.stdout.write("FAIL"); +} +process.stdout.write(" "); + +if (digitalclock("12:?5") == 5) { + process.stdout.write("Pass"); +} else { + process.stdout.write("FAIL"); +} +process.stdout.write(" "); + +if (digitalclock("12:5?") == 9) { + process.stdout.write("Pass"); +} else { + process.stdout.write("FAIL"); +} +process.stdout.write("\n"); diff --git a/challenge-194/roger-bell-west/javascript/ch-2.js b/challenge-194/roger-bell-west/javascript/ch-2.js new file mode 100755 index 0000000000..29be8475e4 --- /dev/null +++ b/challenge-194/roger-bell-west/javascript/ch-2.js @@ -0,0 +1,41 @@ +#! /usr/bin/node + +"use strict" + +function frequencyequalizer(s) { + let f = new Map(); + for (let c of s.split("")) { + if (f.has(c)) { + f.set(c, f.get(c) + 1); + } else { + f.set(c, 1); + } + } + let v = [...f.values()].sort(); + if (v[0] == v[v.length-2] && + v[0] + 1 == v[v.length-1]) { + return true; + } + return false; +} + +if (frequencyequalizer("abbc")) { + process.stdout.write("Pass"); +} else { + process.stdout.write("FAIL"); +} +process.stdout.write(" "); + +if (frequencyequalizer("xyzyyxz")) { + process.stdout.write("Pass"); +} else { + process.stdout.write("FAIL"); +} +process.stdout.write(" "); + +if (!frequencyequalizer("xzxz")) { + process.stdout.write("Pass"); +} else { + process.stdout.write("FAIL"); +} +process.stdout.write("\n"); diff --git a/challenge-194/roger-bell-west/kotlin/ch-1.kt b/challenge-194/roger-bell-west/kotlin/ch-1.kt new file mode 100644 index 0000000000..937a812fa1 --- /dev/null +++ b/challenge-194/roger-bell-west/kotlin/ch-1.kt @@ -0,0 +1,58 @@ +fun digitalclock(hhmm: String): Int { + val i = hhmm.indexOf("?") + if (i == 0) { + if (hhmm[1] <= '3') { + return 2; + } + return 1; + } else if (i == 1) { + if (hhmm[0] < '2') { + return 9; + } + return 3; + } else if (i == 3) { + return 5; + } else if (i == 4) { + return 9; + } + return 0; +} + +fun main() { + if (digitalclock("?5:00") == 1) { + print("Pass") + } else { + print("FAIL") + } + print(" ") + if (digitalclock("?3:00") == 2) { + print("Pass") + } else { + print("FAIL") + } + print(" ") + if (digitalclock("1?:00") == 9) { + print("Pass") + } else { + print("FAIL") + } + print(" ") + if (digitalclock("2?:00") == 3) { + print("Pass") + } else { + print("FAIL") + } + print(" ") + if (digitalclock("12:?5") == 5) { + print("Pass") + } else { + print("FAIL") + } + print(" ") + if (digitalclock("12:5?") == 9) { + print("Pass") + } else { + print("FAIL") + } + println("") +} diff --git a/challenge-194/roger-bell-west/kotlin/ch-2.kt b/challenge-194/roger-bell-west/kotlin/ch-2.kt new file mode 100644 index 0000000000..83c49d420b --- /dev/null +++ b/challenge-194/roger-bell-west/kotlin/ch-2.kt @@ -0,0 +1,34 @@ +fun frequencyequalizer(s: String): Boolean { + var f = mutableMapOf<Char, Int>() + for (c in s) { + var l = f.getOrDefault(c, 0); + f.set(c, l + 1); + } + val v = f.values.sorted() + if (v[0] == v[v.size - 2] && + v[0] + 1 == v[v.size - 1]) { + return true + } + return false +} + +fun main() { + if (frequencyequalizer("abbc")) { + print("Pass") + } else { + print("FAIL") + } + print(" ") + if (frequencyequalizer("xyzyyxz")) { + print("Pass") + } else { + print("FAIL") + } + print(" ") + if (!frequencyequalizer("xzxz")) { + print("Pass") + } else { + print("FAIL") + } + println("") +} diff --git a/challenge-194/roger-bell-west/lua/ch-1.lua b/challenge-194/roger-bell-west/lua/ch-1.lua new file mode 100755 index 0000000000..00246aa4c5 --- /dev/null +++ b/challenge-194/roger-bell-west/lua/ch-1.lua @@ -0,0 +1,58 @@ +#! /usr/bin/lua + +function digitalclock(hhmm) + local i = string.find(hhmm, "%?") + if i == 1 then + if string.sub(hhmm, 2, 2) <= "3" then + return 2 + end + return 1 + elseif i == 2 then + if string.sub(hhmm, 1, 1) < "2" then + return 9 + end + return 3 + elseif i == 4 then + return 5 + elseif i == 5 then + return 9 + end + return 0 +end + +if digitalclock("?5:00") == 1 then + io.write("Pass") +else + io.write("FAIL") +end +io.write(" ") +if digitalclock("?3:00") == 2 then + io.write("Pass") +else + io.write("FAIL") +end +io.write(" ") +if digitalclock("1?:00") == 9 then + io.write("Pass") +else + io.write("FAIL") +end +io.write(" ") +if digitalclock("2?:00") == 3 then + io.write("Pass") +else + io.write("FAIL") +end +io.write(" ") +if digitalclock("12:?5") == 5 then + io.write("Pass") +else + io.write("FAIL") +end +io.write(" ") +if digitalclock("12:5?") == 9 then + io.write("Pass") +else + io.write("FAIL") +end +print("") diff --git a/challenge-194/roger-bell-west/lua/ch-2.lua b/challenge-194/roger-bell-west/lua/ch-2.lua new file mode 100755 index 0000000000..c300e15325 --- /dev/null +++ b/challenge-194/roger-bell-west/lua/ch-2.lua @@ -0,0 +1,43 @@ +#! /usr/bin/lua + +function frequencyequalizer(s) + local f = {} + for c in string.gmatch(s, ".") do + if f[c] == nil then + f[c] = 1 + else + f[c] = f[c] + 1 + end + end + local sk = {} + for i, v in pairs(f) do + table.insert(sk, v) + end + table.sort(sk) + if sk[1] == sk[#sk-1] and + sk[1] + 1 == sk[#sk] then + return true + end + return false +end + +if frequencyequalizer("abbc") == true then + io.write("Pass") +else + io.write("FAIL") +end +io.write(" ") + +if frequencyequalizer("xyzyyxz") == true then + io.write("Pass") +else + io.write("FAIL") +end +io.write(" ") + +if frequencyequalizer("xzxz") == false then + io.write("Pass") +else + io.write("FAIL") +end +print("") diff --git a/challenge-194/roger-bell-west/perl/ch-1.pl b/challenge-194/roger-bell-west/perl/ch-1.pl new file mode 100755 index 0000000000..d146ee8bfb --- /dev/null +++ b/challenge-194/roger-bell-west/perl/ch-1.pl @@ -0,0 +1,34 @@ +#! /usr/bin/perl + +use strict; +use warnings; +use experimental 'signatures'; + +use Test::More tests => 6; + +is(digitalclock("?5:00"), 1, 'example 1'); +is(digitalclock("?3:00"), 2, 'example 2'); +is(digitalclock("1?:00"), 9, 'example 3'); +is(digitalclock("2?:00"), 3, 'example 4'); +is(digitalclock("12:?5"), 5, 'example 5'); +is(digitalclock("12:5?"), 9, 'example 6'); + +sub digitalclock($hhmm) { + my $i = index($hhmm, '?'); + if ($i == 0) { + if (substr($hhmm, 1, 1) le "3") { + return 2; + } + return 1; + } elsif ($i == 1) { + if (substr($hhmm, 0, 1) lt "2") { + return 9; + } + return 3; + } elsif ($i == 3) { + return 5; + } elsif ($i == 4) { + return 9; + } + return 0; +} diff --git a/challenge-194/roger-bell-west/perl/ch-2.pl b/challenge-194/roger-bell-west/perl/ch-2.pl new file mode 100755 index 0000000000..54bd487266 --- /dev/null +++ b/challenge-194/roger-bell-west/perl/ch-2.pl @@ -0,0 +1,24 @@ +#! /usr/bin/perl + +use strict; +use warnings; +use experimental 'signatures'; + +use Test::More tests => 3; + +is(frequencyequalizer("abbc"), 1, 'example 1'); +is(frequencyequalizer("xyzyyxz"), 1, 'example 2'); +is(frequencyequalizer("xzxz"), 0, 'example 3'); + +sub frequencyequalizer($s) { + my %f; + foreach my $c (split '',$s) { + $f{$c}++; + } + my @v = sort values %f; + if ($v[0] == $v[-2] && + $v[0] + 1 == $v[-1]) { + return 1; + } + return 0; +} diff --git a/challenge-194/roger-bell-west/postscript/ch-1.ps b/challenge-194/roger-bell-west/postscript/ch-1.ps new file mode 100644 index 0000000000..220a077dfc --- /dev/null +++ b/challenge-194/roger-bell-west/postscript/ch-1.ps @@ -0,0 +1,84 @@ +%!PS + +% begin included library code +% see https://github.com/Firedrake/postscript-libraries/ +/test { + /test.count test.count 1 add def + { + /test.pass test.pass 1 add def + } { + ( ) print + test.count (....) cvs print + (-fail) print + } ifelse +} bind def + +/test.start { + print (:) print + /test.pass 0 def + /test.count 0 def +} bind def + +/test.end { + ( ) print + test.count 0 gt { + (Passed ) print + test.pass (...) cvs print + (/) print + test.count (...) cvs print + ( \() print + test.pass 100 mul test.count idiv (...) cvs print + (%\)) print + (\r\n) print + } if +} bind def + + +% end included library code + +/digitalclock { + 2 dict begin + /hhmm exch def + hhmm (?) search { + length /i exch def pop pop + 1 { + i 0 eq { + hhmm 1 get 51 le { + 2 + } { + 1 + } ifelse + exit + } if + i 1 eq { + hhmm 0 get 50 lt { + 9 + } { + 3 + } ifelse + exit + } if + i 3 eq { + 5 + exit + } if + i 4 eq { + 9 + exit + } if + 0 + } repeat + } { + pop 0 + } ifelse + end +} bind def + +(digitalclock) test.start +(?5:00) digitalclock 1 eq test +(?3:00) digitalclock 2 eq test +(1?:00) digitalclock 9 eq test +(2?:00) digitalclock 3 eq test +(12:?5) digitalclock 5 eq test +(12:5?) digitalclock 9 eq test +test.end diff --git a/challenge-194/roger-bell-west/postscript/ch-2.ps b/challenge-194/roger-bell-west/postscript/ch-2.ps new file mode 100644 index 0000000000..a368c8464a --- /dev/null +++ b/challenge-194/roger-bell-west/postscript/ch-2.ps @@ -0,0 +1,141 @@ +%!PS + +% begin included library code +% see https://github.com/Firedrake/postscript-libraries/ +/quicksort.swap { + 2 dict begin + /bi exch def + /ai exch def + arr ai get + arr bi get + arr exch ai exch put + arr exch bi exch put + end +} bind def + +/test { + /test.count test.count 1 add def + { + /test.pass test.pass 1 add def + } { + ( ) print + test.count (....) cvs print + (-fail) print + } ifelse +} bind def + +/quicksort.main { % lo hi -> (null) + 3 dict begin + /hi exch def + /lo exch def + /xit false def + lo 0 lt { + /xit true def + } if + hi 0 lt { + /xit true def + } if + lo hi ge { + /xit true def + } if + xit not { + /p quicksort.partition def + lo p quicksort.main + p 1 add hi quicksort.main + } if + end +} bind def + +/quicksort.partition { + 3 dict begin + /pivot arr hi lo add 2 idiv get def + /i lo 1 sub def + /j hi 1 add def + { + { + /i i 1 add def + arr i get pivot ge { + exit + } if + } loop + { + /j j 1 sub def + arr j get pivot le { + exit + } if + } loop + i j ge { + j + exit + } if + i j quicksort.swap + } loop + end +} bind def + +/quicksort { % [ a c b ] -> [ a b c ] + 1 dict begin + /arr exch def + arr length 0 gt { + 0 arr length 1 sub quicksort.main + } if + arr + end +} bind def + +/test.end { + ( ) print + test.count 0 gt { + (Passed ) print + test.pass (...) cvs print + (/) print + test.count (...) cvs print + ( \() print + test.pass 100 mul test.count idiv (...) cvs print + (%\)) print + (\r\n) print + } if +} bind def + +/test.start { + print (:) print + /test.pass 0 def + /test.count 0 def +} bind def + +/values { % dict -> array of dict values + [ exch + { + exch pop + } forall + ] +} bind def + + +% end included library code + +/frequencyequalizer { + 2 dict begin + /f 0 dict def + { + dup f exch known { + dup f exch get 1 add f 3 1 roll put + } { + f exch 1 put + } ifelse + } forall + /v f values quicksort def + v 0 get v v length 2 sub get eq + v 0 get 1 add v v length 1 sub get eq and { + true + } { + false + } ifelse + end +} bind def + +(frequencyequalizer) test.start +(abbc) frequencyequalizer test +(xyzyyxz) frequencyequalizer test +(xzxz) frequencyequalizer not test +test.end diff --git a/challenge-194/roger-bell-west/python/ch-1.py b/challenge-194/roger-bell-west/python/ch-1.py new file mode 100755 index 0000000000..68f2aaa298 --- /dev/null +++ b/challenge-194/roger-bell-west/python/ch-1.py @@ -0,0 +1,41 @@ +#! /usr/bin/python3 + +import unittest + +def digitalclock(hhmm): + i = hhmm.find("?") + if i == 0: + if hhmm[1] <= "3": + return 2 + return 1 + elif i == 1: + if hhmm[0] < "2": + return 9 + return 3 + elif i == 3: + return 5 + elif i == 4: + return 9 + return 0 + +class TestDigitalclock(unittest.TestCase): + + def test_ex1(self): + self.assertEqual(digitalclock("?5:00"), 1, 'example 1') + + def test_ex2(self): + self.assertEqual(digitalclock("?3:00"), 2, 'example 2') + + def test_ex3(self): + self.assertEqual(digitalclock("1?:00"), 9, 'example 3') + + def test_ex4(self): + self.assertEqual(digitalclock("2?:00"), 3, 'example 4') + + def test_ex5(self): + self.assertEqual(digitalclock("12:?5"), 5, 'example 5') + + def test_ex6(self): + self.assertEqual(digitalclock("12:5?"), 9, 'example 6') + +unittest.main() diff --git a/challenge-194/roger-bell-west/python/ch-2.py b/challenge-194/roger-bell-west/python/ch-2.py new file mode 100755 index 0000000000..568621d839 --- /dev/null +++ b/challenge-194/roger-bell-west/python/ch-2.py @@ -0,0 +1,27 @@ +#! /usr/bin/python3 + +import unittest +from collections import defaultdict + +def frequencyequalizer(s): + f = defaultdict(lambda: 0) + for c in s: + f[c] += 1 + v = list(f.values()) + v.sort() + if v[0] == v[-2] and v[0] + 1 == v[-1]: + return True + return False + +class TestFrequencyEqualizer(unittest.TestCase): + + def test_ex1(self): + self.assertEqual(frequencyequalizer("abbc"), True, 'example 1') + + def test_ex2(self): + self.assertEqual(frequencyequalizer("xyzyyxz"), True, 'example 2') + + def test_ex3(self): + self.assertEqual(frequencyequalizer("xzxz"), False, 'example 3') + +unittest.main() diff --git a/challenge-194/roger-bell-west/raku/ch-1.p6 b/challenge-194/roger-bell-west/raku/ch-1.p6 new file mode 100755 index 0000000000..c5cf540c10 --- /dev/null +++ b/challenge-194/roger-bell-west/raku/ch-1.p6 @@ -0,0 +1,32 @@ +#! /usr/bin/perl6 + +use Test; + +plan 6; + +is(digitalclock("?5:00"), 1, 'example 1'); +is(digitalclock("?3:00"), 2, 'example 2'); +is(digitalclock("1?:00"), 9, 'example 3'); +is(digitalclock("2?:00"), 3, 'example 4'); +is(digitalclock("12:?5"), 5, 'example 5'); +is(digitalclock("12:5?"), 9, 'example 6'); + +sub digitalclock($hhmm) { + my $i = index($hhmm, '?'); + if ($i == 0) { + if (substr($hhmm, 1, 1) le "3") { + return 2; + } + return 1; + } elsif ($i == 1) { + if (substr($hhmm, 0, 1) lt "2") { + return 9; + } + return 3; + } elsif ($i == 3) { + return 5; + } elsif ($i == 4) { + return 9; + } + return 0; +} diff --git a/challenge-194/roger-bell-west/raku/ch-2.p6 b/challenge-194/roger-bell-west/raku/ch-2.p6 new file mode 100755 index 0000000000..2472656757 --- /dev/null +++ b/challenge-194/roger-bell-west/raku/ch-2.p6 @@ -0,0 +1,22 @@ +#! /usr/bin/perl6 + +use Test; + +plan 3; + +is(frequencyequalizer("abbc"), True, 'example 1'); +is(frequencyequalizer("xyzyyxz"), True, 'example 2'); +is(frequencyequalizer("xzxz"), False, 'example 3'); + +sub frequencyequalizer($s) { + my %f; + for $s.comb -> $c { + %f{$c}++; + } + my @v = %f.values.sort; + if (@v[0] == @v[*-2] && + @v[0] + 1 == @v[*-1]) { + return True; + } + return False; +} diff --git a/challenge-194/roger-bell-west/ruby/ch-1.rb b/challenge-194/roger-bell-west/ruby/ch-1.rb new file mode 100755 index 0000000000..682ca2000f --- /dev/null +++ b/challenge-194/roger-bell-west/ruby/ch-1.rb @@ -0,0 +1,51 @@ +#! /usr/bin/ruby + +require 'test/unit' + +def digitalclock(hhmm) + i = hhmm.index("?") + if i == 0 then + if hhmm[1] <= "3" then + return 2 + end + return 1 + elsif i == 1 then + if hhmm[0] < "2" then + return 9 + end + return 3 + elsif i == 3 then + return 5 + elsif i == 4 then + return 9 + end + return 0 +end + +class TestDigitalclock < Test::Unit::TestCase + + def test_ex1 + assert_equal(1, digitalclock("?5:00")) + end + + def test_ex2 + assert_equal(2, digitalclock("?3:00")) + end + + def test_ex3 + assert_equal(9, digitalclock("1?:00")) + end + + def test_ex4 + assert_equal(3, digitalclock("2?:00")) + end + + def test_ex5 + assert_equal(5, digitalclock("12:?5")) + end + + def test_ex6 + assert_equal(9, digitalclock("12:5?")) + end + +end diff --git a/challenge-194/roger-bell-west/ruby/ch-2.rb b/challenge-194/roger-bell-west/ruby/ch-2.rb new file mode 100755 index 0000000000..f9fe41f6df --- /dev/null +++ b/challenge-194/roger-bell-west/ruby/ch-2.rb @@ -0,0 +1,34 @@ +#! /usr/bin/ruby + +require 'test/unit' + +def frequencyequalizer(s) + f = Hash.new + s.chars.each do |c| + if !f.has_key?(c) then + f[c] = 0 + end + f[c] += 1 + end + v = f.values.sort + if v[0] == v[-2] && + v[0] + 1 == v[-1] then + return true + end + return false +end + +class TestFrequencyEqualizer < Test::Unit::TestCase + + def test_ex1 + assert_equal(true, frequencyequalizer("abbc")) + end + + def test_ex2 + assert_equal(true, frequencyequalizer("xyzyyxz")) + end + + def test_ex3 + assert_equal(false, frequencyequalizer("xzxz")) + end +end diff --git a/challenge-194/roger-bell-west/rust/ch-1.rs b/challenge-194/roger-bell-west/rust/ch-1.rs new file mode 100755 index 0000000000..056610aaf6 --- /dev/null +++ b/challenge-194/roger-bell-west/rust/ch-1.rs @@ -0,0 +1,53 @@ +#! /bin/sh +//usr/bin/env rustc --test $0 -o ${0}x && ./${0}x --nocapture; rm -f ${0}x ; exit + +#[test] +fn test_ex1() { + assert_eq!(digitalclock("?5:00"), 1); +} + +#[test] +fn test_ex2() { + assert_eq!(digitalclock("?3:00"), 2); +} + +#[test] +fn test_ex3() { + assert_eq!(digitalclock("1?:00"), 9); +} + +#[test] +fn test_ex4() { + assert_eq!(digitalclock("2?:00"), 3); +} + +#[test] +fn test_ex5() { + assert_eq!(digitalclock("12:?5"), 5); +} + +#[test] +fn test_ex6() { + assert_eq!(digitalclock("12:5?"), 9); +} + +fn digitalclock(hhmm0: &str) -> u8 { + let i = hhmm0.find('?').unwrap(); + let hhmm = hhmm0.chars().collect::<Vec<char>>(); + if i == 0 { + if hhmm[1] <= '3' { + return 2; + } + return 1; + } else if i == 1 { + if hhmm[0] < '2' { + return 9; + } + return 3; + } else if i == 3 { + return 5; + } else if i == 4 { + return 9; + } + 0 +} diff --git a/challenge-194/roger-bell-west/rust/ch-2.rs b/challenge-194/roger-bell-west/rust/ch-2.rs new file mode 100755 index 0000000000..70bd9c2362 --- /dev/null +++ b/challenge-194/roger-bell-west/rust/ch-2.rs @@ -0,0 +1,34 @@ +#! /bin/sh +//usr/bin/env rustc --test $0 -o ${0}x && ./${0}x --nocapture; rm -f ${0}x ; exit + +use std::collections::HashMap; + +#[test] +fn test_ex1() { + assert_eq!(frequencyequalizer("abbc"), true); +} + +#[test] +fn test_ex2() { + assert_eq!(frequencyequalizer("xyzyyxz"), true); +} + +#[test] +fn test_ex3() { + assert_eq!(frequencyequalizer("xzxz"), false); +} + +fn frequencyequalizer(s: &str) -> bool { + let mut f: HashMap<char, usize> = HashMap::new(); + for c in s.chars() { + let en = f.entry(c).or_insert(0); + *en += 1; + } + let mut v = f.into_values().collect::<Vec<usize>>(); + v.sort(); + if v[0] == v[v.len() - 2] && v[0] + 1 == v[v.len() - 1] { + true + } else { + false + } +} |
