The Tower of Hanoi in sendmail.cf

Yes, the Tower of Hanoi program is cute, but it doesn't compete with user-controlled virtual domains or automatic cross-host mailing list loop prevention.

djb / comp.unix.security / 1996-11-24

I was possibly the first person to bother solving the Tower of Hanoi problem in sendmail. The implementation is described in my USENET post about it:

From shrchin Thu Jan 25 05:38:40 1996
Newsgroups: alt.sysadmin.recovery
Subject: Re: ASR London - The Next Generation
Message-ID: <4e7512$712@susscsc1.rdg.ac.uk>
From: shrchin@reading.ac.uk (Jonathan H. N. Chin)
References: <uk4ttqogie.fsf@ASSP01.open.ac.uk>
<4du54g$kf@kadath.zeitgeist.net> <4e081g$gh1@shellx.best.com>
<4e443s$g80@kadath.zeitgeist.net>

cuccia@motherhouse.Talamasca.COM (Nick Cuccia) writes:
>--Nick (still working on towers of hanoi in sendmail.cf...)

Bastard.
I was planning to go home early for once.
Here:

# Towers of Hanoi
S49
RHANOI:$+       $:1 2 3$1
R$-$-$-$*[$+]   $:$1$2$3$4          
R$-$-$-         $@$1$2$3 
R$-$-$-@$*      $:$>49 $1$3$2$4     
R$-$-$-$*       $:$>49 $2$3$1$4[Move Top Disk Of Peg $1 To Peg $3]      
R$-$-$-$*       $:$3$2$1@$4      

Add to your /etc/sendmail.cf equivalent.
If S49 is in use, change the three `49's to an unused ruleset.

Invoke with something like:

  echo '49 HANOI:@@@@' | /usr/sbin/sendmail -bt -d21

Add `@'s to taste.
Assumes you have three pegs and want to move the stack from
the first peg to the second.

v8 output is cleaner than SunOS.

Was too lazy to make it count (ie. let `HANOI:14', etc, work);
Didn't seem too hard, but kind of long-winded and tedious.

Anyone know the iterative (non-recursive) solution?

-jonathan

See Hanoimania! for implementations in many other ways.

There is an amazing game in pure CSS.

See also Tony Finch's musings on the Turing-equivalence of MTA config files.