aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--challenge-235/demerphq/README1
-rw-r--r--challenge-235/demerphq/perl/ch-1.pl44
-rw-r--r--challenge-235/demerphq/perl/ch-2.pl28
3 files changed, 73 insertions, 0 deletions
diff --git a/challenge-235/demerphq/README b/challenge-235/demerphq/README
new file mode 100644
index 0000000000..99efaa8cc6
--- /dev/null
+++ b/challenge-235/demerphq/README
@@ -0,0 +1 @@
+Solution by Yves Orton.
diff --git a/challenge-235/demerphq/perl/ch-1.pl b/challenge-235/demerphq/perl/ch-1.pl
new file mode 100644
index 0000000000..b02f2e98c6
--- /dev/null
+++ b/challenge-235/demerphq/perl/ch-1.pl
@@ -0,0 +1,44 @@
+use strict;
+use warnings;
+use Test::More;
+
+sub check_array {
+ my ($array) = @_;
+
+ my $out_of_order = 0;
+ my $last = $array->[0];
+
+ for (my $i = 1; $i <= $#$array; $i++) {
+ # there are two cases (the last element is redundant here):
+ # A: 3, 10, 4, 5 -> drop the 10
+ # B: 3, 10, 1, 11 -> drop the 1
+ my $this = $array->[$i];
+ if ($last > $this) {
+ $out_of_order++ and return 0;
+ if ($i > 1 and $array->[$i-2] > $array->[$i]) {
+ $this = $array->[$i-1];
+ }
+ }
+ $last = $this;
+ }
+ return 1;
+}
+
+foreach my $test (
+ [ 1, [ 0, 2, 9, 4, 10, 11 ] ],
+ [ 1, [ 0, 2, 9, 4, 6 ] ],
+ [ 0, [ 5, 1, 3, 2] ],
+ [ 1, [ 2, 2, 3 ] ],
+ [ 1, [ 1, 2, 3 ] ],
+ [ 0, [ 1, 2, 3, 2, 1 ] ],
+ [ 0, [ 1, 2, 3, 3, 3, 1, 2, 3 ] ],
+ [ 0, [ 1, 2, 3, 1, 2, 3 ] ],
+ [ 0, [ 1, 2, 3, 2, 3, 2 ] ],
+ [ 1, [ 1, 2, 3, 10, 1, 11, 12, 13 ] ],
+ [ 0, [ 1, 2, 3, 10, 1, 11, 4, 13 ] ],
+) {
+ my ($want, $array)= @$test;
+ my $got = check_array($array) ? 1 : 0;
+ is($got, $want, "Test @$array: want $want");
+}
+done_testing();
diff --git a/challenge-235/demerphq/perl/ch-2.pl b/challenge-235/demerphq/perl/ch-2.pl
new file mode 100644
index 0000000000..69534f5189
--- /dev/null
+++ b/challenge-235/demerphq/perl/ch-2.pl
@@ -0,0 +1,28 @@
+use strict;
+use warnings;
+use Test::More;
+
+sub dupe_zero {
+ my ($array) = @_;
+ my @ret;
+ foreach my $n (@$array) {
+ last if ( push(@ret, $n) == @$array )
+ or ( !$n and push(@ret, $n) == @$array );
+ }
+ return \@ret;
+}
+
+foreach my $test (
+ [ [ 0 ], [ 0 ] ],
+ [ [ 1 ], [ 1 ] ],
+ [ [ 0, 0, ], [ 0, 0 ] ],
+ [ [ 1, 1, ], [ 1, 1 ] ],
+ [ [ 0, 0, 1 ], [ 0, 0, 0] ],
+ [ [ 1, 0, 2, 3, 0, 4, 5, 0 ], [ 1, 0, 0, 2, 3, 0, 0, 4 ] ],
+ [ [ 0, 3, 0, 4, 5 ], [ 0, 0, 3, 0, 0 ] ],
+) {
+ my ($input, $want) = @$test;
+ my $got = dupe_zero($input);
+ is("@$got", "@$want", "Test for '@$input'");
+}
+done_testing();