USING: arrays combinators kernel sequences string ; IN: mtf : mtf ( seq i -- seq ) cut [ rest ] [ first ] bi [ append ] dip prefix ; : encode ( alphabet str -- seq ) >array [ over index [ mtf ] keep ] map nip ; : decode ( alphabet seq -- str ) [ over dupd nth [ mtf ] dip ] map >string nip ;