#!/bin/sh -- # A comment mentioning perl, to prevent perl from looping. Indented to work with bash. eval 'exec perl -S $0 ${1+"$@"}' if 0; $n = '0'; $List[$n++] = 'A'; $List[$n++] = 'B'; $List[$n++] = 'C'; $List[$n++] = 'D'; $List[$n++] = 'E'; $List[$n++] = 'F'; $List[$n++] = 'G'; $List[$n++] = 'H'; $List[$n++] = 'I'; $List[$n++] = 'J'; $List[$n++] = 'K'; $List[$n++] = 'L'; $List[$n++] = 'M'; $List[$n++] = 'N'; $List[$n++] = 'O'; $List[$n++] = 'P'; $List[$n++] = 'Q'; $List[$n++] = 'R'; $List[$n++] = 'S'; $List[$n++] = 'T'; $List[$n++] = 'U'; $List[$n++] = 'V'; $List[$n++] = 'W'; $List[$n++] = 'X'; $List[$n++] = 'Y'; $List[$n++] = 'Z'; select(STDERR); $| = 1; select(STDOUT); $| = 1; if ( $ARGV[0] eq '' ) { print STDERR "\nPlease enter a seed number: "; chop($seed = ); } else { if ( $ARGV[1] ne '' ) { $seed = join(' ', @ARGV); } else { $seed = $ARGV[0]; } } print STDERR "\n"; if ( $seed =~ /^\d+$/ ) { srand($seed); } else { chop($x = `echo "$seed" | sum | awk '{print \$1}' 2>/dev/null`); chop($y = $seed); $y = $seed if $y eq ''; chop($y = `echo "$y" | sum | awk '{print \$1}' 2>/dev/null`); #print "X: $x\n"; #print "Y: $y\n"; if ( $x =~ /^\d+$/ && $y =~ /^\d+$/ ) { $z = $x * $y; #print "Z: $z\n"; print STDERR "(using seed $z)\n\n"; srand($z); } else { print STDERR "(not using seed $x * $y)\n\n"; srand($seed); } } for ($i = 0; $i < $n; $i ++ ) { $Hit{$i} = ''; } for ($i = 0; $i < $n; $i ++ ) { $Code[$i] = '-1'; while ( $Code[$i] < 0 ) { $try = int(rand($n)); if ( $Hit{$try} eq '' ) { $Hit{$try} = 1; $Code[$i] = $try; } } print STDOUT "$List[$i] -> $List[$Code[$i]]\n"; $a = $List[$i]; $b = $List[$Code[$i]]; $Map{$a} = $b; $MapInv{$b} = $a; $a =~ tr/A-Z/a-z/; $b =~ tr/A-Z/a-z/; $Map{$a} = $b; $MapInv{$b} = $a; } print STDERR "\n"; print STDERR "Message? (encode/decode/quit) e/d/q "; chop($reply = ); if ( $reply =~ /^e/i ) { $mode = 'encode'; } elsif ( $reply =~ /^d/i ) { $mode = 'decode'; } else { exit 0; } print STDERR "Enter message (end with \".\" on a line by itself)\n"; $msg = ''; while () { last if /^\.$/; $msg .= $_; } print STDERR "\n"; $output = ''; foreach $char (split(//, $msg)) { if ( $mode eq 'encode' && $Map{$char}) { $output .= $Map{$char}; } elsif ( $mode eq 'decode' && $MapInv{$char}) { $output .= $MapInv{$char}; } else { $output .= $char; } } print STDERR "-------------------------------------------------\n"; print STDOUT $output; exit 0;