[2021][Simulacro][Problema 2]

[2021][Simulacro][Problema 2]

de Leandro Ezequiel Dominguez Perez -
Número de respuestas: 1

Buenas, espero que estén bien. Antes que nada quería agradecer por tomarse la molestia de contestar varias de nuestras dudas. Entiendo que son un montón en poco tiempo.

Mi duda está en la solución del ejercicio 2. Creo que no toma en cuenta el caso base en el que la tira comienza con 1 y hace que al inicializar bit_transmitido en 0 no se cuente el primer 1.

Adjunto una imagen de la solución:

Lo que se me ocurrió fue hacer lo siguiente pero me queda bastante más compleja:

void procedimiento(){
  int cantCeros, cantUnos = 0;
  enum ultimo_bit { -1, 0, 1 } // -1 si es el primero que llega
  ultimo_bit = -1;
  while(true){
    char entrada = in(ENTRADA_BITS);
    if(ENTRADA_BITS & 0x02){ // hay bit para leer
      if(ENTRADA_BITS mod 2){ // hay un cero para contar
        if(ultimo_bit == -1){ // primer bit es 0
          ultimo_bit = 0;
        }elsif(ultimo_bit == 1){
          char salida = 1 << 7;
          salida = (salida + cantUnos) mod 128;
          out(SALIDA_RLE, salida)
          cantUnos = 0;
        }
        cantCeros ++;  
      }else{ // hay un uno
        if(ultimo_bit == -1){ // primer bit
          ultimo_bit = 1;
        }elsif(ultimo_bit == 0){
          char salida = 0 << 7;
          salida = (salida + cantCeros) mod 128;
          out(SALIDA_RLE, salida)
          cantCeros = 0;
        }
        cantUnos ++; 
      }
    }
  }
}

¡Desde ya muchas gracias por cualqueir aclaración!


En respuesta a Leandro Ezequiel Dominguez Perez

Re: Duda ejercicio 2 simulacro

de Santiago Correa Perini -

Se comentó acá que el cantidad 0 antes de salir del if principal tiene que ser un 1. Eso soluciona no comerse en la cuenta los bits que proporcionan cambios en la tira y también lo que decis, ya que pasaría al else pero no manda nada porque cantidad está inicializado en 0 y cuando vuelve a iterar ya tiene cantidad en 1 y en bit_transmitido 1.