#!/usr/bin/perl use strict; use warnings; use POSIX qw(strftime); use Data::Dumper; undef $/; # slurp the entire input file in one shot my $arglen = length($ARGV[0]); die "USAGE: {priming number} {input text file name}\n" unless ($ARGV[0]); die "must supply 1-9 digit number with no zeroes as first argument\n" unless ($ARGV[0] =~ /[1-9]{$arglen}/); die "must supply file name as second argument\n" unless ($ARGV[1]); my @pattern = split //, $ARGV[0]; my $i; my $j; for ($i =0;$i<$#pattern;$i++) { for ($j = $i+1;$j<$#pattern;$j++) { die "all digits in priming number must be unique\n" unless $pattern[$i] != $pattern [$j]; } } open TXTIN, "<$ARGV[1]" or die "Can't open input text file $ARGV[1]: $!"; my $inputblob = ; close TXTIN; $inputblob =~ tr/a-zA-Z//cd; #strip out everything but letters my @plain = split //, $inputblob; my $range = int($#plain / ($#pattern+1)) + ($#plain % ($#pattern+1) ? 1 : 0); my $line1; my $line2; my $line3; # print " plain:", $inputblob, "\n", "plain:pattern:range:", $#plain, ":", $#pattern, ":", $range,"\n\n"; for (my $k= 0; $k < $range; $k++) { # every time $line1 .= $plain[($pattern[0]-1)+($k*$arglen)] unless (($pattern[0]-1)+($k*$arglen) > $#plain); if ($#pattern < 4) { $line2 .= $plain[($pattern[1]-1)+($k*$arglen)] unless (($pattern[1]-1)+($k*$arglen) > $#plain); } if ($#pattern < 3) { $line3 .= $plain[($pattern[2]-1)+($k*$arglen)] unless (($pattern[2]-1)+($k*$arglen) > $#plain); } if ($#pattern > 2) { if ($#pattern < 5) { $line3 .= $plain[($pattern[3]-1)+($k*$arglen)] unless (($pattern[3]-1)+($k*$arglen) > $#plain); } if ($#pattern < 7) { $line2 .= $plain[($pattern[2]-1)+($k*$arglen)] unless (($pattern[2]-1)+($k*$arglen) > $#plain); } } if ($#pattern > 3) { $line1 .= $plain[($pattern[1]-1)+($k*$arglen)] unless (($pattern[1]-1)+($k*$arglen) > $#plain); if ($#pattern < 7) { $line3 .= $plain[($pattern[4]-1)+($k*$arglen)] unless (($pattern[4]-1)+($k*$arglen) > $#plain); } } if ($#pattern > 4) { $line2 .= $plain[($pattern[3]-1)+($k*$arglen)] unless (($pattern[3]-1)+($k*$arglen) > $#plain); if ($#pattern < 8) { $line3 .= $plain[($pattern[5]-1)+($k*$arglen)] unless (($pattern[5]-1)+($k*$arglen) > $#plain); } } if ($#pattern > 5) { $line2 .= $plain[($pattern[4]-1)+($k*$arglen)] unless (($pattern[4]-1)+($k*$arglen) > $#plain); $line3 .= $plain[($pattern[6]-1)+($k*$arglen)] unless (($pattern[6]-1)+($k*$arglen) > $#plain); } if ($#pattern > 6) { $line1 .= $plain[($pattern[2]-1)+($k*$arglen)] unless (($pattern[2]-1)+($k*$arglen) > $#plain); $line3 .= $plain[($pattern[7]-1)+($k*$arglen)] unless (($pattern[7]-1)+($k*$arglen) > $#plain); } if ($#pattern > 7) { $line2 .= $plain[($pattern[5]-1)+($k*$arglen)] unless (($pattern[5]-1)+($k*$arglen) > $#plain); $line3 .= $plain[($pattern[8]-1)+($k*$arglen)] unless (($pattern[8]-1)+($k*$arglen) > $#plain); } } # print Dumper(\@plain); print $line1, "\n"; print $line2, "\n"; print $line3, "\n\n";