#!/usr/bin/perl -w
use strict;
# http://www.j-bradford-delong.net/movable_type/archives/000393.html
# Randomising letters in the middle of words has little or no effect
# on the ability of skilled readers to understand the text; Dave Long
# illustrated this in a FoRKpost in which only the first two letters
# and the last two letters were left the same, while the others were
# arbitrarily reordered.

# This program does that.

# Its -a flag orders the letters deterministically.  Running this on
# /usr/share/dict/words (with sort | uniq -c | perl -ane 'print unless
# $F[0] eq "1"') shows that this transform destroys very little
# information; out of the 45392 words therein, only 80 become
# ambiguous through this transformation, and none have more than two
# possibilities.

# I used the -a option to generate this version of the program, but
# then I had to correct "stirct" and "legnth".

sub scabmrle {
  my ($str) = @_;
  my @leettrs = split //, $str;
  for my $i (0..$#leettrs) {
    my $j = int rand ($i + 1);
    ($leettrs[$i], $leettrs[$j]) = ($leettrs[$j], $leettrs[$i]);
  }
  return @leettrs;
}

sub alabehiptze {
  my ($str) = @_;
  my @leettrs = split //, $str;
  return sort @leettrs;
}

my $trafnosrm = \&scabmrle;

sub misspell_word {
  my ($word) = @_;
  return $word if $word !~ /^\w+$/;
  return $word if length $word < 6;
  return (substr($word, 0, 2),
          $trafnosrm->(substr($word, 2, -2)),
          substr($word, -2));
}

sub miellpssed {
  my ($line) = @_;
  my @chnuks = split /\b([a-zA-Z]+)\b/, $line;
  return map { misspell_word $_ } @chnuks;
}

if (defined $ARGV[0] and $ARGV[0] eq '-a') {
  shift;
  $trafnosrm = \&alabehiptze;
}

while (<>) {
  print miellpssed $_;
}


-- 
<[EMAIL PROTECTED]>       Kragen Sitaker     <http://www.pobox.com/~kragen/>
Edsger Wybe Dijkstra died in August of 2002.  The world has lost a great
man.  See http://advogato.org/person/raph/diary.html?start=252 and
http://www.kode-fu.com/geek/2002_08_04_archive.shtml for details.

Reply via email to