aboutsummaryrefslogtreecommitdiff
path: root/ch-2.pl
diff options
context:
space:
mode:
authorFung Cheok Yin <61836418+E7-87-83@users.noreply.github.com>2020-04-26 18:34:18 +0800
committerGitHub <noreply@github.com>2020-04-26 18:34:18 +0800
commit747c6a43c248bc8a56170bfca3442afaa0acf88a (patch)
tree1c77828e88d333618a2d7c88124d3a259529dc11 /ch-2.pl
parentf26433607d167aae47039537124ae0a00607a2ba (diff)
downloadperlweeklychallenge-club-747c6a43c248bc8a56170bfca3442afaa0acf88a.tar.gz
perlweeklychallenge-club-747c6a43c248bc8a56170bfca3442afaa0acf88a.tar.bz2
perlweeklychallenge-club-747c6a43c248bc8a56170bfca3442afaa0acf88a.zip
Add files via upload
Diffstat (limited to 'ch-2.pl')
-rw-r--r--ch-2.pl49
1 files changed, 49 insertions, 0 deletions
diff --git a/ch-2.pl b/ch-2.pl
new file mode 100644
index 0000000000..2d628176b3
--- /dev/null
+++ b/ch-2.pl
@@ -0,0 +1,49 @@
+#!/usr/bin/perl
+use strict;
+use Scalar::Util qw/dualvar/;
+
+#Usage: $ ch-2.pl [list of words]
+#e.g. ch-2.pl alphabet book carpet cadmium cadeau alpine
+#output: alph , b , car , cadm , cade , alpi
+
+my @data = @ARGV;
+
+
+
+my $N = $#data + 1;
+
+my $i = 0;
+my @dualv_sorted = sort {$a cmp $b} map { dualvar($i++, $_) } @data;
+
+my @dualv_processed = ();
+
+my $k = 1;
+
+for (0..$N-2) {
+ my $tempk = $k;
+ $k = 1;
+ my $first = substr($dualv_sorted[$_], 0, $k);
+
+ while ($first eq substr( $dualv_sorted[$_+1], 0, $k)) {
+ $k++;
+ $first = substr( $dualv_sorted[$_], 0, $k);
+ }
+
+ $first = substr($dualv_sorted[$_], 0, max($tempk, $k));
+ $dualv_processed[$_] = dualvar( $dualv_sorted[$_]+0 , "$first");
+}
+
+
+ $dualv_processed[$N-1]
+ = dualvar($dualv_sorted[$N-1]+0, substr($dualv_sorted[$N-1], 0, $k));
+
+
+print join " , ", (sort {$a <=> $b} @dualv_processed);
+
+
+
+
+
+sub max {
+ return ($_[0] > $_[1] ? $_[0]: $_[1]);
+}