Hi, i hope there is something new in my solution. Rather than folding my solution unfolds and keeps track of the position of a certain layer. It starts with a 1x1 stack of paper and undos all cmds that leed to this stack (doubling the size of the paper each step). Doing this for every layer of the stack gives the solution to this quiz. (no arrays, matrixes, etc. needed except for returning the result) ----------------------------------------------------------------------- def unfold z, cmds x, y, xdim, ydim, layer = 0, 0, 0.5, 0.5, 2**cmds.size cmds.unpack('C*').reverse_each do |cmd| x, xdim = x - xdim, xdim * 2 if cmd == ?R x, xdim = x + xdim, xdim * 2 if cmd == ?L y, ydim = y - ydim, ydim * 2 if cmd == ?B y, ydim = y + ydim, ydim * 2 if cmd == ?T if z > (layer /= 2) z = 1 + (layer * 2) - z x = -x if cmd == ?R || cmd == ?L y = -y if cmd == ?B || cmd == ?T end end (xdim + x + 0.5 + (ydim + y - 0.5) * xdim * 2).to_i end def fold xsize, ysize, cmds raise RuntimeError if cmds.scan(/[^RLBT]/).size.nonzero? raise RuntimeError if 2**cmds.scan(/[RL]/).size != xsize raise RuntimeError if 2**cmds.scan(/[BT]/).size != ysize (1..(xsize * ysize)).map{|z| unfold(z, cmds)}.reverse end puts fold(16, 16, 'TLBLRRTB') --------------------------------------------------------------------- cheers Simon