summaryrefslogtreecommitdiffstats
path: root/LEXV.pl
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2012-10-25 01:58:38 -0500
committerJesse Luehrs <doy@tozt.net>2012-10-25 01:58:38 -0500
commitb186e0e2a07141a4dded86b70dd7b825e7ce0775 (patch)
tree4ffb4e3666585b10c0a778d4c68fb8ef62aa9db0 /LEXV.pl
parent96957c8c77edfbd82a6f426645d817f7334dbfb9 (diff)
downloadrosalind-b186e0e2a07141a4dded86b70dd7b825e7ce0775.tar.gz
rosalind-b186e0e2a07141a4dded86b70dd7b825e7ce0775.zip
another solution
Diffstat (limited to 'LEXV.pl')
-rw-r--r--LEXV.pl37
1 files changed, 37 insertions, 0 deletions
diff --git a/LEXV.pl b/LEXV.pl
new file mode 100644
index 0000000..e19a913
--- /dev/null
+++ b/LEXV.pl
@@ -0,0 +1,37 @@
+#!/usr/bin/env perl
+use strict;
+use warnings;
+use 5.016;
+
+my @string = split ' ', scalar(<>);
+chomp(my $length = <>);
+
+unshift @string, undef;
+my $base = @string;
+
+for my $num (0..$base ** $length - 1) {
+ my @digits;
+ my $remainder = $num;
+ for my $digit (1..$length) {
+ my $exponent = $length - $digit;
+ push @digits, int($remainder / $base ** $exponent);
+ $remainder -= $digits[-1] * $base ** $exponent;
+ }
+ @digits = map { $string[$_] } @digits;
+ next unless valid(@digits);
+ say join('', grep { defined } @digits);
+}
+
+sub valid {
+ my @digits = @_;
+
+ return unless grep { defined } @digits;
+
+ my $seen_undef;
+ for my $digit (@digits) {
+ return if $seen_undef && defined($digit);
+ $seen_undef = 1 if !defined($digit);
+ }
+
+ return 1;
+}