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

    define-nueva-instruccion orienta_oeste como inicio
       mientras no-orientado-al-oeste hacer
          gira-izquierda;
    fin;

    define-nueva-instruccion topa_pared como inicio
       mientras frente-libre hacer
          avanza;
    fin;

    define-nueva-instruccion orienta como inicio
       orienta_oeste;
       topa_pared;
       gira(1);
       topa_pared;
       gira(2);
    fin;

    define-nueva-instruccion llena como inicio
       si no-junto-a-zumbador entonces inicio
          deja-zumbador;
          repetir 4 veces inicio
             si frente-libre entonces inicio
                avanza;
                llena;
                gira(2);
                avanza;
                gira(2);
             fin;
             gira(1);
          fin;
       fin;
    fin;

    define-nueva-instruccion deja2 como inicio
       si frente-libre entonces inicio
          avanza;
          deja2;
          avanza;
       fin
       sino inicio
          deja-zumbador;
          gira(2);
       fin;
    fin;

    define-nueva-instruccion deja1 como inicio
       si frente-libre entonces inicio
          avanza;
          deja1;
          avanza;
       fin
       sino inicio
          gira(1);
          deja2;
          gira(3);
       fin;
    fin;

    define-nueva-instruccion infectado como inicio
       gira(1);
       deja1;
       gira(1);

    fin;

    define-nueva-instruccion recorrer como inicio
       mientras derecha-libre hacer inicio
          mientras frente-libre hacer inicio
             avanza;
             si no-junto-a-zumbador entonces inicio
                llena;
                infectado;
             fin;
          fin;
          gira(2);
          topa_pared;
          gira(1);
          avanza;
          gira(1);
       fin;
    fin;

    define-nueva-instruccion orienta_sur como inicio
       mientras no-orientado-al-sur hacer
          gira-izquierda;
    fin;

    define-nueva-instruccion limpia2 como inicio
      topa_pared;
      gira(2);
      mientras frente-libre hacer inicio
          coge-zumbador;
          avanza;
      fin;
      coge-zumbador;
      si izquierda-libre entonces inicio
         gira(1);
         avanza;
      fin;
      orienta_sur;
    fin;

    define-nueva-instruccion limpia como inicio
       orienta_sur;
       mientras derecha-libre hacer inicio
          limpia2;
          orienta_sur;
       fin;
       limpia2;
       topa_pared;
    fin;

    inicia-ejecucion
        orienta;
        llena;
        recorrer;
        limpia;
        apagate;
    termina-ejecucion
finalizar-programa