aboutsummaryrefslogtreecommitdiff
path: root/challenge-115
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2021-06-06 23:13:11 +0100
committerGitHub <noreply@github.com>2021-06-06 23:13:11 +0100
commit7ad80e3d84e295ab9839f403530e4f45f46d373d (patch)
tree64ed5814434551182a77e25a8aecb85bf57f47ea /challenge-115
parentb1a68f99f0d6317697e64d99411b9de4cac4d139 (diff)
parentd0162639c9cc79082162965eb92bae354d801f17 (diff)
downloadperlweeklychallenge-club-7ad80e3d84e295ab9839f403530e4f45f46d373d.tar.gz
perlweeklychallenge-club-7ad80e3d84e295ab9839f403530e4f45f46d373d.tar.bz2
perlweeklychallenge-club-7ad80e3d84e295ab9839f403530e4f45f46d373d.zip
Merge pull request #4206 from E7-87-83/newt
week 115
Diffstat (limited to 'challenge-115')
-rw-r--r--challenge-115/cheok-yin-fung/blog.txt1
-rw-r--r--challenge-115/cheok-yin-fung/perl/ch-1.pl80
-rw-r--r--challenge-115/cheok-yin-fung/perl/ch-2.pl36
3 files changed, 117 insertions, 0 deletions
diff --git a/challenge-115/cheok-yin-fung/blog.txt b/challenge-115/cheok-yin-fung/blog.txt
new file mode 100644
index 0000000000..3cc4d8bb0f
--- /dev/null
+++ b/challenge-115/cheok-yin-fung/blog.txt
@@ -0,0 +1 @@
+file:///home/e78783/E7-87-83.github.io/coding/challenge_115.html
diff --git a/challenge-115/cheok-yin-fung/perl/ch-1.pl b/challenge-115/cheok-yin-fung/perl/ch-1.pl
new file mode 100644
index 0000000000..299aee2eaf
--- /dev/null
+++ b/challenge-115/cheok-yin-fung/perl/ch-1.pl
@@ -0,0 +1,80 @@
+#!/usr/bin/perl
+# The Weekly Challenge 115
+# Task 1 String Chain
+# Usage: ch-1.pl @S
+use strict;
+use warnings;
+
+my @S = @ARGV;
+@S = ("ade", "cbd", "fgh") if !@S;
+
+
+
+if (consistent_degrees(@S) && is_connected(@S)) {
+ print 1;
+}
+else {
+ print 0;
+}
+print "\n";
+
+
+
+sub consistent_degrees {
+ my @edges = @_;
+ my %i_vertex;
+ my %o_vertex;
+ for my $str (@edges) {
+ my $head = substr $str, 0, 1;
+ my $tail = substr $str, -1, 1;
+ push $i_vertex{$tail}->@*, $head;
+ push $o_vertex{$head}->@*, $tail;
+ }
+
+ for my $letter (keys %i_vertex) {
+ if (!$o_vertex{$letter}) {
+ return 0;
+ }
+ if (scalar @{$i_vertex{$letter}}
+ != scalar @{$o_vertex{$letter}}) {
+ return 0;
+ }
+ }
+ return 1;
+}
+
+
+sub is_connected {
+ my @edges = @_;
+ my %collected;
+ my %vertex_neigh;
+ for my $str (@edges) {
+ my $head = substr $str, 0, 1;
+ my $tail = substr $str, -1, 1;
+ $collected{$head} = -1;
+ $collected{$tail} = -1;
+ push $vertex_neigh{$head}->@*, $tail;
+ push $vertex_neigh{$tail}->@*, $head;
+ }
+ # depth-first search
+ my @stack = substr($edges[0], 0, 1);
+ while (scalar @stack != 0) {
+ my $cur = pop @stack;
+ if ($collected{$cur} == 1) {
+ next;
+ }
+ else {
+ for my $neigh ($vertex_neigh{$cur}->@*) {
+ push @stack, $neigh if $collected{$neigh} == -1;
+ }
+ $collected{$cur} = 1;
+ }
+ }
+ #check connectedness
+ for my $letter (keys %collected) {
+ if ($collected{$letter} == -1) {
+ return 0;
+ }
+ }
+ return 1;
+}
diff --git a/challenge-115/cheok-yin-fung/perl/ch-2.pl b/challenge-115/cheok-yin-fung/perl/ch-2.pl
new file mode 100644
index 0000000000..66d442e9a9
--- /dev/null
+++ b/challenge-115/cheok-yin-fung/perl/ch-2.pl
@@ -0,0 +1,36 @@
+#!/usr/bin/perl
+# The Weekly Challenge 115
+# Task 2 Largest Multiple
+# Usage: ch-2.pl [digits from 0-9]
+use strict;
+use warnings;
+
+my @digits = @ARGV;
+
+if (!@digits) {@digits = (1,0,4,8,5,7,6);}
+
+for (@digits) {
+ die "Please input digits seperated by spaces.\n",
+ "Usage: ch-2.pl [digits from 0-9]\n"
+ unless $_ =~ /^[0-9]$/;
+}
+
+
+@digits = sort {$b <=> $a} @digits;
+
+my $least_sig_fig = -1;
+for (reverse 0..$#digits) {
+ if ($digits[$_] =~ /[02468]/ ) {
+ $least_sig_fig = splice(@digits, $_, 1);
+ push @digits, $least_sig_fig;
+ last;
+ }
+}
+if ($least_sig_fig == -1) {
+ print "NULL", "\n";
+}
+else {
+ print join "", @digits;
+ print "\n";
+}
+