diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2021-06-06 23:13:11 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-06-06 23:13:11 +0100 |
| commit | 7ad80e3d84e295ab9839f403530e4f45f46d373d (patch) | |
| tree | 64ed5814434551182a77e25a8aecb85bf57f47ea /challenge-115 | |
| parent | b1a68f99f0d6317697e64d99411b9de4cac4d139 (diff) | |
| parent | d0162639c9cc79082162965eb92bae354d801f17 (diff) | |
| download | perlweeklychallenge-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.txt | 1 | ||||
| -rw-r--r-- | challenge-115/cheok-yin-fung/perl/ch-1.pl | 80 | ||||
| -rw-r--r-- | challenge-115/cheok-yin-fung/perl/ch-2.pl | 36 |
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"; +} + |
