aboutsummaryrefslogtreecommitdiff
path: root/challenge-197
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2023-01-01 23:23:05 +0000
committerGitHub <noreply@github.com>2023-01-01 23:23:05 +0000
commit10e934645b088f117fb43690a959066bfa060890 (patch)
tree6a03248f4f0a1894126ca06fe393712190ba602e /challenge-197
parent10f41be5f549aa9acf3c0b04ded47a7e7fef78a9 (diff)
parenta7fa549c540eaa574855271f223bb74c978c8ba5 (diff)
downloadperlweeklychallenge-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.pl25
-rw-r--r--challenge-197/adam-russell/perl/ch-2.pl30
-rw-r--r--challenge-197/adam-russell/prolog/ch-1.p16
-rw-r--r--challenge-197/adam-russell/prolog/ch-2.p14
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).