aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2022-12-18 07:50:59 +0000
committerGitHub <noreply@github.com>2022-12-18 07:50:59 +0000
commit01f5c76eadca487d157a8fff2c19a0918a07e3d1 (patch)
treee294f3c3e25e7854a24c2a0db8bfc0041a94208b
parent30650e954b59aed9882fa49834638ea94e434658 (diff)
parent2c8adb34a908dbfd5140d54fa8ae108bb4823e8f (diff)
downloadperlweeklychallenge-club-01f5c76eadca487d157a8fff2c19a0918a07e3d1.tar.gz
perlweeklychallenge-club-01f5c76eadca487d157a8fff2c19a0918a07e3d1.tar.bz2
perlweeklychallenge-club-01f5c76eadca487d157a8fff2c19a0918a07e3d1.zip
Merge pull request #7264 from adamcrussell/challenge-195
Challenge 195
-rw-r--r--challenge-195/adam-russell/blog.txt1
-rw-r--r--challenge-195/adam-russell/blog1.txt1
-rw-r--r--challenge-195/adam-russell/perl/ch-1.pl18
-rw-r--r--challenge-195/adam-russell/perl/ch-2.pl29
-rw-r--r--challenge-195/adam-russell/prolog/ch-1.p13
-rw-r--r--challenge-195/adam-russell/prolog/ch-2.p37
6 files changed, 99 insertions, 0 deletions
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-1.pl b/challenge-195/adam-russell/perl/ch-1.pl
new file mode 100644
index 0000000000..96baab9d9d
--- /dev/null
+++ b/challenge-195/adam-russell/perl/ch-1.pl
@@ -0,0 +1,18 @@
+use v5.36;
+##
+# 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..9f56affde1
--- /dev/null
+++ b/challenge-195/adam-russell/perl/ch-2.pl
@@ -0,0 +1,29 @@
+use v5.36;
+##
+# 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 most_frequent_even{
+ 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]};
+ my @tied = grep { $frequencies{$_} == $frequencies{$sorted[0]} } @list;
+ return (sort { $a <=> $b } @tied)[0];
+}
+
+MAIN:{
+ my @list;
+ @list = (1, 1, 2, 6, 2);
+ say most_frequent_even(@list);
+ @list = (1, 3, 5, 7);
+ say most_frequent_even(@list);
+ @list = (6, 4, 4, 6, 1);
+ say most_frequent_even(@list);
+}
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..c56d00742b
--- /dev/null
+++ b/challenge-195/adam-russell/prolog/ch-2.p
@@ -0,0 +1,37 @@
+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,
+ findall(MFE, (member(FX, FrequenciesSorted), FX == F1, nth(N, Frequencies, FX), nth(N, EvenNumbers, MFE)), MostFrequentEvens),
+ sort(MostFrequentEvens, MostFrequentEvensSorted),
+ nth(1, MostFrequentEvensSorted, MostFrequentEven)
+ )
+ ), !.
+
+most_frequent_even(_, MostFrequentEven):-
+ MostFrequentEven = -1, !.