aboutsummaryrefslogtreecommitdiff
path: root/challenge-117
diff options
context:
space:
mode:
authorMohammad S Anwar <mohammad.anwar@yahoo.com>2021-06-21 00:06:16 +0100
committerMohammad S Anwar <mohammad.anwar@yahoo.com>2021-06-21 00:06:16 +0100
commit5b5e2c158c109d45f7066aad0f0484acf7de847f (patch)
treed997f866118132d989e267927234d55fcedbb8a0 /challenge-117
parent9541a3dd1ae76e964fe21e9c238d75c55d85e6bb (diff)
downloadperlweeklychallenge-club-5b5e2c158c109d45f7066aad0f0484acf7de847f.tar.gz
perlweeklychallenge-club-5b5e2c158c109d45f7066aad0f0484acf7de847f.tar.bz2
perlweeklychallenge-club-5b5e2c158c109d45f7066aad0f0484acf7de847f.zip
- Added solutions by Colin Crain.
Diffstat (limited to 'challenge-117')
-rw-r--r--challenge-117/colin-crain/perl/ch-1.pl76
-rw-r--r--challenge-117/colin-crain/perl/ch-2.pl114
-rw-r--r--challenge-117/colin-crain/raku/ch-1.raku54
-rw-r--r--challenge-117/colin-crain/raku/ch-2.raku58
4 files changed, 302 insertions, 0 deletions
diff --git a/challenge-117/colin-crain/perl/ch-1.pl b/challenge-117/colin-crain/perl/ch-1.pl
new file mode 100644
index 0000000000..c9ac472cdf
--- /dev/null
+++ b/challenge-117/colin-crain/perl/ch-1.pl
@@ -0,0 +1,76 @@
+#!/Users/colincrain/perl5/perlbrew/perls/perl-5.32.0/bin/perl
+#
+# missing-in-sequence.pl
+#
+# Missing Row
+# Submitted by: Mohammad S Anwar
+# You are given text file with rows numbered 1-15 in random order but
+# there is a catch one row in missing in the file.
+#
+# 11, Line Eleven
+# 1, Line one
+# 9, Line Nine
+# 13, Line Thirteen
+# 2, Line two
+# 6, Line Six
+# 8, Line Eight
+# 10, Line Ten
+# 7, Line Seven
+# 4, Line Four
+# 14, Line Fourteen
+# 3, Line three
+# 15, Line Fifteen
+# 5, Line Five
+#
+#
+# © 2021 colin crain
+## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ##
+
+
+
+use warnings;
+use strict;
+use utf8;
+use feature ":5.26";
+use feature qw(signatures);
+no warnings 'experimental::signatures';
+use List::Util qw( max );
+
+my %lookup = map { split /,/, $_, 2 } <>;
+
+my @missing = grep { say $_; ! exists $lookup{$_} } (1..max(keys %lookup));
+
+## output
+if (my $count = scalar @missing) {
+ say $count, ($count == 1
+ ? " line is "
+ : " lines are "), "missing:";
+ say "line $_" for @missing;
+}
+else {
+ say "all lines accounted for!";
+}
+
+
+=cut
+The Data File, 'missing.txt':
+
+11, Line Eleven
+1, Line One
+9, Line Nine
+13, Line Thirteen
+2, Line Two
+6, Line Six
+8, Line Eight
+10, Line Ten
+7, Line Seven
+14, Line Fourteen
+3, Line Three
+15, Line Fifteen
+5, Line Five
+
+The Result:
+
+2 lines are missing:
+line 4
+line 12
diff --git a/challenge-117/colin-crain/perl/ch-2.pl b/challenge-117/colin-crain/perl/ch-2.pl
new file mode 100644
index 0000000000..8de28bcc8b
--- /dev/null
+++ b/challenge-117/colin-crain/perl/ch-2.pl
@@ -0,0 +1,114 @@
+#!/Users/colincrain/perl5/perlbrew/perls/perl-5.32.0/bin/perl
+#
+# triangular-tour.pl
+#
+#
+# Find Possible Paths
+# Submitted by: E. Choroba
+# You are given size of a triangle.
+#
+# Write a script to find all possible paths from top to the bottom right
+# corner.
+#
+# In each step, we can either move horizontally to the right (H), or
+# move downwards to the left (L) or right (R).
+#
+# BONUS: Try if it can handle triangle of size 10 or 20.
+#
+# Example 1:
+# Input: $N = 2
+#
+# S
+# / \
+# / _ \
+# /\ /\
+# /__\ /__\ E
+#
+# Output: RR, LHR, LHLH, LLHH, RLH, LRH
+# Example 2:
+# Input: $N = 1
+#
+# S
+# / \
+# / _ \ E
+#
+# Output: R, LH
+#
+# method:
+#
+# verified to n=13:
+#
+# A006318 Large Schröder numbers (or large Schroeder numbers, or big
+# Schroeder numbers).
+# 1, 2, 6, 22, 90, 394, 1806, 8558, 41586, 206098, 1037718, 5293446,
+# 27297738, 142078746, 745387038, 3937603038, 20927156706, 111818026018,
+# 600318853926, 3236724317174, 17518619320890, 95149655201962,
+# 518431875418926, 2832923350929742, 15521467648875090
+#
+# tp(n) = S(n+1)
+#
+# tp(10) = 1_037_718
+# tp(20) = 17_518_619_320_890
+#
+
+#
+# © 2021 colin crain
+## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ##
+
+
+
+use warnings;
+use strict;
+use utf8;
+use feature ":5.26";
+use feature qw(signatures);
+no warnings 'experimental::signatures';
+
+my $tri_size = shift // 10;
+my $mat = [ map { ['L' x $_] } (0..$tri_size) ];
+
+for my $pos (1..$tri_size) { ## horz position in the tri
+ my @next;
+ for my $level ($pos..$tri_size) { ## tri level
+ push $next[$level]->@*, (map { $_ . 'L' } $next[$level-1]->@*)
+ if defined $next[$level-1];
+ push $next[$level]->@*, (map { $_ . 'R' } $mat->[$level-1]->@* );
+ push $next[$level]->@*, (map { $_ . 'H' } $mat->[$level]->@*)
+ }
+ $mat = \@next;
+}
+
+say "results: ", scalar $mat->[-1]->@*;;
+say $_ for $mat->[-1]->@*;
+
+
+
+=cut
+[colincrain@boris:~/Code/PWC]$ time perl triangular-tour-3.pl 10
+result:
+1037718
+
+real 0m0.916s
+user 0m0.842s
+sys 0m0.070s
+[colincrain@boris:~/Code/PWC]$ time perl triangular-tour-3.pl 11
+result:
+5293446
+
+real 0m4.694s
+user 0m4.311s
+sys 0m0.377s
+[colincrain@boris:~/Code/PWC]$ time perl triangular-tour-3.pl 12
+result:
+27297738
+
+real 0m24.150s
+user 0m22.166s
+sys 0m1.974s
+[colincrain@boris:~/Code/PWC]$ time perl triangular-tour-2.pl 13
+result:
+142078746
+
+real 6m52.523s
+user 2m42.176s
+sys 2m48.754s <-- grinding
diff --git a/challenge-117/colin-crain/raku/ch-1.raku b/challenge-117/colin-crain/raku/ch-1.raku
new file mode 100644
index 0000000000..c3b0614a1c
--- /dev/null
+++ b/challenge-117/colin-crain/raku/ch-1.raku
@@ -0,0 +1,54 @@
+#!/usr/bin/env perl6
+#
+#
+# missing-in-sequence.raku
+#
+# Missing Row
+# Submitted by: Mohammad S Anwar
+# You are given text file with rows numbered 1-15 in random order but
+# there is a catch one row in missing in the file.
+#
+# 11, Line Eleven
+# 1, Line one
+# 9, Line Nine
+# 13, Line Thirteen
+# 2, Line two
+# 6, Line Six
+# 8, Line Eight
+# 10, Line Ten
+# 7, Line Seven
+# 4, Line Four
+# 14, Line Fourteen
+# 3, Line three
+# 15, Line Fifteen
+# 5, Line Five
+#
+#
+#
+# © 2021 colin crain
+## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ##
+
+
+
+unit sub MAIN ( $file = './missing.txt' ) ;
+
+my %set = $file.IO
+ .lines
+ .map( *.comb: /\d+/, 1 )
+ .Set;
+
+my @missing = (1..%set.keys.max({$_.Int})).grep: { $_.Str ∉ %set } ;
+
+if @missing.elems -> $count {
+ say $count, ($count == 1
+ ?? " line is "
+ !! " lines are "), "missing:";
+ "line $_".say for @missing;
+}
+else {
+ say "all lines accounted for!";
+}
+
+
+
+
diff --git a/challenge-117/colin-crain/raku/ch-2.raku b/challenge-117/colin-crain/raku/ch-2.raku
new file mode 100644
index 0000000000..fc68e36c46
--- /dev/null
+++ b/challenge-117/colin-crain/raku/ch-2.raku
@@ -0,0 +1,58 @@
+#!/usr/bin/env perl6
+#
+#
+# triangular-tour.raku
+#
+# Find Possible Paths
+# Submitted by: E. Choroba
+# You are given size of a triangle.
+#
+# Write a script to find all possible paths from top to the bottom right
+# corner.
+#
+# In each step, we can either move horizontally to the right (H), or
+# move downwards to the left (L) or right (R).
+#
+# BONUS: Try if it can handle triangle of size 10 or 20.
+#
+# Example 1:
+# Input: $N = 2
+#
+# S
+# / \
+# / _ \
+# /\ /\
+# /__\ /__\ E
+#
+# Output: RR, LHR, LHLH, LLHH, RLH, LRH
+# Example 2:
+# Input: $N = 1
+#
+# S
+# / \
+# / _ \ E
+#
+# Output: R, LH
+#
+# © 2021 colin crain
+## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ##
+
+
+unit sub MAIN (Int $tri-size = 5) ;
+
+my @mat = (0..$tri-size).map({ ('L' x $_ ).Array });
+
+for 1..$tri-size -> $pos {
+ my @next;
+ for $pos..$tri-size -> $level {
+ @next[$level-1].defined &&
+ @next[$level].push: |@next[$level-1].map({ $_ ~ 'L' });
+ @next[$level].push: |@mat[$level-1].map({ $_ ~ 'R' });
+ @next[$level].push: |@mat[$level].map({ $_ ~ 'H' });
+ }
+ @mat = @next;
+}
+
+say "results: ", @mat[*-1].elems;;
+.say for |@mat[*-1];
+