summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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;
+}