aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorE7-87-83 <fungcheokyin@gmail.com>2021-06-06 22:25:14 +0800
committerE7-87-83 <fungcheokyin@gmail.com>2021-06-06 22:25:14 +0800
commitd0162639c9cc79082162965eb92bae354d801f17 (patch)
tree8a715fa276396b103e5bf155c263d8f7520d4704
parent6c06cf4efe57d194e090dffed9f1d77d8c8bbf77 (diff)
downloadperlweeklychallenge-club-d0162639c9cc79082162965eb92bae354d801f17.tar.gz
perlweeklychallenge-club-d0162639c9cc79082162965eb92bae354d801f17.tar.bz2
perlweeklychallenge-club-d0162639c9cc79082162965eb92bae354d801f17.zip
week 115
-rw-r--r--challenge-114/cheok-yin-fung/perl/ch-1.pl10
-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
4 files changed, 122 insertions, 5 deletions
diff --git a/challenge-114/cheok-yin-fung/perl/ch-1.pl b/challenge-114/cheok-yin-fung/perl/ch-1.pl
index d061baf685..0959087a47 100644
--- a/challenge-114/cheok-yin-fung/perl/ch-1.pl
+++ b/challenge-114/cheok-yin-fung/perl/ch-1.pl
@@ -19,10 +19,10 @@ sub higher_pal {
return (10**length $n)+1;
}
- my $suff = substr($n, 0, ((length $n) + 1)/2);
- my $p = pal_from_half( $suff, (length $n) % 2 );
+ my $_prefix = substr($n, 0, ((length $n) + 1)/2);
+ my $p = pal_from_half( $_prefixf, (length $n) % 2 );
if ($n >= $p) {
- return pal_from_half( $suff+1, (length $n) % 2 );
+ return pal_from_half( $_prefixf+1, (length $n) % 2 );
}
else {
return $p;
@@ -31,9 +31,9 @@ sub higher_pal {
sub pal_from_half {
my $s = $_[0];
- my $suf = substr( $s , 0 , (length $s) - $_[1] );
+ my $prefix = substr( $s , 0 , (length $s) - $_[1] );
my $mid = $_[1] ? substr($s, -1, 1) : "";
- my $new = join "", $suf, $mid, reverse (split //, $suf);
+ my $new = join "", $prefix, $mid, reverse (split //, $prefix);
return $new;
}
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";
+}
+