data Tree a
= Val a
| Tarai
(Tree a
) (Tree a
) (Tree a
) deriving Show
tri a b c = Tarai (Val a) (Val b) (Val c)
tri_next (Val a) = Val a
tri_next (Tarai (Val a) (Val b) (Val c)) | a <= b = (Val b)
tri_next (Tarai (Val a) (Val b) (Val c)) = Tarai (tri (a-1) b c) (tri (b-1) c a) (tri (c-1) a b)
tri_next (Tarai (Val a) (Val b) c) = Tarai (Val a) (Val b) (tri_next c)
tri_next (Tarai (Val a) b c) = Tarai (Val a) (tri_next b) c
tri_next (Tarai a b c) = Tarai (tri_next a) b c
tri_loop (Val a) = do
tri_loop (Tarai a b c) = do
tri_loop (tri_next (Tarai a b c))
main = do
tri_loop (tri 2 1 0)
ZGF0YSBUcmVlIGEgPSBWYWwgYSB8IFRhcmFpIChUcmVlIGEpIChUcmVlIGEpIChUcmVlIGEpIGRlcml2aW5nIFNob3cKCnRyaSBhIGIgYyA9IFRhcmFpIChWYWwgYSkgKFZhbCBiKSAoVmFsIGMpCgp0cmlfbmV4dCAoVmFsIGEpID0gVmFsIGEKdHJpX25leHQgKFRhcmFpIChWYWwgYSkgKFZhbCBiKSAoVmFsIGMpKSB8IGEgPD0gYiA9IChWYWwgYikKdHJpX25leHQgKFRhcmFpIChWYWwgYSkgKFZhbCBiKSAoVmFsIGMpKSA9IFRhcmFpICh0cmkgKGEtMSkgYiBjKSAodHJpIChiLTEpIGMgYSkgKHRyaSAoYy0xKSBhIGIpCnRyaV9uZXh0IChUYXJhaSAoVmFsIGEpIChWYWwgYikgYykgPSBUYXJhaSAoVmFsIGEpIChWYWwgYikgKHRyaV9uZXh0IGMpCnRyaV9uZXh0IChUYXJhaSAoVmFsIGEpIGIgYykgPSBUYXJhaSAoVmFsIGEpICh0cmlfbmV4dCBiKSBjCnRyaV9uZXh0IChUYXJhaSBhIGIgYykgPSBUYXJhaSAodHJpX25leHQgYSkgYiBjCgp0cmlfbG9vcCAoVmFsIGEpID0gZG8KCXByaW50IChWYWwgYSkKCnRyaV9sb29wIChUYXJhaSBhIGIgYykgPSBkbwoJcHJpbnQgKFRhcmFpIGEgYiBjKQoJdHJpX2xvb3AgKHRyaV9uZXh0IChUYXJhaSBhIGIgYykpCgkKbWFpbiA9IGRvCgl0cmlfbG9vcCAodHJpIDIgMSAwKQoK