1#!/usr/local/bin/perl
2
3$row = "!qwertyuiop!asdfghjkl!zxcvbnm!";
4@row_array = split(//, $row);
5
6while (<>) {
7	chomp;
8	y/A-Z/a-z/;
9	s/\byou\b/u/gi;
10	s/\bpeople\b/ppl/gi;
11	s/\bthrough\b/thru/gi;
12	s/\bthough\b/tho/gi;
13	s/\bnope\b/nup/gi;
14	s/\baustralia\b/oz/gi;
15	s/\bfilm\b/flim/gi;
16	s/\bsucks\b/sux/gi;
17	s/\benough\b/enuff/gi;
18	s/\ba lot\b/a shitload/gi;
19	s/\bstuff\b/shit/gi;
20	s/, /.. /g;
21	s/\.$/.../g;
22
23	@lets = split(//);
24
25	$strlen = $#lets;
26
27	for ($x = 0; $x < $strlen; $x++) {
28		if (rand() < 0.01) {
29		    swap(\@lets, $x, $x + 1);
30		    next;
31		}
32
33		if (rand() < 0.10 && $lets[$x] eq " ") {
34		    swap(\@lets, $x - 1, $x - 2);
35		    next;
36		}
37
38		if(rand() < 0.01) {
39		    $i = insert_adjacent(\@lets, $x, $lets[$x]);
40		    $strlen += $i;
41		    next;
42		}
43
44		if(rand() < 0.01) {
45		    splice(@lets, $x, 1);
46		    $strlen--;
47		    next;
48		}
49	}
50
51	print join("", @lets) . "\n";
52}
53
54sub insert_adjacent {
55    my($aref, $pos, $let) = @_;
56
57
58    $newlet = get_adjacent($let);
59
60    if( !$newlet ) {
61	return 0;
62    }
63
64    splice(@$aref, $pos + 1, 0, $newlet);
65    return 1;
66}
67
68
69sub get_adjacent {
70    my($let) = @_;
71
72    return 0 if $let !~ /[a-zA-Z]/;
73
74    $i = index($row, $let);
75    $before = $row_array[$i - 1];
76    $after = $row_array[$i + 1];
77
78
79
80    if( $before eq "!" || (rand() < rand() && $after ne "!"))  {
81	return $after;
82    } else {
83	return $before;
84    }
85}
86
87sub swap {
88    my($aref, $n, $m) = @_;
89    my($tmp);
90
91    if(defined($$aref[$n]) && defined($$aref[$m])) {
92	if(! (($$aref[$n] =~ /[A-Z ]/ && $$aref[$m] =~ /[A-Z ]/) ||
93	      ($$aref[$n] =~ /[a-z ]/ && $$aref[$m] =~ /[a-z ]/) )) {
94	    return;
95	}
96	$tmp = $$aref[$n];
97	$$aref[$n] = $$aref[$m];
98	$$aref[$m] = $tmp;
99    }
100}
101
102