diff options
| -rw-r--r-- | challenge-195/adam-russell/blog.txt | 1 | ||||
| -rw-r--r-- | challenge-195/adam-russell/blog1.txt | 1 | ||||
| -rw-r--r-- | challenge-195/adam-russell/perl/ch-1.pl | 18 | ||||
| -rw-r--r-- | challenge-195/adam-russell/perl/ch-2.pl | 29 | ||||
| -rw-r--r-- | challenge-195/adam-russell/prolog/ch-1.p | 13 | ||||
| -rw-r--r-- | challenge-195/adam-russell/prolog/ch-2.p | 37 |
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, !. |
