diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2022-12-13 11:36:44 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-12-13 11:36:44 +0000 |
| commit | 634fd7a2194ac04f7b768b9f483186827470a03d (patch) | |
| tree | d72359bbee0af3870b321fd5198a27316deee275 | |
| parent | 9801381b85125dbcb7a501a85337af1d9eee7f03 (diff) | |
| parent | 6930d0c30b8c5cea8a81cfd809fbbd1894ad2148 (diff) | |
| download | perlweeklychallenge-club-634fd7a2194ac04f7b768b9f483186827470a03d.tar.gz perlweeklychallenge-club-634fd7a2194ac04f7b768b9f483186827470a03d.tar.bz2 perlweeklychallenge-club-634fd7a2194ac04f7b768b9f483186827470a03d.zip | |
Merge pull request #7249 from Firedrake/rogerbw-challenge-195
Solutions for challenge #195
18 files changed, 778 insertions, 0 deletions
diff --git a/challenge-195/roger-bell-west/javascript/ch-1.js b/challenge-195/roger-bell-west/javascript/ch-1.js new file mode 100755 index 0000000000..728340ef1c --- /dev/null +++ b/challenge-195/roger-bell-west/javascript/ch-1.js @@ -0,0 +1,37 @@ +#! /usr/bin/node + +"use strict" + +function specialintegers(n) { + let o = 0; + for (let i = 1; i <= n; i++) { + let f = new Set(); + let s = true; + for (let c of i.toString()) { + if (f.has(c)) { + s = false; + break; + } else { + f.add(c); + } + } + if (s == 1) { + o++; + } + } + return o; +} + +if (specialintegers(15) == 14) { + process.stdout.write("Pass"); +} else { + process.stdout.write("FAIL"); +} +process.stdout.write(" "); + +if (specialintegers(35) == 32) { + process.stdout.write("Pass"); +} else { + process.stdout.write("FAIL"); +} +process.stdout.write("\n"); diff --git a/challenge-195/roger-bell-west/javascript/ch-2.js b/challenge-195/roger-bell-west/javascript/ch-2.js new file mode 100755 index 0000000000..0fdfce7898 --- /dev/null +++ b/challenge-195/roger-bell-west/javascript/ch-2.js @@ -0,0 +1,45 @@ +#! /usr/bin/node + +"use strict" + +function mostfrequenteven(l) { + let f = new Map(); + for (let n of l) { + if (n % 2 == 0) { + if (f.has(n)) { + f.set(n, f.get(n) + 1); + } else { + f.set(n, 1); + } + } + } + if (f.size > 0) { + let m = Math.max(...f.values()); + let l = Array.from(f.keys()).filter(i => f.get(i) == m); + l.sort(); + return l[0]; + } else { + return -1; + } +} + +if (mostfrequenteven([1, 1, 2, 6, 2]) == 2) { + process.stdout.write("Pass"); +} else { + process.stdout.write("FAIL"); +} +process.stdout.write(" "); + +if (mostfrequenteven([1, 3, 5, 7]) == -1) { + process.stdout.write("Pass"); +} else { + process.stdout.write("FAIL"); +} +process.stdout.write(" "); + +if (mostfrequenteven([6, 4, 4, 6, 1]) == 4) { + process.stdout.write("Pass"); +} else { + process.stdout.write("FAIL"); +} +process.stdout.write("\n"); diff --git a/challenge-195/roger-bell-west/kotlin/ch-1.kt b/challenge-195/roger-bell-west/kotlin/ch-1.kt new file mode 100644 index 0000000000..205f2994ac --- /dev/null +++ b/challenge-195/roger-bell-west/kotlin/ch-1.kt @@ -0,0 +1,30 @@ +fun specialintegers(n: Int): Int { + var o = 0 + for (i in 1..n) { + var f = mutableMapOf<Char, Int>() + for (c in i.toString()) { + var l = f.getOrDefault(c, 0) + f.set(c, l + 1) + } + if (f.values.maxOrNull()!! == 1) { + o += 1 + } + } + return o +} + +fun main() { + if (specialintegers(15) == 14) { + print("Pass") + } else { + print("FAIL") + } + print(" ") + + if (specialintegers(35) == 32) { + print("Pass") + } else { + print("FAIL") + } + println("") +} diff --git a/challenge-195/roger-bell-west/kotlin/ch-2.kt b/challenge-195/roger-bell-west/kotlin/ch-2.kt new file mode 100644 index 0000000000..14d82ddc2a --- /dev/null +++ b/challenge-195/roger-bell-west/kotlin/ch-2.kt @@ -0,0 +1,38 @@ +fun mostfrequenteven(l: List<Int>): Int { + var f = mutableMapOf<Int, Int>() + for (n in l) { + if (n % 2 == 0) { + var k = f.getOrDefault(n, 0); + f.set(n, k + 1); + } + } + if (f.size > 0) { + val m = f.values.maxOrNull()!! + var ll = ArrayList(f.keys.filter{f[it] == m}) + ll.sort() + return ll[0] + } else { + return -1 + } +} + +fun main() { + if (mostfrequenteven(listOf(1, 1, 2, 6, 2)) == 2) { + print("Pass") + } else { + print("FAIL") + } + print(" ") + if (mostfrequenteven(listOf(1, 3, 5, 7)) == -1) { + print("Pass") + } else { + print("FAIL") + } + print(" ") + if (mostfrequenteven(listOf(6, 4, 4, 6, 1)) == 4) { + print("Pass") + } else { + print("FAIL") + } + println("") +} diff --git a/challenge-195/roger-bell-west/lua/ch-1.lua b/challenge-195/roger-bell-west/lua/ch-1.lua new file mode 100755 index 0000000000..598da06a7b --- /dev/null +++ b/challenge-195/roger-bell-west/lua/ch-1.lua @@ -0,0 +1,34 @@ +#! /usr/bin/lua + +function specialintegers(n) + local o = 0 + for i = 1, n do + local f = {} + local s = true + for c in string.gmatch(i, ".") do + if f[c] == nil then + f[c] = 1 + else + s = false + break + end + end + if s then + o = o + 1 + end + end + return o +end + +if specialintegers(15) == 14 then + io.write("Pass") +else + io.write("FAIL") +end +io.write(" ") +if specialintegers(35) == 32 then + io.write("Pass") +else + io.write("FAIL") +end +print("") diff --git a/challenge-195/roger-bell-west/lua/ch-2.lua b/challenge-195/roger-bell-west/lua/ch-2.lua new file mode 100755 index 0000000000..f661eb83d5 --- /dev/null +++ b/challenge-195/roger-bell-west/lua/ch-2.lua @@ -0,0 +1,51 @@ +#! /usr/bin/lua + +function mostfrequenteven(l) + local f = {} + local mx + for i, n in ipairs(l) do + if n % 2 == 0 then + if f[n] == nil then + f[n] = 1 + else + f[n] = f[n]+1 + end + if mx == nil or f[n] > mx then + mx = f[n] + end + end + end + if mx ~= nil then + local l = {} + for k, v in pairs(f) do + if v == mx then + table.insert(l, k) + end + end + table.sort(l) + return l[1] + else + return -1 + end +end + +if mostfrequenteven({1, 1, 2, 6, 2}) == 2 then + io.write("Pass") +else + io.write("FAIL") +end +io.write(" ") + +if mostfrequenteven({1, 3, 5, 7}) == -1 then + io.write("Pass") +else + io.write("FAIL") +end +io.write(" ") + +if mostfrequenteven({6, 4, 4, 6, 1}) == 4 then + io.write("Pass") +else + io.write("FAIL") +end +print("") diff --git a/challenge-195/roger-bell-west/perl/ch-1.pl b/challenge-195/roger-bell-west/perl/ch-1.pl new file mode 100755 index 0000000000..92f77b56ad --- /dev/null +++ b/challenge-195/roger-bell-west/perl/ch-1.pl @@ -0,0 +1,26 @@ +#! /usr/bin/perl + +use strict; +use warnings; +use experimental 'signatures'; + +use Test::More tests => 2; + +is(specialintegers(15), 14, 'example 1'); +is(specialintegers(35), 32, 'example 2'); + +use List::Util qw(max); + +sub specialintegers($n) { + my $o = 0; + foreach my $i (1..$n) { + my %f; + foreach my $c (split('', $i)) { + $f{$c}++; + } + if (max(values %f) == 1) { + $o++; + } + } + return $o; +} diff --git a/challenge-195/roger-bell-west/perl/ch-2.pl b/challenge-195/roger-bell-west/perl/ch-2.pl new file mode 100755 index 0000000000..6c5d99c7f7 --- /dev/null +++ b/challenge-195/roger-bell-west/perl/ch-2.pl @@ -0,0 +1,30 @@ +#! /usr/bin/perl + +use strict; +use warnings; +use experimental 'signatures'; + +use Test::More tests => 3; + +is(mostfrequenteven([1, 1, 2, 6, 2]), 2, 'example 1'); +is(mostfrequenteven([1, 3, 5, 7]), -1, 'example 2'); +is(mostfrequenteven([6, 4, 4, 6, 1]), 4, 'example 3'); + +use List::Util qw(max); + +sub mostfrequenteven($l) { + my %f; + foreach my $n (@{$l}) { + if ($n % 2 == 0) { + $f{$n}++; + } + } + if (scalar %f > 0) { + my $m = max(values %f); + my @l = grep {$f{$_} == $m} keys %f; + @l = sort @l; + return $l[0]; + } else { + return -1; + } +} diff --git a/challenge-195/roger-bell-west/postscript/ch-1.ps b/challenge-195/roger-bell-west/postscript/ch-1.ps new file mode 100644 index 0000000000..26f4c3669f --- /dev/null +++ b/challenge-195/roger-bell-west/postscript/ch-1.ps @@ -0,0 +1,66 @@ +%!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.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 + + +% end included library code + +/specialintegers { + 4 dict begin + /n exch def + /o 0 def + 1 1 n { + /f 0 dict def + /s true def + dup log cvi 1 add string cvs { + /c exch def + f c known { + /s false def + exit + } { + f c true put + } ifelse + } forall + s { + /o o 1 add def + } if + } for + o + end +} bind def + +(specialintegers) test.start +15 specialintegers 14 eq test +35 specialintegers 32 eq test +test.end diff --git a/challenge-195/roger-bell-west/postscript/ch-2.ps b/challenge-195/roger-bell-west/postscript/ch-2.ps new file mode 100644 index 0000000000..8324605895 --- /dev/null +++ b/challenge-195/roger-bell-west/postscript/ch-2.ps @@ -0,0 +1,180 @@ +%!PS + +% begin included library code +% see https://github.com/Firedrake/postscript-libraries/ +/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 + +/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 + +/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 { + /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.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 + +/reduce { % array proc -> value + 2 dict begin + /p exch def + /a exch def + a 0 get + 1 1 a length 1 sub { + a exch get + p + } for + end +} bind def + +/listmax { + { max } reduce +} bind def + +/keys { % dict -> array of dict keys + [ exch + { + pop + } forall + ] +} bind def + +/values { % dict -> array of dict values + [ exch + { + exch pop + } forall + ] +} bind def + +/filter { % array proc(bool) -> array + 1 dict begin + /p exch def + [ exch + { + dup p not + { + pop + } if + } forall + ] + end +} bind def + +/test.start { + print (:) print + /test.pass 0 def + /test.count 0 def +} bind def + + +% end included library code + +/mostfrequenteven { + 2 dict begin + /l exch def + /f 0 dict def + l { 2 mod 0 eq } filter { + dup f exch known { + dup f exch get 1 add f 3 1 roll put + } { + f exch 1 put + } ifelse + } forall + f length 0 gt { + /m f values listmax def + f keys { f exch get m eq } filter + quicksort 0 get + } { + -1 + } ifelse + end +} bind def + +(mostfrequenteven) test.start +[ 1 1 2 6 2 ] mostfrequenteven 2 eq test +[ 1 3 5 7 ] mostfrequenteven -1 eq test +[ 6 4 4 6 1 ] mostfrequenteven 4 eq test +test.end diff --git a/challenge-195/roger-bell-west/python/ch-1.py b/challenge-195/roger-bell-west/python/ch-1.py new file mode 100755 index 0000000000..d246c2b66d --- /dev/null +++ b/challenge-195/roger-bell-west/python/ch-1.py @@ -0,0 +1,28 @@ +#! /usr/bin/python3 + +import unittest + +def specialintegers(n): + o = 0 + for i in range(1, n+1): + s = True + f = set() + for c in str(i): + if c in f: + s = False + break + else: + f.add(c) + if s: + o += 1 + return o + +class TestSpecialIntegers(unittest.TestCase): + + def test_ex1(self): + self.assertEqual(specialintegers(15), 14, 'example 1') + + def test_ex2(self): + self.assertEqual(specialintegers(35), 32, 'example 2') + +unittest.main() diff --git a/challenge-195/roger-bell-west/python/ch-2.py b/challenge-195/roger-bell-west/python/ch-2.py new file mode 100755 index 0000000000..d5f1259e14 --- /dev/null +++ b/challenge-195/roger-bell-west/python/ch-2.py @@ -0,0 +1,30 @@ +#! /usr/bin/python3 + +import unittest +from collections import defaultdict + +def mostfrequenteven(l): + f = defaultdict(lambda: 0) + for n in l: + if n % 2 == 0: + f[n] += 1 + if len(f) > 0: + m = max(f.values()) + l = [i for i in f.keys() if f[i] == m] + l.sort() + return l[0] + else: + return -1 + +class TestMostfrequenteven(unittest.TestCase): + + def test_ex1(self): + self.assertEqual(mostfrequenteven([1, 1, 2, 6, 2]), 2, 'example 1') + + def test_ex2(self): + self.assertEqual(mostfrequenteven([1, 3, 5, 7]), -1, 'example 2') + + def test_ex3(self): + self.assertEqual(mostfrequenteven([6, 4, 4, 6, 1]), 4, 'example 3') + +unittest.main() diff --git a/challenge-195/roger-bell-west/raku/ch-1.p6 b/challenge-195/roger-bell-west/raku/ch-1.p6 new file mode 100755 index 0000000000..192c1803d1 --- /dev/null +++ b/challenge-195/roger-bell-west/raku/ch-1.p6 @@ -0,0 +1,22 @@ +#! /usr/bin/perl6 + +use Test; + +plan 2; + +is(specialintegers(15), 14, 'example 1'); +is(specialintegers(35), 32, 'example 2'); + +sub specialintegers($n) { + my $o = 0; + for (1..$n) -> $i { + my %f; + for $i.Str.comb -> $c { + %f{$c}++; + } + if (%f.values.max == 1) { + $o++; + } + } + return $o; +} diff --git a/challenge-195/roger-bell-west/raku/ch-2.p6 b/challenge-195/roger-bell-west/raku/ch-2.p6 new file mode 100755 index 0000000000..c3370ef9d6 --- /dev/null +++ b/challenge-195/roger-bell-west/raku/ch-2.p6 @@ -0,0 +1,26 @@ +#! /usr/bin/perl6 + +use Test; + +plan 3; + +is(mostfrequenteven([1, 1, 2, 6, 2]), 2, 'example 1'); +is(mostfrequenteven([1, 3, 5, 7]), -1, 'example 2'); +is(mostfrequenteven([6, 4, 4, 6, 1]), 4, 'example 3'); + +sub mostfrequenteven(@l) { + my %f; + for @l -> $n { + if ($n % 2 == 0) { + %f{$n}++; + } + } + if (%f.elems > 0) { + my $m = %f.values.max; + my @l = grep {%f{$_} == $m}, %f.keys; + @l = @l.sort; + return @l[0]; + } else { + return -1; + } +} diff --git a/challenge-195/roger-bell-west/ruby/ch-1.rb b/challenge-195/roger-bell-west/ruby/ch-1.rb new file mode 100755 index 0000000000..2adacafc59 --- /dev/null +++ b/challenge-195/roger-bell-west/ruby/ch-1.rb @@ -0,0 +1,29 @@ +#! /usr/bin/ruby + +require 'test/unit' + +def specialintegers(n) + o = 0 + 1.upto(n) do |i| + f = Hash.new(0) + for c in i.to_s.chars do + f[c] += 1 + end + if f.values.max == 1 then + o += 1 + end + end + return o +end + +class TestSpecialintegers < Test::Unit::TestCase + + def test_ex1 + assert_equal(14, specialintegers(15)) + end + + def test_ex2 + assert_equal(32, specialintegers(35)) + end + +end diff --git a/challenge-195/roger-bell-west/ruby/ch-2.rb b/challenge-195/roger-bell-west/ruby/ch-2.rb new file mode 100755 index 0000000000..bd9dba8347 --- /dev/null +++ b/challenge-195/roger-bell-west/ruby/ch-2.rb @@ -0,0 +1,34 @@ +#! /usr/bin/ruby + +require 'test/unit' + +def mostfrequenteven(l) + f = Hash.new(0) + l.each do |n| + if n % 2 == 0 then + f[n] += 1 + end + end + if f.length > 0 then + m = f.values.max + l = f.keys.find_all { |x| f[x] == m}.sort + return l[0] + else + return -1 + end +end + +class TestMostFrequentEven < Test::Unit::TestCase + + def test_ex1 + assert_equal(2, mostfrequenteven([1, 1, 2, 6, 2])) + end + + def test_ex2 + assert_equal(-1, mostfrequenteven([1, 3, 5, 7])) + end + + def test_ex3 + assert_equal(4, mostfrequenteven([6, 4, 4, 6, 1])) + end +end diff --git a/challenge-195/roger-bell-west/rust/ch-1.rs b/challenge-195/roger-bell-west/rust/ch-1.rs new file mode 100755 index 0000000000..ff432e7607 --- /dev/null +++ b/challenge-195/roger-bell-west/rust/ch-1.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::HashSet; + +#[test] +fn test_ex1() { + assert_eq!(specialintegers(15), 14); +} + +#[test] +fn test_ex2() { + assert_eq!(specialintegers(35), 32); +} + +fn specialintegers(n: usize) -> usize { + let mut o = 0; + for i in 1..=n { + let mut s = true; + let mut f: HashSet<char> = HashSet::new(); + for c in i.to_string().chars() { + if f.contains(&c) { + s = false; + break; + } else { + f.insert(c); + } + } + if s { + o += 1; + } + } + o +} diff --git a/challenge-195/roger-bell-west/rust/ch-2.rs b/challenge-195/roger-bell-west/rust/ch-2.rs new file mode 100755 index 0000000000..0588db1309 --- /dev/null +++ b/challenge-195/roger-bell-west/rust/ch-2.rs @@ -0,0 +1,38 @@ +#! /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!(mostfrequenteven(vec![1, 1, 2, 6, 2]), 2); +} + +#[test] +fn test_ex2() { + assert_eq!(mostfrequenteven(vec![1, 3, 5, 7]), -1); +} + +#[test] +fn test_ex3() { + assert_eq!(mostfrequenteven(vec![6, 4, 4, 6, 1]), 4); +} + +fn mostfrequenteven(l: Vec<usize>) -> isize { + let mut f: HashMap<usize, usize> = HashMap::new(); + for n in &l { + if *n % 2 == 0 { + let en = f.entry(*n).or_insert(0); + *en += 1; + } + } + if f.len() > 0 { + let m = f.values().max().unwrap(); + let mut l = + f.keys().copied().filter(|i| f[i] == *m).collect::<Vec<usize>>(); + l.sort(); + l[0] as isize + } else { + -1 + } +} |
