iniciar-programa
define-nueva-instruccion gira-derecha como
inicio
  repetir 3 veces
    gira-izquierda;
fin;
define-nueva-instruccion paso-atras como
inicio
  repetir 2 veces
    gira-izquierda;
  avanza;
  repetir 2 veces
    gira-izquierda;
fin;
define-nueva-instruccion compara(n) como
inicio
  repetir precede(n) veces
  inicio
    si junto-a-zumbador entonces
    inicio
      coge-zumbador;
    fin;
  fin;
  si junto-a-zumbador entonces
  inicio
    repetir precede(n) veces
      deja-zumbador;
  fin;
fin;
define-nueva-instruccion primeracom(n) como
inicio
  si junto-a-zumbador entonces
  inicio
    coge-zumbador;
    primeracom(sucede(n));
    coge-zumbador;
  fin
  sino
  inicio
    si izquierda-libre entonces
    inicio
      gira-izquierda;
      avanza;
      si junto-a-zumbador entonces
      inicio
        repetir precede(n) veces
        inicio
          si junto-a-zumbador entonces
            coge-zumbador;
        fin;
        si junto-a-zumbador entonces
        inicio
          repetir precede (n) veces
            deja-zumbador;
          paso-atras;
          gira-derecha;
        fin
        sino
        inicio
          mientras algun-zumbador-en-la-mochila hacer
            deja-zumbador;
          sal-de-instruccion;
        fin;
      fin
      sino
      inicio
       apagate;
      fin;
    fin;

    si derecha-libre entonces
    inicio
      gira-derecha;
      avanza;
      si junto-a-zumbador entonces
      inicio
      compara(n);
      si junto-a-zumbador entonces
      inicio
        paso-atras;
        gira-izquierda;
      fin
      sino
      inicio
      mientras algun-zumbador-en-la-mochila hacer
        deja-zumbador;
        sal-de-instruccion;
      fin;

    fin;
    fin;
    si frente-libre entonces
    inicio
      avanza;

        compara(n);
        si junto-a-zumbador entonces
        inicio
          paso-atras;
        fin
        sino
        inicio
        mientras algun-zumbador-en-la-mochila hacer
          deja-zumbador;
          sal-de-instruccion;
        fin;

    fin;
    repetir 2 veces
      gira-izquierda;
    si frente-libre entonces
    inicio
      avanza;
      si junto-a-zumbador entonces
      inicio
      compara(n);
      si junto-a-zumbador entonces
      inicio
        paso-atras;
        repetir 2 veces
         gira-izquierda;
      fin
      sino
      inicio
      mientras algun-zumbador-en-la-mochila hacer
        deja-zumbador;
        sal-de-instruccion;
      fin;
      fin
      sino
      inicio
        paso-atras;
        repetir 2 veces
          gira-izquierda;
      fin;
    fin
    sino
    repetir 2 veces
      gira-izquierda;
  fin;
fin;
define-nueva-instruccion valle(n) como
inicio
si junto-a-zumbador  entonces
inicio
  coge-zumbador;
  valle(sucede(n));
  coge-zumbador;
fin
sino
inicio
mientras algun-zumbador-en-la-mochila hacer
  deja-zumbador;
repetir n veces
  coge-zumbador;
  si frente-libre entonces
  inicio
  avanza;

      compara(n);
      si junto-a-zumbador entonces
      inicio
        paso-atras;
      fin
      sino
      inicio
      mientras algun-zumbador-en-la-mochila hacer
        deja-zumbador;
        sal-de-instruccion;
      fin;
    fin;

  si derecha-libre entonces
  inicio
    gira-derecha;
    avanza;

      compara(n);
      si junto-a-zumbador entonces
      inicio
        paso-atras;
        gira-izquierda;
      fin
      sino
      inicio
         mientras algun-zumbador-en-la-mochila hacer
           deja-zumbador;
         sal-de-instruccion;
      fin;
    fin;

  si izquierda-libre entonces
  inicio
    gira-izquierda;
    avanza;

       compara(n);
       si junto-a-zumbador entonces
       inicio
         paso-atras;
         gira-derecha;
         apagate;
       fin
       sino
       inicio
       mientras algun-zumbador-en-la-mochila hacer
         deja-zumbador;
         sal-de-instruccion;
       fin;
    fin

  sino
    apagate;
fin;
fin;
    inicia-ejecucion
    primeracom(0);
    mientras junto-a-zumbador hacer
      valle(0);
        apagate;
    termina-ejecucion
finalizar-programa
