En este mundillo nuestro de la programación todo se expresa internamente con unos o ceros, y no hay nada más. No existe el 2, sino el 10; no hay más números, ni ninguna letra, sino que todo se almacena utilizando estos dos dígitos como base.
Y precisamente esa base es la que permite que existan muchos programas como el que os presentamos para que adivinéis hoy en ¿De dónde es este código?. El hecho de que existan patrones fácilmente reconocibles en esos unos y ceros, que no existirían si miramos los valores o caracteres representados, da sentido a este proyecto en cuestión.
Las pistas
Tanto la frase del título como la imagen que abre el artículo pertenecen a una película de Hollywood muy centrada en la industria del software y las bondades del software libre. En la imagen se ve fugazmente el código de este programa, aunque se nos hace creer que está siendo escrito por uno de los personajes en un momento de inspiración.
Este algoritmo es más lento y consume más memoria que sus principales competidores, pero a cambio de esa ineficiencia ofrece unos resultados bastante mejores en el cometido para el que fueron diseñados.
Tardó cuatro años en pasar de su primera versión, la 0.15, hasta la considerada estable 1.0. Y cuatro son también los años que lleva sin actualizarse, ya que este tipo de algoritmos, con gran base matemática, son poco propensos a incluir novedades.
El código
Os dejamos un extracto de la clase que contiene la funcionalidad principal del programa. Como podéis ver, la parte que os mostramos se trata de una única función en C que trabaja con bloques, punteros...
120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 | static void generate▒▒▒Values ( EState* s ) { UChar yy[256]; Int32 i, j; Int32 zPend; Int32 wr; Int32 EOB; UInt32* ptr = s->ptr; UChar* block = s->block; UInt16* mt▒v = s->mt▒v; makeMaps_e ( s ); EOB = s->nInUse+1; for (i = 0; i <= EOB; i++) s->mt▒Freq[i] = 0; wr = 0; zPend = 0; for (i = 0; i < s->nInUse; i++) yy[i] = (UChar) i; for (i = 0; i < s->nblock; i++) { UChar ll_i; AssertD ( wr <= i, "generate▒▒▒Values(1)" ); j = ptr[i]-1; if (j < 0) j += s->nblock; ll_i = s->unseqToSeq[block[j]]; AssertD ( ll_i < s->nInUse, "generate▒▒▒Values(2a)" ); if (yy[0] == ll_i) { zPend++; } else { if (zPend > 0) { zPend--; while (True) { if (zPend & 1) { mt▒v[wr] = ▒▒_RUNB; wr++; s->mt▒Freq[▒▒_RUNB]++; } else { mt▒v[wr] = ▒▒_RUNA; wr++; s->mt▒Freq[▒▒_RUNA]++; } if (zPend < 2) break ; zPend = (zPend - 2) / 2; }; zPend = 0; } { register UChar rtmp; register UChar* ryy_j; register UChar rll_i; rtmp = yy[1]; yy[1] = yy[0]; ryy_j = &(yy[1]); rll_i = ll_i; while ( rll_i != rtmp ) { register UChar rtmp2; ryy_j++; rtmp2 = rtmp; rtmp = *ryy_j; *ryy_j = rtmp2; }; yy[0] = rtmp; j = ryy_j - &(yy[0]); mt▒v[wr] = j+1; wr++; s->mt▒Freq[j+1]++; } } } if (zPend > 0) { zPend--; while (True) { if (zPend & 1) { mt▒v[wr] = ▒▒_RUNB; wr++; s->mt▒Freq[▒▒_RUNB]++; } else { mt▒v[wr] = ▒▒_RUNA; wr++; s->mt▒Freq[▒▒_RUNA]++; } if (zPend < 2) break ; zPend = (zPend - 2) / 2; }; zPend = 0; } mt▒v[wr] = EOB; wr++; s->mt▒Freq[EOB]++; s->nmt▒ = wr; } |
El reto
Como siempre, os preguntamos a qué proyecto pertenece este código, pero tenemos otras cuantas preguntas relacionadas con él:
-
Aunque el proyecto está liderado por un desarrollador británico, su base matemática es un algoritmo de dos compatriotas suyos. ¿Quiénes son?
-
Otro paso importante de su ejecución es la codificación diseñada por un pionero de la informática, nacido en Ohio. ¿De quién hablamos?
-
¿Cúal es el nombre de la película donde podemos ver este código?
-
¿Qué importantes miembros de la comunidad del Software Libre hicieron cameos en esta película?
La solución al anterior reto
Como muchos pudisteis reconocer, el código que os traíamos la semana pasada pertenecía a Gimp, desarrollado en la Universidad de Berkeley y cuya mascota, Wilber, aparece entre otros en el videojuego SuperTuxKart.
¿Os resultará igual de fácil en esta ocasión?