iniciar-programa
define-nueva-instruccion gira-derecha como
inicio
  repetir 3 veces
    gira-izquierda;
fin;
define-nueva-instruccion mira-este como
inicio
  mientras no-orientado-al-este hacer
    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 orientate(k) como
inicio
  si no-orientado-al-este entonces
  inicio
    gira-izquierda;
    orientate(K);
    gira-derecha;
  fin
  sino
  inicio
    avanza;
    repetir k veces
    inicio
      si junto-a-zumbador entonces
        coge-zumbador;
    fin;
    repetir k veces
      deja-zumbador;
    paso-atras;
  fin;
fin;
define-nueva-instruccion busca(k) como
inicio
   si frente-libre y no(si-es-cero(k)) entonces
   inicio
     avanza;
     si junto-a-zumbador entonces
     inicio
        coge-zumbador;
        si no-junto-a-zumbador entonces
        inicio
          busca(k);
          deja-zumbador;
          paso-atras;

        fin
        sino
        inicio
          coge-zumbador;
          si no-junto-a-zumbador entonces
          inicio
            busca(precede(k));
            repetir 2 veces
              deja-zumbador;
            paso-atras;

          fin
          sino
          inicio
            repetir 2 veces
              deja-zumbador;
            orientate(k);
            paso-atras;

          fin;
        fin;
     fin
     sino
       paso-atras;
   fin;
   si izquierda-libre y no(si-es-cero(k)) entonces
   inicio
     gira-izquierda;
     avanza;
     si junto-a-zumbador entonces
     inicio
        coge-zumbador;
        si no-junto-a-zumbador entonces
        inicio
          busca(k);
          deja-zumbador;
          paso-atras;
          gira-derecha;

        fin
        sino
        inicio
          coge-zumbador;
          si no-junto-a-zumbador entonces
          inicio
            busca(precede(k));
            repetir 2 veces
              deja-zumbador;
            paso-atras;
            gira-derecha;
          fin
          sino
          inicio
            repetir 2 veces
              deja-zumbador;
            orientate(k);
            paso-atras;
            gira-derecha;
          fin;
        fin;
     fin
     sino
     inicio
       paso-atras;
       gira-derecha;
     fin;
   fin;
  si derecha-libre y no(si-es-cero(k)) entonces
  inicio
      gira-derecha;
     avanza;
     si junto-a-zumbador entonces
     inicio
        coge-zumbador;
        si no-junto-a-zumbador entonces
        inicio
          busca(k);
          deja-zumbador;
          paso-atras;
          gira-izquierda;

        fin
        sino
        inicio
          coge-zumbador;
          si no-junto-a-zumbador entonces
          inicio
            busca(precede(k));
            repetir 2 veces
              deja-zumbador;
            paso-atras;
            gira-izquierda;
          fin
          sino
          inicio
            repetir 2 veces
              deja-zumbador;
            orientate(k);
            paso-atras;

          fin;
        fin;
     fin
     sino
     inicio
       paso-atras;
       gira-izquierda;
     fin;
   fin;
fin;
define-nueva-instruccion cuenta(k) como
inicio
  si junto-a-zumbador entonces
  inicio
    coge-zumbador;
    cuenta(sucede(k));
  fin
  sino
  inicio
    busca(precede(k));
  fin;
fin;
    inicia-ejecucion
    cuenta(0);
        apagate;
    termina-ejecucion
finalizar-programa
