iniciar-programa
define-nueva-instruccion gira(e) como repetir e veces gira-izquierda;
 define-nueva-instruccion encuentraZumbador(n)como inicio
      mientras no junto-a-zumbador hacer inicio
    mientras frente-libre y no junto-a-zumbador hacer avanza;

    si frente-bloqueado y no junto-a-zumbador entonces inicio
     gira(2);
     mientras frente-libre hacer avanza;
     gira(3);
     si frente-libre entonces avanza sino inicio
     gira(2);
     mientras frente-libre hacer avanza;
     deja-zumbador;
     gira(2);
     avanza; sal-de-instruccion;
     fin; gira(3);
    fin;

    fin;
 fin;
 define-nueva-instruccion encuentra como inicio
  mientras no junto-a-zumbador hacer inicio
    mientras frente-libre y no junto-a-zumbador hacer avanza;

    si frente-bloqueado y no junto-a-zumbador entonces inicio
     gira(2);
     mientras frente-libre hacer avanza;
     gira(3);
     si frente-libre entonces avanza sino inicio
      apagate;
    fin;
    gira(3);
    fin;
   fin;
   fin;
define-nueva-instruccion buscaPar(n) como inicio

   si no junto-a-zumbador y no si-es-cero(n) entonces inicio
   sal-de-instruccion;
   fin;
   si no junto-a-zumbador y si-es-cero(n) entonces inicio
   mientras frente-libre hacer avanza;
   gira(3);
   mientras frente-libre hacer avanza;
   gira(3);
   mientras frente-libre hacer avanza;
   gira(2);
   encuentra;
   gira(1);
   fin;
   si junto-a-zumbador y si-es-cero(n) entonces sal-de-instruccion;
 si junto-a-zumbador entonces inicio
  coge-zumbador;
  buscaPar(precede(n));
 fin;
si orientado-al-este entonces deja-zumbador;
FIN;
define-nueva-instruccion calcetin(n) como inicio
 si junto-a-zumbador entonces inicio
  coge-zumbador;
  calcetin(sucede(n));
 fin sino  inicio
 encuentraZumbador(n);
mientras  no si-es-cero(n) hacer inicio
buscaPar(n);
si frente-bloqueado entonces inicio
gira(2);
     mientras frente-libre hacer avanza;
     gira(3);
     si frente-libre entonces avanza sino inicio
     gira(2);
     mientras frente-libre hacer avanza;
     deja-zumbador;
     gira(2);
     avanza;
     fin;

   si (orientado-al-norte y frente-bloqueado) o junto-a-zumbador entonces inicio
   mientras no orientado-al-este hacer gira-izquierda;
   buscaPar(n);
     fin;
    fin;
si no orientado-al-este entonces inicio
gira(3);
encuentra;
 calcetin(0);
fin;
si frente-libre entonces inicio
avanza;
encuentraZumbador(n);
fin;
fin;
si frente-bloqueado y izquierda-bloqueada y junto-a-zumbador entonces inicio
gira(3);
mientras frente-libre hacer avanza;
gira(3);
mientras frente-libre hacer avanza;
gira(2);  encuentra;
calcetin(0);
fin;

gira(3);
encuentra;
calcetin(0);
 fin;

FIN;

    inicia-ejecucion
    mientras no orientado-al-norte hacer gira-izquierda;
    avanza; gira(3);
    encuentra;
    calcetin(0);
        apagate;
    termina-ejecucion
finalizar-programa
