iniciar-programa
define-nueva-instruccion gira (r) como inicio
repetir r veces gira-izquierda;
fin;

define-nueva-instruccion regresa como inicio
 si frente-bloqueado y izquierda-libre y no junto-a-zumbador entonces inicio
  gira-izquierda;
  avanza;
  gira-izquierda;
  mientras frente-libre hacer avanza;
  gira (2);
 fin;
fin;


define-nueva-instruccion alto (n) como inicio
 si frente-libre entonces inicio
  avanza;
   alto (n);

    repetir 2 veces avanza;

    fin
     sino inicio
      gira (3);
       mientras frente-libre hacer avanza;
        gira-izquierda;
        mientras derecha-bloqueada hacer avanza;
        gira (3);
        avanza;
        mientras derecha-bloqueada hacer avanza;
        gira (3);
        avanza;
        gira (3);
       mientras frente-libre hacer avanza;
      gira (2);
    repetir n veces inicio
      repetir 2 veces avanza;
       fin;
       gira (3);


 fin;
fin;



define-nueva-instruccion ancho (n) como inicio
 si frente-libre entonces inicio
  avanza;
   ancho (sucede(n));
    fin
     sino inicio
     gira (2);
     repetir n veces avanza;
     gira-izquierda;
    alto (n);
 fin;
fin;



    inicia-ejecucion

    mientras no-orientado-al-oeste hacer gira-izquierda;

    mientras algun-zumbador-en-la-mochila hacer inicio
      mientras no junto-a-zumbador hacer inicio
        mientras frente-libre y no-junto-a-zumbador hacer avanza;
        regresa;
       si frente-bloqueado y izquierda-bloqueada y no-junto-a-zumbador entonces apagate;
      fin;

      coge-zumbador;
      ancho (0);

      deja-zumbador;
      avanza;
      deja-zumbador;
      gira-izquierda;
      avanza;
      deja-zumbador;
      gira-izquierda;
      avanza;
      deja-zumbador;

      mientras frente-libre hacer avanza;
       gira (3);
        mientras izquierda-bloqueada hacer avanza;
         gira-izquierda;
          avanza;
           gira-izquierda;
           avanza;
            mientras izquierda-bloqueada hacer avanza;
            gira-izquierda;
            mientras derecha-libre y frente-libre hacer avanza;
            gira (2);
            avanza;
            gira-izquierda;
            avanza;
         
                                      


    fin;


        apagate;
    termina-ejecucion
finalizar-programa
