From b8772e3e6d598bb9b50c2be200c5531dee606fe3 Mon Sep 17 00:00:00 2001 From: Luis Mochan Date: Mon, 29 Mar 2021 13:54:40 -0600 Subject: Add solutions to PWC 106 --- challenge-106/wlmb/blog.txt | 1 + challenge-106/wlmb/perl/ch-1.pl | 14 ++++++++++++++ challenge-106/wlmb/perl/ch-2.pl | 30 ++++++++++++++++++++++++++++++ 3 files changed, 45 insertions(+) create mode 100644 challenge-106/wlmb/blog.txt create mode 100755 challenge-106/wlmb/perl/ch-1.pl create mode 100755 challenge-106/wlmb/perl/ch-2.pl diff --git a/challenge-106/wlmb/blog.txt b/challenge-106/wlmb/blog.txt new file mode 100644 index 0000000000..51ec92f47a --- /dev/null +++ b/challenge-106/wlmb/blog.txt @@ -0,0 +1 @@ +https://wlmb.github.io/2021/03/29/PWC106/ diff --git a/challenge-106/wlmb/perl/ch-1.pl b/challenge-106/wlmb/perl/ch-1.pl new file mode 100755 index 0000000000..010d04e9a4 --- /dev/null +++ b/challenge-106/wlmb/perl/ch-1.pl @@ -0,0 +1,14 @@ +#!/usr/bin/env perl +# Perl weekly challenge 106 +# Task 1: Maximum gap +# +# See https://wlmb.github.io/2021/03/29/PWC106/#task-1-maximum-gap + +use strict; +use warnings; +use v5.12; +use List::Util qw(reduce); + +my @sorted=sort {$a<=>$b} @ARGV; +say +(reduce {$b>$a?$b:$a} map {$sorted[$_+1]-$sorted[$_]} 0..$#sorted-1)//0, + join ' ', '<-(', @ARGV, ')', diff --git a/challenge-106/wlmb/perl/ch-2.pl b/challenge-106/wlmb/perl/ch-2.pl new file mode 100755 index 0000000000..d87e71816c --- /dev/null +++ b/challenge-106/wlmb/perl/ch-2.pl @@ -0,0 +1,30 @@ +#!/usr/bin/env perl +# Perl weekly challenge 106 +# Task 2: Decimal String +# +# See https://wlmb.github.io/2021/03/29/PWC106/#task-2-decimal-string +use strict; +use warnings; +use v5.12; +use integer; +use List::Util qw(all); +use POSIX qw(floor); + +my ($numerator, $denominator)= @ARGV; +die "Usage: ./ch-2.pl numerator denominator" + unless defined $numerator and defined $denominator; +# I assume positive integer numbers. +my $integer=$numerator/$denominator; +my $rest=$numerator%$denominator; +my %seen; +my $start=0; +my @digits; +while($rest && !defined $seen{$rest}){ + $seen{$rest}=$start++; + push @digits, (10*$rest)/$denominator; + $rest=(10*$rest)%$denominator; +} +$seen{0}=$start; +my $result=join '', "$integer.", @digits[0..$seen{$rest}-1]; +$result.=join '', '(', @digits[$seen{$rest}..$#digits], ')' if $rest!=0; +say "$numerator/$denominator=$result"; -- cgit