aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--challenge-091/james-smith/perl/ch-1.pl21
-rw-r--r--challenge-091/james-smith/perl/ch-2.pl19
2 files changed, 40 insertions, 0 deletions
diff --git a/challenge-091/james-smith/perl/ch-1.pl b/challenge-091/james-smith/perl/ch-1.pl
new file mode 100644
index 0000000000..bdce7b7b2f
--- /dev/null
+++ b/challenge-091/james-smith/perl/ch-1.pl
@@ -0,0 +1,21 @@
+#!/usr/local/bin/perl
+
+use strict;
+
+use warnings;
+use feature qw(say);
+use Test::More;
+
+is( read_numbers( 1122234 ), 21321314 );
+is( read_numbers( 2333445 ), 12332415 );
+is( read_numbers( 12345 ), 1112131415 );
+
+done_testing();
+
+sub read_numbers {
+ return $_[0] =~ s{(
+ (\d) # Any digit [ this becomes \2 / $2 ]
+ (\2*) # Any other copies of the digit
+ )}{(length $1).$2}regex;
+}
+
diff --git a/challenge-091/james-smith/perl/ch-2.pl b/challenge-091/james-smith/perl/ch-2.pl
new file mode 100644
index 0000000000..4aa2a330c4
--- /dev/null
+++ b/challenge-091/james-smith/perl/ch-2.pl
@@ -0,0 +1,19 @@
+#!/usr/local/bin/perl
+
+use strict;
+
+use warnings;
+use feature qw(say);
+use Test::More;
+
+is( jump_game( qw(1 3 1 2) ), 1 ); ## 0 -> 1 -> 4 (escaped)
+is( jump_game( qw(2 1 1 0 2) ), 0 ); ## 0 -> 2 -> 3 (hit hole)
+
+done_testing();
+
+sub jump_game {
+ my $ptr = 0;
+ $ptr += $_[$ptr] while $ptr < @_ && $_[$ptr];
+ return $ptr < @_ ? 0 : 1;
+}
+