iniciar-programa
  define-nueva-instruccion  vealinicio como inicio
       mientras no-orientado-al-oeste hacer gira-izquierda;
       mientras frente-libre hacer avanza;
       mientras no-orientado-al-norte hacer gira-izquierda;
   fin;
  define-nueva-instruccion quitaunos como inicio
      si frente-libre entonces avanza
      sino inicio
        repetir 3 veces gira-izquierda;
        avanza;
      fin;
      mientras frente-libre hacer inicio
         mientras frente-libre hacer inicio
            si junto-a-zumbador entonces coge-zumbador;
            avanza;
            si frente-bloqueado entonces si junto-a-zumbador entonces coge-zumbador;
         fin;
         si orientado-al-norte entonces inicio
            repetir 2 veces gira-izquierda;
            mientras frente-libre hacer avanza;
            si izquierda-libre entonces inicio
               gira-izquierda;
               avanza;
               gira-izquierda;
            fin;
         fin;
      fin;
      vealinicio;
  fin;
  define-nueva-instruccion cuenta como inicio
    mientras orientado-al-norte  hacer inicio
      si junto-a-zumbador entonces inicio
         si derecha-bloqueada y orientado-al-norte entonces inicio
            repetir 2 veces gira-izquierda;
            si frente-bloqueado entonces inicio
               repetir 2 veces gira-izquierda;
               si frente-libre entonces avanza;
            fin
            sino repetir 2 veces gira-izquierda;
         fin;
         coge-zumbador;
         deja-zumbador;
         si frente-libre entonces avanza;
         si junto-a-zumbador y frente-bloqueado entonces inicio
            coge-zumbador;
            deja-zumbador;
            repetir 2 veces gira-izquierda;
            mientras frente-libre hacer avanza;
            si izquierda-libre entonces inicio
                gira-izquierda;
                avanza;
                gira-izquierda;
            fin;
            cuenta;
            deja-zumbador;
         fin;
         cuenta;
         deja-zumbador;
      fin;
      si no-junto-a-zumbador entonces inicio
          si frente-libre entonces avanza;
          si frente-bloqueado entonces inicio
              si junto-a-zumbador entonces inicio
                 coge-zumbador;
                 deja-zumbador;
                 repetir 2 veces gira-izquierda;
                 mientras frente-libre hacer avanza;
                 si izquierda-libre entonces inicio
                     gira-izquierda;
                     avanza;
                     gira-izquierda;
                 fin;
                 cuenta;
                 deja-zumbador;
              fin;
             si frente-bloqueado y orientado-al-norte entonces inicio
                 repetir 2 veces gira-izquierda;
                 mientras frente-libre hacer avanza;
                 si izquierda-libre entonces inicio
                     gira-izquierda;
                     avanza;
                     gira-izquierda;
                 fin;
             fin;
          fin;
      fin;
    fin;
  fin;
  define-nueva-instruccion cuenta-hor como inicio
       mientras frente-libre hacer inicio
         si junto-a-zumbador entonces inicio
            coge-zumbador;
            deja-zumbador;
            avanza;
            cuenta-hor;
            deja-zumbador;
         fin;
         si frente-libre entonces avanza;
       fin;
  fin;
  define-nueva-instruccion contra como inicio
     si no-junto-a-zumbador entonces inicio
        si frente-bloqueado y izquierda-bloqueada y orientado-al-oeste entonces inicio
            repetir 2 veces gira-izquierda;
            avanza;
            gira-izquierda;
            sal-de-instruccion;
        fin;
        deja-zumbador;
        deja-zumbador;
     fin;
     repetir 2 veces gira-izquierda;
     avanza;
     si frente-libre entonces inicio
         avanza;
         si no-junto-a-zumbador entonces inicio
              si no orientado-al-este y frente-bloqueado y derecha-bloqueada entonces inicio
                  repetir 2 veces gira-izquierda;
                  avanza;
                  sal-de-instruccion;
              fin;
              deja-zumbador;
              deja-zumbador;
         fin;
         repetir 2 veces gira-izquierda;
     fin;
     si frente-libre entonces avanza;
     si izquierda-bloqueada y derecha-bloqueada entonces sal-de-instruccion;
     mientras no-orientado-al-norte hacer gira-izquierda;
  fin;
  define-nueva-instruccion cruz como inicio
      deja-zumbador;
      si frente-libre entonces inicio
          avanza;
          contra;
      fin
      sino inicio
          repetir 2 veces gira-izquierda;
          si frente-libre entonces inicio
              avanza;
              si junto-a-zumbador entonces inicio
                  repetir 2 veces gira-izquierda;
                  avanza;
              fin
              sino inicio
                  deja-zumbador;
                  deja-zumbador;
                  repetir 2 veces gira-izquierda;
                  avanza;
              fin;
          fin;
      fin;
      si izquierda-libre entonces inicio
          gira-izquierda;
          avanza;
          contra;
      fin
      sino inicio
          si derecha-libre entonces inicio
              repetir 3 veces gira-izquierda;
              avanza;
              contra;
          fin;
      fin;
  fin;
  define-nueva-instruccion recoge como inicio
      si junto-a-zumbador entonces inicio
          coge-zumbador;
          recoge;
          deja-zumbador;
      fin
      sino inicio
          mientras no-orientado-al-oeste hacer gira-izquierda;
          mientras frente-libre hacer avanza;
      fin;
  fin;
  define-nueva-instruccion uno como inicio
      mientras no-orientado-al-este hacer gira-izquierda;
      avanza;
      si junto-a-zumbador entonces inicio
          repetir 2 veces gira-izquierda;
          avanza;
          deja-zumbador;
      fin;
  fin;
  inicia-ejecucion
      mientras junto-a-zumbador hacer inicio
          mientras no orientado-al-norte hacer gira-izquierda;
          coge-zumbador;
          si frente-libre entonces avanza
          sino inicio
              repetir 3 veces gira-izquierda;
              avanza;
          fin;
          mientras frente-libre hacer inicio
              mientras frente-libre hacer inicio
                  si junto-a-zumbador entonces inicio
                      coge-zumbador;
                      si junto-a-zumbador entonces deja-zumbador
                      sino inicio
                          deja-zumbador;
                          cruz;
                      fin;
                  fin;
                  avanza;
              fin;
              si frente-bloqueado y orientado-al-norte entonces inicio
                  mientras no orientado-al-sur hacer gira-izquierda;
                  si frente-bloqueado entonces gira-izquierda;
              fin;
              si junto-a-zumbador entonces inicio
                  coge-zumbador;
                  si junto-a-zumbador entonces deja-zumbador
                  sino inicio
                      mientras no-orientado-al-norte hacer gira-izquierda;
                      deja-zumbador;
                      cruz;
                      mientras no-orientado-al-sur hacer gira-izquierda;
                  fin;
              fin;
              si orientado-al-sur entonces inicio
                  mientras frente-libre hacer avanza;
                  si izquierda-libre entonces inicio
                      gira-izquierda;
                      avanza;
                      gira-izquierda;
                  fin;
              fin;
           fin;
          vealinicio;
          quitaunos;
      fin;
      repetir 3 veces gira-izquierda;
      si izquierda-bloqueada y derecha-bloqueada entonces cuenta-hor
      sino inicio
          vealinicio;
          cuenta;
      fin;
      recoge;
      uno;
  apagate;
  termina-ejecucion
finalizar-programa
