default direc=direc; default bit=bit; default gate=gate; default ready=ready; nbr y; int result; int PointAtMe(nbr y) { rot if (y:==we: && y:direc=='>') return 1; return 0; } int RightBridge(nbr y; int b) { if (b=='=:direc' && (y:==ea: || y:==we:) || b=='H:direc' && (y:==no: || y:==so:)) return 1; return 0; } if (bit) { rot if (direc=='>' && (ea:ready || ea:bit=='.' && RightBridge(ea:, ea:direc)) || ea:direc=='>' && ea:bit=='.') bit='.'; } else if (ready) { if (gate=='&') { result=1; over each other y: if (PointAtMe(y:)) result = result & (y:bit-'0'); } else if (gate=='|') { result=0; over each other y: if (PointAtMe(y:)) result = result | (y:bit-'0'); } else if (gate=='^') { result=1; over each other y: if (PointAtMe(y:)) result = result & (y:bit-'0'); result = 1 - result; } bit=result+'0:bit'; ready=0; } else if (gate) { result=1; over each other y: if (PointAtMe(y:) && y:bit=='.') result=0; ready=result; } else if (direc && bit=='.') { rot if (we:bit && direc=='>' && (we:direc<'=' || RightBridge(we:, we:direc))) bit=we:bit; else rot if (RightBridge(we:, direc) && we:direc=='>' && we:bit) bit=we:bit; else rot if (RightBridge(we:, direc)==0 && we:direc=='>' && we:bit) { if (direc=='=') direc='H'; else if (direc=='H') direc='='; } }