From 98dabbb62913c2ffcc268e7d5fe91077a01b6fba Mon Sep 17 00:00:00 2001 From: Adam Russell Date: Sat, 17 Dec 2022 13:52:56 -0500 Subject: initial commit --- challenge-195/adam-russell/perl/ch-1.pl | 18 ++++++++++++++++++ challenge-195/adam-russell/perl/ch-2.pl | 28 ++++++++++++++++++++++++++++ 2 files changed, 46 insertions(+) create mode 100644 challenge-195/adam-russell/perl/ch-1.pl create mode 100644 challenge-195/adam-russell/perl/ch-2.pl diff --git a/challenge-195/adam-russell/perl/ch-1.pl b/challenge-195/adam-russell/perl/ch-1.pl new file mode 100644 index 0000000000..5f1502dbb0 --- /dev/null +++ b/challenge-195/adam-russell/perl/ch-1.pl @@ -0,0 +1,18 @@ +use v5.34; +## +# You are given a positive integer, $n > 0. +# Write a script to print the count of all special +# integers between 1 and $n. +## +use boolean; +sub is_special{ + my($x) = @_; + my %h; + my @digits = split(//, $x); + map{ $h{$_} = undef } @digits; + return keys %h == @digits; +} + +MAIN:{ + say q// . grep{ is_special($_) } 1 .. $ARGV[0]; +} diff --git a/challenge-195/adam-russell/perl/ch-2.pl b/challenge-195/adam-russell/perl/ch-2.pl new file mode 100644 index 0000000000..15a47ab5a5 --- /dev/null +++ b/challenge-195/adam-russell/perl/ch-2.pl @@ -0,0 +1,28 @@ +use v5.34; +## +# You are given a list of numbers, @list. +# Write a script to find most frequent even +# numbers in the list. In case you get more +# than one even numbers then return the smallest even integer. +# For all other case, return -1. +## +sub frequency{ + my @list = @_; + @list = grep { $_ % 2 == 0 } @list; + return -1 if @list == 0; + my %frequencies; + map { $frequencies{$_}++ } @list; + my @sorted = sort { $frequencies{$b} <=> $frequencies{$a} } @list; + return $sorted[0] if $frequencies{$sorted[0]} != $frequencies{$sorted[1]}; + return (sort { $a <=> $b } @sorted)[0]; +} + +MAIN:{ + my @list; + @list = (1, 1, 2, 6, 2); + say frequency(@list); + @list = (1, 3, 5, 7); + say frequency(@list); + @list = (6, 4, 4, 6, 1); + say frequency(@list); +} -- cgit From 9e83bf13b685c12f89872f75796da94210c0dbc2 Mon Sep 17 00:00:00 2001 From: Adam Russell Date: Sat, 17 Dec 2022 13:55:46 -0500 Subject: updated Perl solution to part 2 --- challenge-195/adam-russell/perl/ch-2.pl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/challenge-195/adam-russell/perl/ch-2.pl b/challenge-195/adam-russell/perl/ch-2.pl index 15a47ab5a5..143a0578aa 100644 --- a/challenge-195/adam-russell/perl/ch-2.pl +++ b/challenge-195/adam-russell/perl/ch-2.pl @@ -6,7 +6,7 @@ use v5.34; # than one even numbers then return the smallest even integer. # For all other case, return -1. ## -sub frequency{ +sub most_frequent_even{ my @list = @_; @list = grep { $_ % 2 == 0 } @list; return -1 if @list == 0; -- cgit From af3f70f9977b22f2e29cd2ea8da1e43c3904bbb7 Mon Sep 17 00:00:00 2001 From: Adam Russell Date: Sat, 17 Dec 2022 14:23:22 -0500 Subject: updated Perl solutions --- challenge-195/adam-russell/perl/ch-1.pl | 2 +- challenge-195/adam-russell/perl/ch-2.pl | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/challenge-195/adam-russell/perl/ch-1.pl b/challenge-195/adam-russell/perl/ch-1.pl index 5f1502dbb0..96baab9d9d 100644 --- a/challenge-195/adam-russell/perl/ch-1.pl +++ b/challenge-195/adam-russell/perl/ch-1.pl @@ -1,4 +1,4 @@ -use v5.34; +use v5.36; ## # You are given a positive integer, $n > 0. # Write a script to print the count of all special diff --git a/challenge-195/adam-russell/perl/ch-2.pl b/challenge-195/adam-russell/perl/ch-2.pl index 143a0578aa..3a543e2efe 100644 --- a/challenge-195/adam-russell/perl/ch-2.pl +++ b/challenge-195/adam-russell/perl/ch-2.pl @@ -1,4 +1,4 @@ -use v5.34; +use v5.36; ## # You are given a list of numbers, @list. # Write a script to find most frequent even @@ -20,9 +20,9 @@ sub most_frequent_even{ MAIN:{ my @list; @list = (1, 1, 2, 6, 2); - say frequency(@list); + say most_frequent_even(@list); @list = (1, 3, 5, 7); - say frequency(@list); + say most_frequent_even(@list); @list = (6, 4, 4, 6, 1); - say frequency(@list); + say most_frequent_even(@list); } -- cgit From d9e9bf17ab9027eef8d51ff4f75785c5e27d4adc Mon Sep 17 00:00:00 2001 From: Adam Russell Date: Sat, 17 Dec 2022 15:36:25 -0500 Subject: added Prolog solutions --- challenge-195/adam-russell/prolog/ch-1.p | 13 +++++++++++ challenge-195/adam-russell/prolog/ch-2.p | 40 ++++++++++++++++++++++++++++++++ 2 files changed, 53 insertions(+) create mode 100644 challenge-195/adam-russell/prolog/ch-1.p create mode 100644 challenge-195/adam-russell/prolog/ch-2.p diff --git a/challenge-195/adam-russell/prolog/ch-1.p b/challenge-195/adam-russell/prolog/ch-1.p new file mode 100644 index 0000000000..fbafd20a40 --- /dev/null +++ b/challenge-195/adam-russell/prolog/ch-1.p @@ -0,0 +1,13 @@ +code2digit(C, D):- + number_codes(D, [C]). + +special(N):- + number_codes(N, NCodes), + maplist(code2digit, NCodes, Digits), + sort(Digits, DigitsSorted), + length(Digits, NumberDigits), + length(DigitsSorted, NumberDigits). + +number_special(N, NumberSpecial):- + findall(I, (between(1, N, I), special(I)), Specials), + length(Specials, NumberSpecial). diff --git a/challenge-195/adam-russell/prolog/ch-2.p b/challenge-195/adam-russell/prolog/ch-2.p new file mode 100644 index 0000000000..8af05aeacc --- /dev/null +++ b/challenge-195/adam-russell/prolog/ch-2.p @@ -0,0 +1,40 @@ +even(N, Even):- + (0 is mod(N, 2), Even = N); + (Even = nil). + +frequency(ListNumbers, N, Frequency):- + delete(ListNumbers, N, ListDeleted), + length(ListNumbers, L), + length(ListDeleted, LD), + Frequency is L - LD. + +most_frequent_even(ListNumbers, MostFrequentEven):- + maplist(even, ListNumbers, EN), + delete(EN, nil, EvenNumbers), + length(EvenNumbers, LengthEvens), + LengthEvens > 0, + maplist(frequency(ListNumbers), EvenNumbers, Frequencies), + msort(Frequencies, FS), + reverse(FS, FrequenciesSorted), + (( + nth(1, FrequenciesSorted, F1), + nth(2, FrequenciesSorted, F2), + F1 \== F2, + nth(N, Frequencies, F1), + nth(N, EvenNumbers, MostFrequentEven) + ); + ( + nth(1, FrequenciesSorted, F1), + nth(2, FrequenciesSorted, F2), + F1 == F2, + nth(N1, Frequencies, F1), + nth(N2, Frequencies, F2), + nth(N1, EvenNumbers, MostFrequentEven1), + nth(N2, EvenNumbers, MostFrequentEven2), + ((MostFrequentEven1 < MostFrequentEven2, MostFrequentEven = MostFrequentEven1); + (MostFrequentEven1 > MostFrequentEven2, MostFrequentEven = MostFrequentEven2)) + ) + ), !. + +most_frequent_even(_, MostFrequentEven):- + MostFrequentEven = -1, !. -- cgit From c6289768c1e3790266ded53e7777ff2fe391699e Mon Sep 17 00:00:00 2001 From: Adam Russell Date: Sat, 17 Dec 2022 16:03:06 -0500 Subject: updated part 2 solution --- challenge-195/adam-russell/prolog/ch-2.p | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/challenge-195/adam-russell/prolog/ch-2.p b/challenge-195/adam-russell/prolog/ch-2.p index 8af05aeacc..c56d00742b 100644 --- a/challenge-195/adam-russell/prolog/ch-2.p +++ b/challenge-195/adam-russell/prolog/ch-2.p @@ -27,12 +27,9 @@ most_frequent_even(ListNumbers, MostFrequentEven):- nth(1, FrequenciesSorted, F1), nth(2, FrequenciesSorted, F2), F1 == F2, - nth(N1, Frequencies, F1), - nth(N2, Frequencies, F2), - nth(N1, EvenNumbers, MostFrequentEven1), - nth(N2, EvenNumbers, MostFrequentEven2), - ((MostFrequentEven1 < MostFrequentEven2, MostFrequentEven = MostFrequentEven1); - (MostFrequentEven1 > MostFrequentEven2, MostFrequentEven = MostFrequentEven2)) + findall(MFE, (member(FX, FrequenciesSorted), FX == F1, nth(N, Frequencies, FX), nth(N, EvenNumbers, MFE)), MostFrequentEvens), + sort(MostFrequentEvens, MostFrequentEvensSorted), + nth(1, MostFrequentEvensSorted, MostFrequentEven) ) ), !. -- cgit From 2c8adb34a908dbfd5140d54fa8ae108bb4823e8f Mon Sep 17 00:00:00 2001 From: Adam Russell Date: Sun, 18 Dec 2022 00:38:42 -0500 Subject: added blog links --- challenge-195/adam-russell/blog.txt | 1 + challenge-195/adam-russell/blog1.txt | 1 + challenge-195/adam-russell/perl/ch-2.pl | 3 ++- 3 files changed, 4 insertions(+), 1 deletion(-) create mode 100644 challenge-195/adam-russell/blog.txt create mode 100644 challenge-195/adam-russell/blog1.txt diff --git a/challenge-195/adam-russell/blog.txt b/challenge-195/adam-russell/blog.txt new file mode 100644 index 0000000000..abccf585d0 --- /dev/null +++ b/challenge-195/adam-russell/blog.txt @@ -0,0 +1 @@ +http://www.rabbitfarm.com/cgi-bin/blosxom/perl/2022/12/18 diff --git a/challenge-195/adam-russell/blog1.txt b/challenge-195/adam-russell/blog1.txt new file mode 100644 index 0000000000..e92a1b378e --- /dev/null +++ b/challenge-195/adam-russell/blog1.txt @@ -0,0 +1 @@ +http://www.rabbitfarm.com/cgi-bin/blosxom/prolog/2022/12/18 diff --git a/challenge-195/adam-russell/perl/ch-2.pl b/challenge-195/adam-russell/perl/ch-2.pl index 3a543e2efe..9f56affde1 100644 --- a/challenge-195/adam-russell/perl/ch-2.pl +++ b/challenge-195/adam-russell/perl/ch-2.pl @@ -14,7 +14,8 @@ sub most_frequent_even{ map { $frequencies{$_}++ } @list; my @sorted = sort { $frequencies{$b} <=> $frequencies{$a} } @list; return $sorted[0] if $frequencies{$sorted[0]} != $frequencies{$sorted[1]}; - return (sort { $a <=> $b } @sorted)[0]; + my @tied = grep { $frequencies{$_} == $frequencies{$sorted[0]} } @list; + return (sort { $a <=> $b } @tied)[0]; } MAIN:{ -- cgit