diff options
| -rwxr-xr-x | challenge-284/nelo-tovar/bash/ch-1.sh | 44 | ||||
| -rwxr-xr-x | challenge-284/nelo-tovar/bash/ch-2.sh | 57 | ||||
| -rw-r--r-- | challenge-284/nelo-tovar/perl/ch-1.pl | 40 | ||||
| -rw-r--r-- | challenge-284/nelo-tovar/perl/ch-2.pl | 46 |
4 files changed, 187 insertions, 0 deletions
diff --git a/challenge-284/nelo-tovar/bash/ch-1.sh b/challenge-284/nelo-tovar/bash/ch-1.sh new file mode 100755 index 0000000000..df67644114 --- /dev/null +++ b/challenge-284/nelo-tovar/bash/ch-1.sh @@ -0,0 +1,44 @@ +#!/usr/bin/env bash +# +# The Weekly Challenge 284 - By Nelo Tovar +# +# https://theweeklychallenge.org/blog/perl-weekly-challenge-284/ +# +# Task 1 - Lucky Integer + +function frequency() { + local array=("$@") + declare -A local frequency + + for i in ${array[@]}; do + temp=${frequency[$i]} + ((temp++)) + frequency[$i]=$temp + done + + echo "${frequency[@]@K}" +} + +function lucky_integer() { + local nums=("$@") + local lucky_integer=-1 + declare -A local frequencies="($(frequency "${nums[@]}"))" + + for key in ${!frequencies[@]}; do + if [ ${frequencies[$key]} -eq $key ] && [ $key -gt $lucky_integer ]; then + lucky_integer=$key + fi + done + + echo $lucky_integer +} + +examples=('2 2 3 4' '1 2 2 3 3 3' '1 1 1 3') + +for e in ${!examples[@]}; do + li=($(lucky_integer "${examples[$e]}")) + echo "Input : nums = (${examples[$e]})" + echo "Output : $li" + echo "" +done + diff --git a/challenge-284/nelo-tovar/bash/ch-2.sh b/challenge-284/nelo-tovar/bash/ch-2.sh new file mode 100755 index 0000000000..272225b74d --- /dev/null +++ b/challenge-284/nelo-tovar/bash/ch-2.sh @@ -0,0 +1,57 @@ +#!/usr/bin/env bash +# +# The Weekly Challenge 284 - By Nelo Tovar +# +# https://theweeklychallenge.org/blog/perl-weekly-challenge-284/ +# +# Task 2 - Relative Sort + +function frequency() { + local array=("$@") + declare -A local frequency + + for i in ${array[@]}; do + temp=${frequency[$i]} + ((temp++)) + frequency[$i]=$temp + done + + echo "${frequency[@]@K}" +} + +function relative_sort() { + local list1=("$1") + local list2=("$2") + declare -A local frequencies="($(frequency "${list1[@]}"))" + local sorted=() + + for n in ${list2[@]}; do + if [[ -n "${frequencies[$n]}" ]]; then + for i in $(seq 1 ${frequencies[$n]}); do + sorted+=($n) + done + unset frequencies[$n] + fi + done + + IFS=$'\n' r=($(sort -n <<<"${!frequencies[*]}")) + + for n in ${r[@]}; do + for i in $(seq 1 ${frequencies[$n]}); do + sorted+=($n) + done + done + + echo ${sorted[@]} +} + +examples1=('2 3 9 3 1 4 6 7 2 8 5' '3 3 4 6 2 4 2 1 3' '3 0 5 0 2 1 4 1 1') +examples2=('2 1 4 3 5 6' '1 3 2' '1 0 3 2' ) + +for e in "${!examples1[@]}"; do + rs=$(relative_sort "${examples1[$e]}" "${examples2[$e]}") + echo "Input : list1 = (${examples1[$e]})" + echo " list2 = (${examples2[$e]})" + echo -e "Output : ${rs[@]}\n" +done + diff --git a/challenge-284/nelo-tovar/perl/ch-1.pl b/challenge-284/nelo-tovar/perl/ch-1.pl new file mode 100644 index 0000000000..2675a9f8d9 --- /dev/null +++ b/challenge-284/nelo-tovar/perl/ch-1.pl @@ -0,0 +1,40 @@ +#!/usr/bin/env perl + +# The Weekly Challenge 284 - By Nelo Tovar +# +# https://theweeklychallenge.org/blog/perl-weekly-challenge-284/ +# +# Task 1 - Lucky Integer +# + +use strict; +use warnings; +use v5.28; +use List::MoreUtils qw(frequency); +use Data::Dump qw(dump); + +my @examples = ( + [ 2, 2, 3, 4 ], + [ 1, 2, 2, 3, 3, 3 ], + [ 1, 1, 1, 3 ], +); + +sub lucky_integer { + my $nums = shift; + my %frequencies = frequency @$nums; + my $lucky_integer = -1; + + foreach my $key (keys %frequencies) { + $lucky_integer = $frequencies{$key} if ( ($frequencies{$key} == $key) and ($key > $lucky_integer )); + } + + return $lucky_integer +} + +for my $elements (@examples) { + my $li = lucky_integer $elements; + + say 'Input : @ints = ', dump(@$elements); + say 'Output : ', $li; + say ' '; +} diff --git a/challenge-284/nelo-tovar/perl/ch-2.pl b/challenge-284/nelo-tovar/perl/ch-2.pl new file mode 100644 index 0000000000..ac83af3003 --- /dev/null +++ b/challenge-284/nelo-tovar/perl/ch-2.pl @@ -0,0 +1,46 @@ +#!/usr/bin/env perl + +# The Weekly Challenge 284 - By Nelo Tovar +# +# https://theweeklychallenge.org/blog/perl-weekly-challenge-284/ +# +# Task 2 - Relative Sort +# + +use strict; +use warnings; +use v5.28; +use List::Util qw (min max); +use Algorithm::Combinatorics qw(combinations); +use Data::Dump qw(dump); + +my @examples = ( + [ [2, 3, 9, 3, 1, 4, 6, 7, 2, 8, 5], [2, 1, 4, 3, 5, 6] ], + [ [3, 3, 4, 6, 2, 4, 2, 1, 3], [1, 3, 2] ], + [ [3, 0, 5, 0, 2, 1, 4, 1, 1], [1, 0, 3, 2] ], +); + +sub relative_sort { + my $e = shift; + my @list1 = $e->[0]->@*; + my @list2 = $e->[1]->@*; + my @sorted; + + for my $n (@list2) { + push @sorted, grep { $_ == $n } @list1; + @list1 = grep { $_ != $n } @list1; + } + + push @sorted, sort @list1; + + return \@sorted +} + +for my $elements (@examples) { + my $rs = relative_sort $elements; + + say 'Input : @list1 = ', dump($elements->[0]); + say ' @list2 = ', dump($elements->[1]); + say 'Output : ', dump($rs); + say ' '; +} |
