iniciar-programa define-nueva-instruccion giraDerecha como inicio gira-izquierda; gira-izquierda; gira-izquierda; fin; define-nueva-instruccion buscaSol como inicio si no-junto-a-zumbador entonces inicio si frente-libre entonces inicio avanza; buscaSol; fin sino inicio si orientado-al-este entonces inicio giraDerecha; avanza; giraDerecha; buscaSol; fin sino inicio gira-izquierda; avanza; gira-izquierda; buscaSol; fin; fin; fin; fin; define-nueva-instruccion dejaZumbadores(cuantos) como inicio si no si-es-cero(cuantos) entonces inicio deja-zumbador; dejaZumbadores(precede(cuantos)); fin; fin; define-nueva-instruccion avanzaMuchos(c) como inicio si no si-es-cero(c) entonces inicio avanza; avanzaMuchos(precede(c)); fin; fin; define-nueva-instruccion buscaCactusH(X1) como inicio si junto-a-zumbador entonces inicio coge-zumbador; dejaZumbadores(X1); mientras no-orientado-al-norte hacer gira-izquierda; fin sino inicio si frente-libre entonces inicio avanza; buscaCactusH(sucede(X1)); fin sino inicio gira-izquierda; gira-izquierda; avanzaMuchos(X1); mientras no-orientado-al-sur hacer gira-izquierda; fin; fin; fin; define-nueva-instruccion multiplica(factor) como inicio si junto-a-zumbador entonces inicio coge-zumbador; gira-izquierda; avanza; dejaZumbadores(factor); gira-izquierda; gira-izquierda; avanza; gira-izquierda; multiplica(factor); fin sino deja-zumbador; fin; define-nueva-instruccion cociente(q) como inicio mientras junto-a-zumbador hacer inicio repetir q veces coge-zumbador; avanza; deja-zumbador; gira-izquierda; gira-izquierda; avanza; gira-izquierda; gira-izquierda; fin; avanza; fin; define-nueva-instruccion divisor(d) como inicio si junto-a-zumbador entonces inicio coge-zumbador; divisor(sucede(d)); fin sino inicio repetir 2 veces inicio gira-izquierda; avanza; fin; cociente(d); fin; fin; define-nueva-instruccion mideCactus(alto) como inicio si frente-libre entonces inicio avanza; mideCactus(sucede(alto)); fin sino inicio gira-izquierda; gira-izquierda; avanzaMuchos(alto); multiplica(alto); avanza; divisor(0); fin; fin; define-nueva-instruccion avanzaDejando(ts) como inicio si no si-es-cero(ts) entonces inicio deja-zumbador; si frente-libre entonces avanza; avanzaDejando(precede(ts)); fin; fin; define-nueva-instruccion dejaSombraD(tam) como inicio si junto-a-zumbador entonces inicio coge-zumbador; dejaSombraD(sucede(tam)); fin sino inicio mientras frente-libre hacer avanza; gira-izquierda; avanza; avanza; avanzaDejando(tam); fin; fin; define-nueva-instruccion dejaSombraI(tam) como inicio si junto-a-zumbador entonces inicio coge-zumbador; dejaSombraI(sucede(tam)); fin sino inicio mientras frente-libre hacer avanza; giraDerecha; avanzaDejando(tam); fin; fin; define-nueva-instruccion buscaCactusV(Y1) como inicio avanza; si junto-a-zumbador entonces apagate; gira-izquierda; buscaCactusH(0); si orientado-al-sur entonces inicio giraDerecha; buscaCactusH(0); si orientado-al-sur entonces buscaCactusV(sucede(Y1)) sino inicio avanza; dejaZumbadores(sucede(Y1)); gira-izquierda; gira-izquierda; avanza; mideCactus(0); dejaSombraI(0); fin; fin sino inicio avanza; dejaZumbadores(sucede(Y1)); gira-izquierda; gira-izquierda; avanza; mideCactus(0); dejaSombraD(0); fin; fin; inicia-ejecucion mientras frente-libre hacer avanza; giraDerecha; buscaSol; mientras no-orientado-al-sur hacer gira-izquierda; buscaCactusV(0); apagate; termina-ejecucion finalizar-programa