iniciar-programa

    define-nueva-instruccion linea como inicio
        avanza;
         si junto-a-zumbador entonces sal-de-instruccion
          sino deja-zumbador;
           linea;
    fin;

    define-nueva-instruccion identa(x) como inicio
         mientras no-orientado-al-este hacer gira-izquierda;
         avanza;
          si no-junto-a-zumbador entonces identa(sucede(x))
          sino inicio
              coge-zumbador;
               repetir 2 veces gira-izquierda;
                mientras no-junto-a-zumbador hacer avanza;
                 coge-zumbador;
                  repetir x veces deja-zumbador;
                 sal-de-instruccion;
          fin;
    fin;

    define-nueva-instruccion alterna(n) como inicio
        si no-junto-a-zumbador entonces inicio
            avanza;
             alterna(sucede(n));
        fin
        sino inicio
           coge-zumbador;
            repetir 2 veces gira-izquierda;
             mientras no-junto-a-zumbador hacer avanza;
              coge-zumbador;
               repetir n veces deja-zumbador;
        fin;
    fin;

    define-nueva-instruccion regresa(x) como inicio
        si junto-a-zumbador y frente-libre y orientado-al-norte entonces inicio
           si frente-libre entonces avanza;
                 regresa(sucede(x));
               gira-izquierda;
                avanza;
                identa(2);
        fin
        sino inicio
           si frente-bloqueado entonces inicio
              repetir 2 veces gira-izquierda;
               avanza;
                gira-izquierda;
                 avanza;
                alterna(2);
           fin;
           si frente-libre y orientado-al-norte entonces inicio
               repetir 2 veces gira-izquierda;
                avanza;
                 repetir 3 veces gira-izquierda;
           fin
        fin;

    fin;

    inicia-ejecucion
        mientras no-orientado-al-sur hacer gira-izquierda;
        linea;
         repetir 2 veces gira-izquierda;
          avanza;
           avanza;
           regresa(0);
            apagate;
    termina-ejecucion
finalizar-programa
