Your skill will accomplishwhat the force of many cannot PerlMonks

### markov (The Practice of Programming)

by powerman (Friar)
 on Apr 23, 2002 at 10:17 UTC Need Help??
 Description: Another cook book - "The Practice of Programming" by Kernighan and Pike. And again, realization of "Markov chains algorithm" on page 123 can and must be optimized! So clever C/C++/Java examples and so ugly Perl example... :-(
```#
# variant from "The Practice of Programming"
#

#!/usr/bin/perl
\$MAXGEN  = 10000;
\$NONWORD = "\n";
\$w1 = \$w2 = \$NONWORD;
while (<>) {
foreach (split) {
push(@{\$statetab{\$w1}{\$w2}}, \$_);
(\$w1, \$w2) = (\$w2, \$_);
}
}
push(@{\$statetab{\$w1}{\$w2}}, \$NONWORD);

\$w1 = \$w2 = \$NONWORD;
for (\$i=0; \$i<\$MAXGEN; \$i++) {
\$suf = \$statetab{\$w1}{\$w2};
\$r = int(rand @\$suf);
exit if ((\$t = \$suf->[\$r]) eq \$NONWORD);
print "\$t\n";
(\$w1, \$w2) = (\$w2, \$t);
}

#
# my variant
#

#!/usr/bin/perl -a0n
push @{\$m{\$F[\$_-1]}{\$F[\$_]}}, \$F[\$_+1] for 1..\$#F;
1 while defined(\$F[2+\$i++] = splice @{\$m{\$F[0+\$i]}{\$F[1+\$i]}},
rand(@{\$m{\$F[0+\$i]}{\$F[1+\$i]}}), 1);
print join(" ",@F[0..1+\$i]),"\n";
```

Create A New User
Node Status?
node history
Node Type: snippet [id://161252]
help
Chatterbox?
 shmem farts into some unspecified direction

How do I use this? | Other CB clients
Other Users?
As of 2018-04-20 22:35 GMT
Sections?
Information?
Find Nodes?
Leftovers?
Voting Booth?
My travels bear the most uncanny semblance to ...

Results (81 votes). Check out past polls.

Notices?