diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2023-01-01 23:23:05 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-01-01 23:23:05 +0000 |
| commit | 10e934645b088f117fb43690a959066bfa060890 (patch) | |
| tree | 6a03248f4f0a1894126ca06fe393712190ba602e /challenge-197 | |
| parent | 10f41be5f549aa9acf3c0b04ded47a7e7fef78a9 (diff) | |
| parent | a7fa549c540eaa574855271f223bb74c978c8ba5 (diff) | |
| download | perlweeklychallenge-club-10e934645b088f117fb43690a959066bfa060890.tar.gz perlweeklychallenge-club-10e934645b088f117fb43690a959066bfa060890.tar.bz2 perlweeklychallenge-club-10e934645b088f117fb43690a959066bfa060890.zip | |
Merge pull request #7337 from adamcrussell/challenge-197
initial commit
Diffstat (limited to 'challenge-197')
| -rw-r--r-- | challenge-197/adam-russell/perl/ch-1.pl | 25 | ||||
| -rw-r--r-- | challenge-197/adam-russell/perl/ch-2.pl | 30 | ||||
| -rw-r--r-- | challenge-197/adam-russell/prolog/ch-1.p | 16 | ||||
| -rw-r--r-- | challenge-197/adam-russell/prolog/ch-2.p | 14 |
4 files changed, 85 insertions, 0 deletions
diff --git a/challenge-197/adam-russell/perl/ch-1.pl b/challenge-197/adam-russell/perl/ch-1.pl new file mode 100644 index 0000000000..594fbf4326 --- /dev/null +++ b/challenge-197/adam-russell/perl/ch-1.pl @@ -0,0 +1,25 @@ +use v5.36; +## +# You are given a list of integers, @list. +# Write a script to remove all zeroes, if any exist, to the end while +# maintaining the relative order of the non-zero elements. +## +sub move_zeroes{ + my @list = @_; + my @zeroes; + my @non_zeroes; + { + my $x = shift @list; + push @list, $x; + push @zeroes, $x if $x == 0; + push @non_zeroes, $x if $x != 0; + redo unless @zeroes + @non_zeroes == @list; + } + return (@non_zeroes, @zeroes); +} + +MAIN:{ + say join(q/, /, move_zeroes(1, 0, 3, 0, 0, 5)); + say join(q/, /, move_zeroes(1, 6, 4)); + say join(q/, /, move_zeroes(0, 1, 0, 2, 0)); +} diff --git a/challenge-197/adam-russell/perl/ch-2.pl b/challenge-197/adam-russell/perl/ch-2.pl new file mode 100644 index 0000000000..a947e7c54c --- /dev/null +++ b/challenge-197/adam-russell/perl/ch-2.pl @@ -0,0 +1,30 @@ +use v5.36; +## +# You are given a list of integers, @list. +# Write a script to perform a Wiggle Sort on the given list. +## +my $wgl = -1; +sub wgl{ + my($x, $y) = @_; + $wgl = $wgl * -1; + return $wgl if $x > $y; + return -1 * $wgl if $x < $y; + return 0 if $x == $y; +} + +sub wiggle_sort{ + my @list = @_; + my @wiggle; + #@list = sort {$b <=> $a} @list; + #@wiggle = sort wgl @wiggle; + for my $i (0 .. $#list){ + ($list[$i], $list[$i-1]) = ($list[$i-1], $list[$i]) if $i % 2 == 0 && $list[$i] > $list[$i-1]; + ($list[$i], $list[$i-1]) = ($list[$i-1], $list[$i]) if $i % 2 == 1 && $list[$i] < $list[$i-1]; + } + return @list; +} + +MAIN:{ + say join(q/, /, wiggle_sort(1, 5, 1, 1, 6, 4)); + say join(q/, /, wiggle_sort(1, 3, 2, 2, 3, 1)); +} diff --git a/challenge-197/adam-russell/prolog/ch-1.p b/challenge-197/adam-russell/prolog/ch-1.p new file mode 100644 index 0000000000..cd8839631c --- /dev/null +++ b/challenge-197/adam-russell/prolog/ch-1.p @@ -0,0 +1,16 @@ +zeroes --> []. +zeroes --> zero, []. +zeroes --> zero, zeroes, zero. +zeroes_end --> digit, zeroes. +zeroes_end --> digit, zeroes_end, zeroes. +digit --> [], [1]; [2]; [3]; [4]; [5]; [6]; [7]; [8]; [9]. +zero --> [0]. + +zeroes_at_end(Numbers, ZeroesEnd):- + length(Numbers, NumbersLength), + delete(Numbers, 0, NumbersZeroDeleted), + length(NumbersZeroDeleted, NumbersZeroDeletedLength), + X is NumbersLength - NumbersZeroDeletedLength, + length(End, X), + append(NumbersZeroDeleted, End, ZeroesEnd), + phrase(zeroes_end, ZeroesEnd), !. diff --git a/challenge-197/adam-russell/prolog/ch-2.p b/challenge-197/adam-russell/prolog/ch-2.p new file mode 100644 index 0000000000..ca813c99a6 --- /dev/null +++ b/challenge-197/adam-russell/prolog/ch-2.p @@ -0,0 +1,14 @@ +wiggle_sort(Unsorted, WiggleSorted):- + wiggle_sort(1, Unsorted, WiggleSorted). +wiggle_sort(I, [], []):-!. +wiggle_sort(I, [A], [X | []]):-!. +wiggle_sort(I, [A, B|T], [W, X | WiggleSorted]):- + 0 is mod(I, 2), + succ(I, J), + ((A < B, W = B, X = A); (B =< A, W = A, X = B)), + wiggle_sort(J, T, WiggleSorted). +wiggle_sort(I, [A, B|T], [W, X | WiggleSorted]):- + 1 is mod(I, 2), + succ(I, J), + ((A =< B, W = A, X = B); (B < A, W = B, X = A)), + wiggle_sort(J, T, WiggleSorted). |
