aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJaldhar H. Vyas <jaldhar@braincells.com>2021-02-17 16:47:00 -0500
committerJaldhar H. Vyas <jaldhar@braincells.com>2021-02-17 16:47:00 -0500
commit057fbcf38dafa21dd08e538a8085b1f09fda4f79 (patch)
tree4e147382cb74e229d74f73276b6f79cac4041d19
parentfd74e66af1b93c344ce8bc4076760538bc1d0651 (diff)
downloadperlweeklychallenge-club-057fbcf38dafa21dd08e538a8085b1f09fda4f79.tar.gz
perlweeklychallenge-club-057fbcf38dafa21dd08e538a8085b1f09fda4f79.tar.bz2
perlweeklychallenge-club-057fbcf38dafa21dd08e538a8085b1f09fda4f79.zip
Challenge 92 by Jaldhar H. Vyas
-rw-r--r--challenge-092/jaldhar-h-vyas/blog.txt1
-rwxr-xr-xchallenge-092/jaldhar-h-vyas/perl/ch-1.pl53
-rwxr-xr-xchallenge-092/jaldhar-h-vyas/perl/ch-2.pl45
-rwxr-xr-xchallenge-092/jaldhar-h-vyas/raku/ch-1.raku34
-rwxr-xr-xchallenge-092/jaldhar-h-vyas/raku/ch-2.raku32
5 files changed, 165 insertions, 0 deletions
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> <B>
+
+ <A> a string
+ <B> 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 [<S> ...]
+
+ [<S> ...] 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