2 setecho. DEFINE P0 == []; # empty code P1 == [2 3 + dup *]; # non-empty code P2 == [[1 2 3] [dup *] map]; # nest data & code P3 == [ [[1 2][3 4][5] []] [[dup *] map] map ]. # double nesting DEFINE c == concat; j2f-f == [ list ] [ [[[]] concat] dip [j2f-f] step [[] cons c] concat ] [ [] cons [c] cons concat ] ifte; j2f-forwards == [[]] swap [j2f-f] step. P0 . P0 j2f-forwards . P0 j2f-forwards i . P1 . P1 j2f-forwards . P1 j2f-forwards i . P1 j2f-forwards i i . P2 . P2 j2f-forwards . P2 j2f-forwards i . P2 j2f-forwards i i . P3 . P3 j2f-forwards . P3 j2f-forwards i . P3 j2f-forwards i i . DEFINE s == swoncat; j2f-r == [ list ] [ [[swons] swoncat] dip [j2f-r] step [] swons ] [ [] cons [s] cons swoncat ] ifte; j2f-reverse == [] swap [j2f-r] step [] swons. P0 . P0 j2f-reverse . P0 j2f-reverse i . P1 . P1 j2f-reverse . P1 j2f-reverse i . P1 j2f-reverse i i . P2 . P2 j2f-reverse . P2 j2f-reverse i . P2 j2f-reverse i i . P3 . P3 j2f-reverse . P3 j2f-reverse i . P3 j2f-reverse i i . # Double flattening - an exercise in Joy obfuscation: P3 j2f-forwards j2f-reverse . # partial de-obfuscation - by Joy itself: P3 j2f-forwards j2f-reverse i . # full de-obfuscation - again by Joy: P3 j2f-forwards j2f-reverse i i . # final run of de-obfuscated original: P3 j2f-forwards j2f-reverse i i i .