aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlavio Poletti <flavio@polettix.it>2022-12-07 07:30:40 +0100
committerFlavio Poletti <flavio@polettix.it>2022-12-07 07:30:40 +0100
commitd42edfdc9cf33f243dbac7ad257a865d96464445 (patch)
tree430bd989c98b45ec93587628fd4f0d358ceb4f98
parent05ed7c67138bb2909dc1eb4fcb2a7c46bb087670 (diff)
downloadperlweeklychallenge-club-d42edfdc9cf33f243dbac7ad257a865d96464445.tar.gz
perlweeklychallenge-club-d42edfdc9cf33f243dbac7ad257a865d96464445.tar.bz2
perlweeklychallenge-club-d42edfdc9cf33f243dbac7ad257a865d96464445.zip
Add polettix's solution to challenge-194
-rw-r--r--challenge-194/polettix/blog.txt1
-rw-r--r--challenge-194/polettix/blog1.txt1
-rw-r--r--challenge-194/polettix/perl/ch-1.pl16
-rw-r--r--challenge-194/polettix/perl/ch-2.pl19
-rw-r--r--challenge-194/polettix/raku/ch-1.raku14
-rw-r--r--challenge-194/polettix/raku/ch-2.raku17
6 files changed, 68 insertions, 0 deletions
diff --git a/challenge-194/polettix/blog.txt b/challenge-194/polettix/blog.txt
new file mode 100644
index 0000000000..c022d7aff5
--- /dev/null
+++ b/challenge-194/polettix/blog.txt
@@ -0,0 +1 @@
+https://etoobusy.polettix.it/2022/12/08/pwc194-digital-clock/
diff --git a/challenge-194/polettix/blog1.txt b/challenge-194/polettix/blog1.txt
new file mode 100644
index 0000000000..a5ef682975
--- /dev/null
+++ b/challenge-194/polettix/blog1.txt
@@ -0,0 +1 @@
+https://etoobusy.polettix.it/2022/12/09/pwc194-frequency-equalizer/
diff --git a/challenge-194/polettix/perl/ch-1.pl b/challenge-194/polettix/perl/ch-1.pl
new file mode 100644
index 0000000000..02dc3ba8cf
--- /dev/null
+++ b/challenge-194/polettix/perl/ch-1.pl
@@ -0,0 +1,16 @@
+#!/usr/bin/env perl
+use v5.24;
+use warnings;
+use experimental 'signatures';
+no warnings 'experimental::signatures';
+
+@ARGV = qw< ?5:00 ?3:00 1?:00 2?:00 12:?5 12:5? > unless @ARGV;
+say "$_ -> ", digital_clock($_) for @ARGV;
+
+sub digital_clock ($input) {
+ my $where = index($input, '?');
+ return 9 if $where == 4;
+ return 5 if $where == 3;
+ return substr($input, 0, 1) == 2 ? 3 : 9 if $where == 1;
+ return substr($input, 1, 1) < 4 ? 2 : 1;
+}
diff --git a/challenge-194/polettix/perl/ch-2.pl b/challenge-194/polettix/perl/ch-2.pl
new file mode 100644
index 0000000000..d53359dc9b
--- /dev/null
+++ b/challenge-194/polettix/perl/ch-2.pl
@@ -0,0 +1,19 @@
+#!/usr/bin/env perl
+use v5.24;
+use warnings;
+use experimental 'signatures';
+no warnings 'experimental::signatures';
+
+@ARGV = qw< abbc xyzyyxz xzxz > unless @ARGV;
+say frequency_equalizer($_) . " -> $_" for @ARGV;
+
+sub frequency_equalizer ($string) {
+ my (%first_counter, %second_counter);
+ ++$first_counter{substr($string, $_, 1)} for 0 .. length($string) - 1;
+ ++$second_counter{$_} for values %first_counter;
+ return 0 if scalar(keys %second_counter) != 2;
+ my ($k1, $v1, $k2, $v2) = %second_counter;
+ ($k1, $v1, $k2, $v2) = ($k2, $v2, $k1, $v1) if $k1 > $k2;
+ return 1 if $v2 == 1 && $k2 - $k1 == 1;
+ return 0;
+}
diff --git a/challenge-194/polettix/raku/ch-1.raku b/challenge-194/polettix/raku/ch-1.raku
new file mode 100644
index 0000000000..d0fc075d7f
--- /dev/null
+++ b/challenge-194/polettix/raku/ch-1.raku
@@ -0,0 +1,14 @@
+#!/usr/bin/env raku
+use v6;
+sub MAIN (*@ARGV) {
+ @ARGV = < ?5:00 ?3:00 1?:00 2?:00 12:?5 12:5? > unless @ARGV;
+ put "$_ -> {digital-clock($_)}" for @ARGV;
+}
+
+sub digital-clock ($input) {
+ my $where = $input.index('?');
+ return 9 if $where == 4;
+ return 5 if $where == 3;
+ return $input.substr(0, 1) == 2 ?? 3 !! 9 if $where == 1;
+ return $input.substr(1, 1) < 4 ?? 2 !! 1;
+}
diff --git a/challenge-194/polettix/raku/ch-2.raku b/challenge-194/polettix/raku/ch-2.raku
new file mode 100644
index 0000000000..5dbf573bf4
--- /dev/null
+++ b/challenge-194/polettix/raku/ch-2.raku
@@ -0,0 +1,17 @@
+#!/usr/bin/env raku
+use v6;
+sub MAIN (*@ARGV) {
+ @ARGV = < abbc xyzyyxz xzxz > unless @ARGV;
+ put "{frequency-equalizer($_)} -> $_" for @ARGV;
+}
+
+sub frequency-equalizer ($string) {
+ my (%first_counter, %second_counter);
+ ++%first_counter{$string.substr($_, 1)} for ^$string.chars;
+ ++%second_counter{$_} for %first_counter.values;
+ return 0 if %second_counter.elems != 2;
+ my ($k1, $v1, $k2, $v2) = %second_counter.kv;
+ ($k1, $v1, $k2, $v2) = $k2, $v2, $k1, $v1 if $k1 > $k2;
+ return 1 if $v2 == 1 && $k2 - $k1 == 1;
+ return 0;
+}