diff options
| -rw-r--r-- | challenge-194/alexander-pankoff/perl/ch-1.pl | 42 | ||||
| -rw-r--r-- | challenge-194/alexander-pankoff/perl/ch-2.pl | 34 |
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; +} |
