diff options
52 files changed, 3949 insertions, 2762 deletions
diff --git a/challenge-195/dave-jacoby/perl/ch-1.pl b/challenge-195/dave-jacoby/perl/ch-1.pl new file mode 100644 index 0000000000..189613873e --- /dev/null +++ b/challenge-195/dave-jacoby/perl/ch-1.pl @@ -0,0 +1,26 @@ +#!/usr/bin/env perl + +use strict; +use warnings; +use experimental qw{ fc say postderef signatures state }; + +my @examples = ( 15, 35 ); +for my $n (@examples) { + my $o = special_list($n); + say <<"END"; + Input: \$n = $n + Output: $o +END +} + +sub special_list ( $n ) { + return scalar grep { is_special($_) } 1 .. $n; +} + +sub is_special ( $n ) { + my %hash; + for my $i ( split //, $n ) { + return 0 if ++$hash{$i} > 1; + } + return 1; +} diff --git a/challenge-195/dave-jacoby/perl/ch-2.pl b/challenge-195/dave-jacoby/perl/ch-2.pl new file mode 100644 index 0000000000..9a704a2c63 --- /dev/null +++ b/challenge-195/dave-jacoby/perl/ch-2.pl @@ -0,0 +1,29 @@ +#!/usr/bin/env perl + +use strict; +use warnings; +use experimental qw{ say postderef signatures state }; + +use List::Util qw{ min max }; + +my @examples = ( [ 1, 1, 2, 6, 2 ], [ 1, 3, 5, 7 ], [ 6, 4, 4, 6, 1 ] ); + +for my $e (@examples) { + my $list = join ',', $e->@*; + my $o = most_frequent_even( $e->@* ); + say <<"END"; + Input: \@list = $list + Output: $o +END +} + +sub most_frequent_even( @list ) { + my %hash; + map { $hash{$_}++ } grep { 0 == $_ % 2 } @list; + if ( scalar keys %hash ) { + my $max = max values %hash; + return min grep { $hash{$_} == $max } keys %hash; + } + return -1; +} + diff --git a/challenge-195/luca-ferrari/blog-1.txt b/challenge-195/luca-ferrari/blog-1.txt new file mode 100644 index 0000000000..2afdd83ab8 --- /dev/null +++ b/challenge-195/luca-ferrari/blog-1.txt @@ -0,0 +1 @@ +https://fluca1978.github.io/2022/12/12/PerlWeeklyChallenge195.html#task1 diff --git a/challenge-195/luca-ferrari/blog-2.txt b/challenge-195/luca-ferrari/blog-2.txt new file mode 100644 index 0000000000..124f33a97c --- /dev/null +++ b/challenge-195/luca-ferrari/blog-2.txt @@ -0,0 +1 @@ +https://fluca1978.github.io/2022/12/12/PerlWeeklyChallenge195.html#task2 diff --git a/challenge-195/luca-ferrari/blog-3.txt b/challenge-195/luca-ferrari/blog-3.txt new file mode 100644 index 0000000000..fb3572a632 --- /dev/null +++ b/challenge-195/luca-ferrari/blog-3.txt @@ -0,0 +1 @@ +https://fluca1978.github.io/2022/12/12/PerlWeeklyChallenge195.html#task1plperl diff --git a/challenge-195/luca-ferrari/blog-4.txt b/challenge-195/luca-ferrari/blog-4.txt new file mode 100644 index 0000000000..d8193434ac --- /dev/null +++ b/challenge-195/luca-ferrari/blog-4.txt @@ -0,0 +1 @@ +https://fluca1978.github.io/2022/12/12/PerlWeeklyChallenge195.html#task2plperl diff --git a/challenge-195/luca-ferrari/blog-5.txt b/challenge-195/luca-ferrari/blog-5.txt new file mode 100644 index 0000000000..1864572ac2 --- /dev/null +++ b/challenge-195/luca-ferrari/blog-5.txt @@ -0,0 +1 @@ +https://fluca1978.github.io/2022/12/12/PerlWeeklyChallenge195.html#task1plpgsql diff --git a/challenge-195/luca-ferrari/blog-6.txt b/challenge-195/luca-ferrari/blog-6.txt new file mode 100644 index 0000000000..bc5e6b6762 --- /dev/null +++ b/challenge-195/luca-ferrari/blog-6.txt @@ -0,0 +1 @@ +https://fluca1978.github.io/2022/12/12/PerlWeeklyChallenge195.html#task2plpgsql diff --git a/challenge-195/luca-ferrari/postgresql/ch-1.plperl b/challenge-195/luca-ferrari/postgresql/ch-1.plperl new file mode 100644 index 0000000000..3ea8594add --- /dev/null +++ b/challenge-195/luca-ferrari/postgresql/ch-1.plperl @@ -0,0 +1,40 @@ +-- Perl Weekly Challenge 195 +-- Task 1 + +CREATE SCHEMA IF NOT EXISTS pwc195; + +CREATE OR REPLACE FUNCTION +pwc195.task1_plperl( int, bool default true ) +RETURNS int +AS $CODE$ + my ( $n, $verbose ) = @_; + my @special_integers; + + my $baggify = sub { + my ( $n ) = @_; + my $bag = {}; + for my $digit ( split '', $n ) { + $bag->{ $digit }++; + } + + return $bag; + }; + + my $has_no_repetitions = sub { + my ( $bag ) = @_; + for ( keys $bag->%* ) { + return 0 if $bag->{ $_ } != 1; + } + + return 1; + }; + + for ( 1 .. $n ) { + push @special_integers, $_ if ( $has_no_repetitions->( $baggify->( $_ ) ) ); + } + + elog( INFO, "Found: " . join( ',', @special_integers ) ) if ( $ verbose ); + return scalar @special_integers; + +$CODE$ +LANGUAGE plperl; diff --git a/challenge-195/luca-ferrari/postgresql/ch-1.sql b/challenge-195/luca-ferrari/postgresql/ch-1.sql new file mode 100644 index 0000000000..c6cbc28437 --- /dev/null +++ b/challenge-195/luca-ferrari/postgresql/ch-1.sql @@ -0,0 +1,31 @@ +-- Perl Weekly Challenge 195 +-- Task 1 + +CREATE SCHEMA IF NOT EXISTS pwc195; + +CREATE OR REPLACE FUNCTION +pwc195.task1_plpgsql( n int ) +RETURNS int +AS $CODE$ +DECLARE + i int; + freq int; + counter int := 0; +BEGIN + FOR i IN 1 .. n LOOP + SELECT count(*) + INTO freq + FROM regexp_split_to_table( i::text, '' ) as n(d) + GROUP BY d + ORDER BY 1 DESC; + + IF freq = 1 THEN + counter := counter + 1; + END IF; + + END LOOP; + + RETURN counter; +END +$CODE$ +LANGUAGE plpgsql; diff --git a/challenge-195/luca-ferrari/postgresql/ch-2.plperl b/challenge-195/luca-ferrari/postgresql/ch-2.plperl new file mode 100644 index 0000000000..b15f6b215b --- /dev/null +++ b/challenge-195/luca-ferrari/postgresql/ch-2.plperl @@ -0,0 +1,29 @@ +-- Perl Weekly Challenge 195 +-- Task 2 + +CREATE SCHEMA IF NOT EXISTS pwc195; + +CREATE OR REPLACE FUNCTION +pwc195.task2_plperl( int[] ) +RETURNS int +AS $CODE$ + my ( $array ) = @_; + # extract only evens + my @evens = grep { $_ % 2 == 0 } $array->@*; + # classify frequency + my $bag = {}; + $bag->{ $_ }++ for ( @evens ); + + + # sort by frequency and value + my @sorted_bag = + map { $_->[1] } + sort { $a->[0] <=> $b->[0] || $a->[1] <=> $b->[1] } + map { [ $bag->{ $_ }, $_ ] } keys $bag->%*; + + + # the first value in the list is the + # one with the max frequency and the lowest value + return $sorted_bag[ 0 ]; +$CODE$ +LANGUAGE plperl; diff --git a/challenge-195/luca-ferrari/postgresql/ch-2.sql b/challenge-195/luca-ferrari/postgresql/ch-2.sql new file mode 100644 index 0000000000..633ffc8c4f --- /dev/null +++ b/challenge-195/luca-ferrari/postgresql/ch-2.sql @@ -0,0 +1,42 @@ +-- Perl Weekly Challenge 195 +-- Task 2 + +CREATE SCHEMA IF NOT EXISTS pwc195; + +/* +testdb=> select pwc195.task2_plpgsql( array[1,2,2,3,4,4,4,5,6,6,6,6]::int[] ); +NOTICE: relation "nums" already exists, skipping + task2_plpgsql +--------------- + 6 + +*/ + +CREATE OR REPLACE FUNCTION +pwc195.task2_plpgsql( list int[] ) +RETURNS int +AS $CODE$ +DECLARE + current int; +BEGIN + CREATE TEMPORARY TABLE IF NOT EXISTS nums( v int, f int default 1, primary key( v ) ); + TRUNCATE TABLE nums; + + FOREACH current IN ARRAY list LOOP + INSERT INTO nums AS frequency + SELECT current, 1 + ON CONFLICT (v) + DO UPDATE SET f = frequency.f + 1; + END LOOP; + + SELECT v + INTO current + FROM nums + WHERE v % 2 = 0 + ORDER BY f DESC, v ASC + LIMIT 1; + + RETURN current; +END +$CODE$ +LANGUAGE plpgsql; diff --git a/challenge-195/luca-ferrari/raku/ch-1.p6 b/challenge-195/luca-ferrari/raku/ch-1.p6 new file mode 100644 index 0000000000..15012afdf2 --- /dev/null +++ b/challenge-195/luca-ferrari/raku/ch-1.p6 @@ -0,0 +1,13 @@ +#!raku + +# Perl Weekly Challenge 195 + +sub MAIN( Int $n where { $n > 0 }, Bool :$verbose = False ) { + my @special-integers; + for 1 .. $n { + @special-integers.push: $_ if $_.comb.Bag.values.max <= 1; + } + + @special-integers.join( ',' ).say if ( $verbose ); + @special-integers.elems.say; +} diff --git a/challenge-195/luca-ferrari/raku/ch-2.p6 b/challenge-195/luca-ferrari/raku/ch-2.p6 new file mode 100644 index 0000000000..707f429ed1 --- /dev/null +++ b/challenge-195/luca-ferrari/raku/ch-2.p6 @@ -0,0 +1,15 @@ +#!raku + +# Perl Weekly Challenge 195 + +sub MAIN( *@list where { @list.grep( * ~~ Int ).elems == @list.elems } ) { + my $bag = @list.grep( * %% 2 ).Bag; + my $most-frequency = $bag.values.max; + my @most-frequent-evens; + for $bag.keys { + next if $bag{ $_ } != $most-frequency; + @most-frequent-evens.push: $_; + } + + @most-frequent-evens.min.say; +} diff --git a/challenge-195/mark-anderson/raku/ch-1.raku b/challenge-195/mark-anderson/raku/ch-1.raku new file mode 100644 index 0000000000..f71c30c3b8 --- /dev/null +++ b/challenge-195/mark-anderson/raku/ch-1.raku @@ -0,0 +1,22 @@ +#!/usr/bin/env raku +use Test; + +is special-integers(15), 14; +is special-integers(35), 32; +is special-integers(9_999_999), 712890; + +sub special-integers($n) +{ + my $i; + + for (^10).combinations(1..$n.chars) + { + for .permutations + { + next unless .head; + $i++ unless $_ > $n given .join + } + } + + $i +} diff --git a/challenge-195/mark-anderson/raku/ch-2.raku b/challenge-195/mark-anderson/raku/ch-2.raku new file mode 100644 index 0000000000..574f857543 --- /dev/null +++ b/challenge-195/mark-anderson/raku/ch-2.raku @@ -0,0 +1,11 @@ +#!/usr/bin/env raku +use Test; + +is most-frequent-even(1,1,2,6,2), 2; +is most-frequent-even(1,3,5,7), Inf; +is most-frequent-even(6,4,4,6,1), 4; + +sub most-frequent-even(*@list) +{ + @list.grep(* %% 2).Bag.maxpairs>>.key.min +} 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 |
