aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--challenge-194/alexander-pankoff/perl/ch-1.pl42
-rw-r--r--challenge-194/alexander-pankoff/perl/ch-2.pl34
2 files changed, 76 insertions, 0 deletions
diff --git a/challenge-194/alexander-pankoff/perl/ch-1.pl b/challenge-194/alexander-pankoff/perl/ch-1.pl
new file mode 100644
index 0000000000..ff116c9cbd
--- /dev/null
+++ b/challenge-194/alexander-pankoff/perl/ch-1.pl
@@ -0,0 +1,42 @@
+#!/usr/bin/env perl
+package challenge194::ch1;
+
+use strict;
+use warnings;
+use autodie;
+use feature qw'say state signatures';
+no warnings qw'experimental::signatures';
+
+use List::Util qw(first);
+
+use Test::More tests => 6;
+
+is( digital_clock('?5:00'), 1, "Example 1" );
+is( digital_clock('?3:00'), 2, "Example 2" );
+is( digital_clock('1?:00'), 9, "Example 3" );
+is( digital_clock('2?:00'), 3, "Example 4" );
+is( digital_clock('12:?5'), 5, "Example 5" );
+is( digital_clock('12:5?'), 9, "Example 6" );
+
+sub digital_clock ($x) {
+ my sub findMissingIndex ($s) {
+ first { substr( $s, $_, 1 ) eq '?' } 0 .. length $s;
+ }
+
+ my ( $hour, $min ) = split( ':', $x );
+ if ( defined( my $idx = findMissingIndex($hour) ) ) {
+ if ( $idx == 0 ) {
+ return 2 if substr( $hour, 1, 1 ) <= 3;
+ return 1;
+ }
+
+ return 3 if substr( $hour, 0, 1 ) == 2;
+ return 9;
+ }
+
+ if ( defined( my $idx = findMissingIndex($min) ) ) {
+ return 5 if $idx == 0;
+
+ return 9;
+ }
+}
diff --git a/challenge-194/alexander-pankoff/perl/ch-2.pl b/challenge-194/alexander-pankoff/perl/ch-2.pl
new file mode 100644
index 0000000000..7bd00ec06a
--- /dev/null
+++ b/challenge-194/alexander-pankoff/perl/ch-2.pl
@@ -0,0 +1,34 @@
+#!/usr/bin/env perl
+package challenge194::ch2;
+
+use strict;
+use warnings;
+use autodie;
+use feature qw'say state signatures';
+no warnings qw'experimental::signatures';
+
+use List::Util qw(reduce);
+
+use Test::More tests => 3;
+
+is( frequency_equalizer('abbc'), 1, "Example 1" );
+is( frequency_equalizer('xyzyyxz'), 1, "Example 2" );
+is( frequency_equalizer('xzxz'), 0, "Example 3" );
+
+sub frequency_equalizer ($x) {
+ my %frequencies;
+ $frequencies{$_}++ for split( //, $x );
+
+ my %frequency_frequencies;
+ $frequency_frequencies{$_}++ for values %frequencies;
+
+ return (
+ keys %frequency_frequencies == 2
+ && abs(
+ reduce { $a - $b }
+ keys %frequency_frequencies
+
+ ) == 1
+ && grep { $_ == 1 } values %frequency_frequencies
+ ) ? 1 : 0;
+}