From 336bfe8561edddb6f52db35d5065d0f99310207d Mon Sep 17 00:00:00 2001 From: KjetilS Date: Wed, 19 Nov 2025 04:25:51 +0100 Subject: https://theweeklychallenge.org/blog/perl-weekly-challenge-348/ --- challenge-348/kjetillll/perl/ch-1.pl | 33 +++++++++++++++++++++++++++++++++ challenge-348/kjetillll/perl/ch-2.pl | 15 +++++++++++++++ 2 files changed, 48 insertions(+) create mode 100644 challenge-348/kjetillll/perl/ch-1.pl create mode 100644 challenge-348/kjetillll/perl/ch-2.pl diff --git a/challenge-348/kjetillll/perl/ch-1.pl b/challenge-348/kjetillll/perl/ch-1.pl new file mode 100644 index 0000000000..389d2b6dd5 --- /dev/null +++ b/challenge-348/kjetillll/perl/ch-1.pl @@ -0,0 +1,33 @@ + +sub f { shift() =~ /^(.)(.*)(.)$/ ? f( $2, map /[aeiou]/i + shift(), $1, $3) : $_[0]>0 && shift() == shift() } + +sub f_verbose { #same thing more verbose + use strict; use warnings; + my($str, $count_vowels_left, $count_vowels_right) = (@_,0,0); + + if( $str =~ s/^(.)(.*)(.)$/$2/ ){ + my($left_char, $middle_string, $right_char) = ($1,$2,$3); + return f_verbose( $middle_string, + $count_vowels_left + ( $left_char =~ /[aeiou]/i ? 1 : 0 ), + $count_vowels_right + ( $right_char =~ /[aeiou]/i ? 1 : 0 ) ) + } + else { + return $count_vowels_left > 0 && $count_vowels_left == $count_vowels_right + } +} + +use Test::More; + +ok f("textbook") == 0; +ok f("book") == 1; +ok f("AbCdEfGh") == 1; +ok f("rhythmmyth") == 0; +ok f("UmpireeAudio") == 0; + +ok f_verbose("textbook") == 0; +ok f_verbose("book") == 1; +ok f_verbose("AbCdEfGh") == 1; +ok f_verbose("rhythmmyth") == 0; +ok f_verbose("UmpireeAudio") == 0; + +done_testing; diff --git a/challenge-348/kjetillll/perl/ch-2.pl b/challenge-348/kjetillll/perl/ch-2.pl new file mode 100644 index 0000000000..434061308e --- /dev/null +++ b/challenge-348/kjetillll/perl/ch-2.pl @@ -0,0 +1,15 @@ +sub f { + my($source, $target, $count) = map { /(\d+):(\d+)/ ? $1 * 60 + $2 : $_ } @_, 0; + $source > $target ? f( $source, $target + 24 * 60, 0 ) : + $source <= $target - 60 ? f( $source, $target - 60, $count + 1 ) : + $source <= $target - 15 ? f( $source, $target - 15, $count + 1 ) : + $source <= $target - 5 ? f( $source, $target - 5, $count + 1 ) : + $source <= $target - 1 ? f( $source, $target - 1, $count + 1 ) : + $count +} + +print f("02:30", "02:45") == 1 ? "ok\n" : "error\n"; +print f("11:55", "12:15") == 2 ? "ok\n" : "error\n"; +print f("09:00", "13:00") == 4 ? "ok\n" : "error\n"; +print f("23:45", "00:30") == 3 ? "ok\n" : "error\n"; +print f("14:20", "15:25") == 2 ? "ok\n" : "error\n"; -- cgit