diff options
author | Jesse Luehrs <doy@tozt.net> | 2012-10-25 01:58:38 -0500 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2012-10-25 01:58:38 -0500 |
commit | b186e0e2a07141a4dded86b70dd7b825e7ce0775 (patch) | |
tree | 4ffb4e3666585b10c0a778d4c68fb8ef62aa9db0 /LEXV.pl | |
parent | 96957c8c77edfbd82a6f426645d817f7334dbfb9 (diff) | |
download | rosalind-b186e0e2a07141a4dded86b70dd7b825e7ce0775.tar.gz rosalind-b186e0e2a07141a4dded86b70dd7b825e7ce0775.zip |
another solution
Diffstat (limited to 'LEXV.pl')
-rw-r--r-- | LEXV.pl | 37 |
1 files changed, 37 insertions, 0 deletions
@@ -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; +} |