diff options
| author | E7-87-83 <fungcheokyin@gmail.com> | 2021-06-06 22:25:14 +0800 |
|---|---|---|
| committer | E7-87-83 <fungcheokyin@gmail.com> | 2021-06-06 22:25:14 +0800 |
| commit | d0162639c9cc79082162965eb92bae354d801f17 (patch) | |
| tree | 8a715fa276396b103e5bf155c263d8f7520d4704 | |
| parent | 6c06cf4efe57d194e090dffed9f1d77d8c8bbf77 (diff) | |
| download | perlweeklychallenge-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.pl | 10 | ||||
| -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 |
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"; +} + |
