From 057fbcf38dafa21dd08e538a8085b1f09fda4f79 Mon Sep 17 00:00:00 2001 From: "Jaldhar H. Vyas" Date: Wed, 17 Feb 2021 16:47:00 -0500 Subject: Challenge 92 by Jaldhar H. Vyas --- challenge-092/jaldhar-h-vyas/blog.txt | 1 + challenge-092/jaldhar-h-vyas/perl/ch-1.pl | 53 +++++++++++++++++++++++++++++ challenge-092/jaldhar-h-vyas/perl/ch-2.pl | 45 ++++++++++++++++++++++++ challenge-092/jaldhar-h-vyas/raku/ch-1.raku | 34 ++++++++++++++++++ challenge-092/jaldhar-h-vyas/raku/ch-2.raku | 32 +++++++++++++++++ 5 files changed, 165 insertions(+) create mode 100644 challenge-092/jaldhar-h-vyas/blog.txt create mode 100755 challenge-092/jaldhar-h-vyas/perl/ch-1.pl create mode 100755 challenge-092/jaldhar-h-vyas/perl/ch-2.pl create mode 100755 challenge-092/jaldhar-h-vyas/raku/ch-1.raku create mode 100755 challenge-092/jaldhar-h-vyas/raku/ch-2.raku diff --git a/challenge-092/jaldhar-h-vyas/blog.txt b/challenge-092/jaldhar-h-vyas/blog.txt new file mode 100644 index 0000000000..bd2b694bdc --- /dev/null +++ b/challenge-092/jaldhar-h-vyas/blog.txt @@ -0,0 +1 @@ +https://www.braincells.com/perl/2021/02/perl_weekly_challenge_week_92.html diff --git a/challenge-092/jaldhar-h-vyas/perl/ch-1.pl b/challenge-092/jaldhar-h-vyas/perl/ch-1.pl new file mode 100755 index 0000000000..0d79b4e8a7 --- /dev/null +++ b/challenge-092/jaldhar-h-vyas/perl/ch-1.pl @@ -0,0 +1,53 @@ +#!/usr/bin/perl +use 5.020; +use warnings; +use English qw/ -no_match_vars /; + +sub usage { + print<<"-USAGE-"; + $PROGRAM_NAME + + a string + another string +-USAGE- + exit 0; +} + +sub isIsomorphic { + my ($A, $B) = @_; + + if (length $A != length $B) { + return undef; + } + + my @A = split //, $A; + my @B = split //, $B; + my %seen; + my %isomorphs; + + for my $i (0 .. scalar @A - 1) { + my $a = $A[$i]; + my $b = $B[$i]; + + if (exists $isomorphs{$a}) { + unless ($b eq $isomorphs{$a}) { + return undef; + } + } else { + if (!grep /$b/, keys %seen) { + $isomorphs{$a} = $b; + $seen{$b} = 1; + } else { + return undef; + } + } + } + + return 1; +} + +if (scalar @ARGV != 2) { + usage; +} + +say isIsomorphic($ARGV[0], $ARGV[1]) ? 1 : 0; diff --git a/challenge-092/jaldhar-h-vyas/perl/ch-2.pl b/challenge-092/jaldhar-h-vyas/perl/ch-2.pl new file mode 100755 index 0000000000..e1f8940cc1 --- /dev/null +++ b/challenge-092/jaldhar-h-vyas/perl/ch-2.pl @@ -0,0 +1,45 @@ +#!/usr/bin/perl +use 5.020; +use warnings; +use English qw/ -no_match_vars /; + +sub usage { + print<<"-USAGE-"; + $PROGRAM_NAME [ ...] + + [ ...] A set of sorted non-overlapping intervals enclosed in + parentheses and separated by commas. The last pair will + be merged into the rest. +-USAGE- + exit 0; +} + +sub toArray { + my ($arg) = @_; + $arg =~ /\( (\d+) , (\d+) \) /gmx; + return [$1, $2]; +} + +if (scalar @ARGV < 2) { + usage; +} + +my @intervals = sort { $a->[0] <=> $b->[0] } map { toArray($_); } @ARGV; + +my $size = scalar @intervals; +my @merged; + +for (my $i = 0; $i < $size; $i++) { + my $start = $intervals[$i]->[0]; + my $end = $intervals[$i]->[1]; + + while ($i < $size - 1 && + $end >= $intervals[$i + 1]->[0] && $end <= $intervals[$i + 1]->[1]) { + $end = $intervals[$i + 1]->[1]; + $i++; + } + + push @merged, [$start, $end]; +} + +say join ', ', map { "($_->[0],$_->[1])" } @merged; \ No newline at end of file diff --git a/challenge-092/jaldhar-h-vyas/raku/ch-1.raku b/challenge-092/jaldhar-h-vyas/raku/ch-1.raku new file mode 100755 index 0000000000..58808310a6 --- /dev/null +++ b/challenge-092/jaldhar-h-vyas/raku/ch-1.raku @@ -0,0 +1,34 @@ +#!/usr/bin/raku + +sub isIsomorphic(Str $A, Str $B) { + my SetHash of Str $seen; + my %isomorphs; + + if ($A.chars != $B.chars) { + return False; + } + + for $A.comb Z $B.comb -> ($a, $b) { + if %isomorphs{$a}:exists { + unless $b eq %isomorphs{$a} { + return False; + } + } else { + if $b ∉ $seen { + %isomorphs{$a} = $b; + $seen{$b}++; + } else { + return False; + } + } + } + + return True; +} + +sub MAIN( + Str $A, #= a string + Str $B #= another string + ) { + say isIsomorphic($A, $B) ?? 1 !! 0; +} \ No newline at end of file diff --git a/challenge-092/jaldhar-h-vyas/raku/ch-2.raku b/challenge-092/jaldhar-h-vyas/raku/ch-2.raku new file mode 100755 index 0000000000..c00dad0973 --- /dev/null +++ b/challenge-092/jaldhar-h-vyas/raku/ch-2.raku @@ -0,0 +1,32 @@ +#!/usr/bin/raku + +sub toArray(Str $arg) { + $arg ~~ m/ \( (\d+) \, (\d+) \) /; + return [$0.Int, $1.Int]; +} + +sub MAIN( + *@S #= A set of sorted non-overlapping intervals enclosed in + #= parentheses and separated by commas. The last pair will + #= be merged into the rest. + where { @S.elems > 1 } +) { + my @intervals = @S.map( { toArray($_) } ).sort({@^a[0] <=> @^b[0]}); + + my $size = @intervals.elems; + my @merged; + + loop (my $i = 0; $i < $size; $i++) { + my $start = @intervals[$i][0]; + my $end = @intervals[$i][1]; + + while $i < $size - 1 && $end ~~ @intervals[$i + 1].minmax { + $end = @intervals[$i + 1][1]; + $i++; + } + + push @merged, [$start, $end]; + } + + @merged.map({ "[$_[0],$_[1]]"; }).join(q{, }).say; +} \ No newline at end of file -- cgit