From 09c8f7cacc2a2e65608551be49508f635839f330 Mon Sep 17 00:00:00 2001 From: plis-acm Date: Mon, 18 May 2020 00:34:47 +0800 Subject: plis-acm finish challenge 060 task #1 and #2 --- challenge-060/plis-acm/.gitignore | 1 + challenge-060/plis-acm/README | 1 + challenge-060/plis-acm/perl/ch-1.pl | 24 +++++++++++++ challenge-060/plis-acm/perl/ch-2.pl | 72 +++++++++++++++++++++++++++++++++++++ 4 files changed, 98 insertions(+) create mode 100644 challenge-060/plis-acm/.gitignore create mode 100644 challenge-060/plis-acm/README create mode 100644 challenge-060/plis-acm/perl/ch-1.pl create mode 100644 challenge-060/plis-acm/perl/ch-2.pl diff --git a/challenge-060/plis-acm/.gitignore b/challenge-060/plis-acm/.gitignore new file mode 100644 index 0000000000..b25c15b81f --- /dev/null +++ b/challenge-060/plis-acm/.gitignore @@ -0,0 +1 @@ +*~ diff --git a/challenge-060/plis-acm/README b/challenge-060/plis-acm/README new file mode 100644 index 0000000000..6ebeaf2efb --- /dev/null +++ b/challenge-060/plis-acm/README @@ -0,0 +1 @@ +Solution by plis-acm. diff --git a/challenge-060/plis-acm/perl/ch-1.pl b/challenge-060/plis-acm/perl/ch-1.pl new file mode 100644 index 0000000000..fd7ae5a34a --- /dev/null +++ b/challenge-060/plis-acm/perl/ch-1.pl @@ -0,0 +1,24 @@ +#!/usr/bin/env perl + +use 5.018; +use utf8; +use warnings; +use diagnostics; + +print "Input Number: "; +chomp(my $input = ); +if ($input eq "") { + print "empty input"; +} else { + my $res; + if ($input =~ /\d+/) { + $res = "A" x ($input / 26); + $res .= chr($input % 26 - 1 + ord('A')); + } else { + for (split '', $input) { + if ($_ eq 'A') { $res += 26; } + else { $res += (ord($_) - ord('A') + 1); } + } + } + print "Output: $res\n"; +} diff --git a/challenge-060/plis-acm/perl/ch-2.pl b/challenge-060/plis-acm/perl/ch-2.pl new file mode 100644 index 0000000000..c867171582 --- /dev/null +++ b/challenge-060/plis-acm/perl/ch-2.pl @@ -0,0 +1,72 @@ +#!/usr/bin/env perl + +use 5.018; +use warnings; +use diagnostics; +use utf8; + +print "Input a number list: "; +chomp(my $line = ); +my @nums = split ' ', $line; + +print "Input X: "; +chomp(my $x = ); + +print "Input Y: "; +chomp(my $y = ); + +my @result; + +sub gen { + my ($X, $Y, @L) = @_; + my @L1; + for (@L) { + if ((length $_) < $X) { push @L1, $_; } + } + @L1 = sort @L1; + my @L2 = @L1; + for (0..$#L1) { + &rec("", $X, $Y, @L2); + my @L3 = @L2[1..$#L2]; + push(@L3, shift @L2); + @L2 = @L3; + } + + @result = sort @result; +} + +sub rec { + my ($cur, $X, $Y, @L) = @_; + + if (length($cur) != 0) { $cur += 0; } + + if (length($cur) == $X) { + if ($cur < $Y) { return $cur; } + else { return undef; } + } elsif (length($cur) > $X) { return undef; } + else { + while (my ($i, $v) = each @L) { + for (0..$X) { + my $cur1 = $cur x $_; + my $res1 = &rec($cur1 . $v, $X, $Y, @L[$i+1..$#L]); + my $res2 = &rec($cur1, $X, $Y, @L[$i+1..$#L]); + + if ($res1 && !&contains($res1, @result)) { + push @result, $res1; + } + if ($res2 && !&contains($res2, @result)) { + push @result, $res2; + } + } + } + } +} + +sub contains { + my ($x, @L) = @_; + for (@L) { if ($_ == $x ) {return 1;} } + undef; +} + +&gen($x, $y, @nums); +print "@result\n"; -- cgit