iniciar-programa
define-nueva-instruccion norte como mientras no-orientado-al-norte hacer gira-izquierda;
define-nueva-instruccion sur como mientras no-orientado-al-sur hacer gira-izquierda;
define-nueva-instruccion este como mientras no-orientado-al-este hacer gira-izquierda;
define-nueva-instruccion oeste como mientras no-orientado-al-oeste hacer gira-izquierda;

define-nueva-instruccion eskina como
inicio
  sur;
  mientras frente-libre hacer avanza;
  oeste;
  mientras frente-libre hacer avanza;
  este;
fin;

define-nueva-instruccion yenaescalon como
inicio
  si no-junto-a-zumbador entonces deja-zumbador;
  mientras frente-libre hacer
    inicio
      sur;
      avanza;
      si no-junto-a-zumbador entonces deja-zumbador;
      este;
      avanza;
      si no-junto-a-zumbador entonces deja-zumbador;
      sur;
    fin;
fin;

define-nueva-instruccion detectapunta(n) como
inicio
  si junto-a-zumbador entonces
    inicio
      si frente-libre entonces
        inicio
          si frente-libre entonces avanza;
          si frente-libre entonces avanza;
        fin;
      si junto-a-zumbador entonces detectapunta(sucede(n))
      sino
    inicio
      oeste;
      mientras frente-libre hacer avanza;
      este;
      repetir n veces avanza;
      norte;
      repetir n veces avanza;
      apagate;
    fin;
    fin;

fin;

define-nueva-instruccion bajarcentro(n) como
inicio
  si frente-libre entonces
    inicio
      mientras frente-libre hacer yenaescalon;
      bajarcentro(precede(n));
    fin
  sino
    inicio

          oeste;
          repetir sucede(n) veces avanza;
          norte;
          repetir n veces avanza;
          sur;
           si ningun-zumbador-en-la-mochila entonces
              inicio
              eskina;
                detectapunta(0);
              fin;
          si frente-libre entonces inicio

            si ningun-zumbador-en-la-mochila entonces
              inicio
                eskina;
                detectapunta(0);
              fin;
            bajarcentro(n);
        fin;
    fin;
fin;

define-nueva-instruccion subirescalon(n) como
inicio
  si algun-zumbador-en-la-mochila entonces
    inicio
      este;
      repetir n veces avanza;
      norte;
      repetir n veces avanza;
      sur;
      bajarcentro(n);
      oeste;
      mientras frente-libre hacer avanza;
      este;
      subirescalon(sucede(n));
    fin;
fin;

    inicia-ejecucion
        si no-junto-a-zumbador entonces deja-zumbador;
        si ningun-zumbador-en-la-mochila entonces
        inicio
          eskina;
          detectapunta(0);
          apagate;
        fin;
        subirescalon(1);
        apagate;
    termina-ejecucion
finalizar-programa
