Collatz 予想

Collatz 予想の関数 f(n)=%5cleft%5c%7b%5cbegin%7beqnarray%7dn/2 &%5ctext%7bif even%7d%5c%5c 3n+1&%5ctext%7bif odd%7d%5cend%7beqnarray%7d%5cright. を 1 〜 100 の整数に何度も作用させた時の値の変化をアニメーションにしてみた。例によって PostScript で書いて ImageMagick で変換し、作成。
ところで キミならどう書く 2.0 - ROUND 2 - — Lightweight Language Ring の問題ですが、h(20) や h(60) の場合は該当する値が複数あるので、それら全部を表示しなければならないのではないだろうか。そういった場合に対応してないプログラムは失格になるのだろうか。
このアニメーションは h(n) の値そのものは表示しない(最後のコマを見て自分で値を数えなければわからない)ので失格です。
以下 PostScript のソース。

%!PS
%%BoundingBox: 0 0 245 235 

gsave
/N 100 def
/keta 4 def

/mag 2 def
/fsize 14 mag div def

/foo N array def
0 1 N 1 sub {
    foo exch dup 1 add put
} for

/Times-Roman findfont fsize scalefont setfont

/draw {
    /bar exch def
    gsave
    30 25 translate mag mag scale
    0 0 0 setrgbcolor
% axis
    0 0 N 1 add N rectstroke
% ticks
    0 10 N {
        dup
        0 moveto 0 fsize -0.5 mul rlineto currentpoint stroke
        moveto fsize -0.5 mul fsize -1 mul rmoveto (    ) cvs show
    } for
    0 1 keta {
        dup
        keta div N mul 0 exch moveto fsize 0.5 mul 0 rlineto currentpoint stroke
        moveto fsize -2.3 mul fsize -0.3 mul rmoveto (1e) show (  ) cvs show
    } for
% value
    1 0 0 setrgbcolor
    0 1 N 1 sub {
        dup
        1 add 0 moveto
        bar exch get log keta div N mul 0 exch rlineto stroke
    } for
    grestore
    showpage
} def

/arraymax {
    mark exch aload pop
    {
        2 copy exch mark eq {pop exit} if
        3 -1 roll dup 3 -1 roll gt {exch pop}{pop} ifelse
    } loop
    exch pop
} def
/f {
    /bar exch def
    0 1 N 1 sub {
        /i exch def
        bar i get dup
        2 mod 0 eq {2 idiv} {3 mul 1 add} ifelse
        bar exch i exch put
    } for
} def

{
    foo draw
    foo f
    foo arraymax 4 le {exit} if
} loop
grestore