Buenas, antes de mirar la solución del ejercicio del asunto me dispuse a realizar la programación en alto nivel del algoritmo "runLengthEncoding" como lo pide dicho ejercicio. Pero cuando me puse a comparar con la solución que subieron me di cuenta que quedó un poco más sencilla mi implementación (a mi entender ya que no tengo un for y un while sino simplemente un for) en alto nivel y por ende me quedaría más sencillo cuando tenga que compilarlo en x86. También tengo entendido como ustedes (profesores) dicen siempre que cuanto más sencillo queda el alto nivel más fácil puede ser compilarlo en x86 posteriormente. Además se suma que justamente este examen yo lo di y me costó entender bien dicho algoritmo por lo cual me dificultó la realización del ejercicio y todo esto me lleva a preguntar: ¿la solución que estoy adjuntando en este post es correcta?.
Por otro lado en la solución que se presenta por los docentes aquí en el EVA, ¿no les faltaría tener en cuenta que el arreglo que reciben como parámetro puede ser vacío? o ¿se puede asumir que por lo menos tiene un elemento?. Porque de ser vacío si entiendo bien la solución como "lengthIn" sería cero no se entraría al for y al restarle uno a la variable "lengthOut", dicha variable quedaría en -1, ¿y eso sería lo correcto? o ¿debería retornar cero ya que ese sería el largo del arreglo que estamos retornando?.
Además en la solución propuesta (sacando el caso que el arreglo de entrada sea vacío) siempre que se sale del for se resta en 1 la variable "lengthOut" antes de utilizar su valor como retorno del algoritmo "runLengthEncoding" y según entiendo ésta variable tiene el índice de la siguiente posición en el arreglo "codif" que tendríamos que utilizar si quisieramos colocar un nuevo elemento por ende éste coincide con la cantidad de elementos del mismo ya que dicho arreglo comienza en cero. Todo esto me lleva a preguntar, ¿Es necesario restarle 1 a dicha variable a la salida del for?.
Desde ya muchas gracias si pudieran aclararme éstas dudas ya que dicho ejercicio no pude realizarlo correctamente en el examen pasado de ésta materia y me gustaría conocer su resolución correcta para estar mejor preparado para este período.
Saludos,
Martín Piperno