miércoles, 1 de julio de 2015

Sesión 8: Ordenando la Cara Amarilla

Tras dejar la cara amarilla completada pero desordenada, llega el momento de ordenarla. Se dijo en su momento que para ello utilizábamos la Secuencia B. Reiteradamente, si fuera necesario. Pero una vez más, la cosa no es tan sencilla.

La secuencia B consiste en estos 12 movimientos que ya tenemos reunidos en un bloque personalizado del mismo nombre.

Básicamente lo que consigue es permutar 3 de los cuatro vértices de la cara amarilla, sin cambiar la cara blanca opuesta ya terminada.

Para que la comprender y aplicar la secuencia B, supongamos que vemos el cubo tomando como frontal la cara señalada por la F.


Si ordenamos los vértice de izquierda a derecha y de arriba a abajo, vemos que la secuencia coloca el primer vértice en el lugar del tercero, el segundo en el lugar del primero y el tercero en el lugar del segundo. El cuarto vértice, que podemos tomar como referencia, no se mueve.




Esto nos permitiría resolver el caso mostrado. O, si aplicamos la secuencia dos veces, resolverla para el caso de que el vértice amarillo-rojo-verde estuviera en el primer lugar, el vértice amarillo-naranja-azul en el segundo y el amarillo-verde-naranja en el tercero. Pero hay otras combinaciones que no se resolverían simplemente por la aplicación reiterada de la secuencia B. Al menos, tomando el vértice amarillo-azul-rojo como referencia inmóvil.

¿Cuantas combinaciones podemos encontrarnos? Si tomamos la cuarta esquina (amarillo-azul-rojo) como referencia, la siguiente esquina en ofrecerse al lector del colores tras un bloque Mesaderecha sería la que hemos llamada tercera esquina y ésta ofrecerías tres posibilidades (los trés vértices restantes). Si volvemos a gira la bandeja hacia la derecha para leer la que hemos llamado primera esquina, para cada una de aquellas tres posibilidadades, sólo hay dos posibilidades (los dos vértices restantes) que dejan también definidos los colores por eliminación de la que sería la última esquina por leer: la segunda (en otras palabras: no es necesario muestrear esta segunda-última esquina).

En consecuencia, si tomamos la cuarta esquina (amarillo-azul-rojo) como referencia, sólo hay seis casos posibles (3x2) en esta cara amarilla desordenada. Sólo falta definir qué combinación de secuencias B sería necesaria para ordenar esta cara amarilla en cada uno de estos 6 casos. Bueno, tres están ya definidos: los dos comentados y el caso de que nos encontráramos la cara amarilla ya ordenada y no fuera necesario aplicar la secuencia B.

Retomemos el programa principal 22jun en el punto en que lo dejamos.



Si abrimos el primer bloque personalizado Enc esqAmAzR,...


 ... vemos que consiste en
  • Un giro de la bandeja del cubo hacia la izquierda (Mesaizquierda)
  • Un muestreo de los colores del vértice (Leeresquina)
  • Un cálculo del valor numérico identificativo de esa esquina (Proddiv)
  • Una comparación del valor Proddiv obtenido con la constante 96
  • Que todo los anterior está dentro de un bucle condicionado a que la variable Proddiv sea igual a 96.
  • Y un mensaje en pantalla del ladrillo.

Básicamente se trata de girar para comprobar si está ahí el vértice amarillo-azul-rojo, que convertiremos en referencia. Si lo encontramos, saldremos del bucle y un mensaje en pantalla nos dirá que ya lo ha encontrado. Si no, volverá a empezar el bucle hasta que encuentre el vértice girando el cubo.

Este sería un buen momento para mostrar los valores numéricos de la variable Proddiv que tendrían estos vértices.


Aunque es obvio que en estos momentos sólo nos interesan las cuatro primeras combinaciones, me gustaría resaltar que hay valores de Provdiv que coinciden con otros de la cara blanca como 30, 120, 600 ó 720. Esto no debería significar ningún problema porque, cuando resolvíamos la cara blanca del cubo, lo primero que hacíamos era comprobar si el vértice tenía una cara blanca. Esto evita la confusión con los vértices con una cara amarilla.

El siguiente bloque personalizado del programa principal es  SecByMesas.



Si lo abrimos,...


... vemos que lo primero que hace es girar a la derecha, muestrear los colores del vértice y calcular la variable Proddiv de este vértice. Este vértice es el que llamamos tercero puesto que anteriormente habíamos hallado el vértice cuarto (am-az-ro) para usarlo como referencia.

A continuación, y dependiendo del valor Proddiv de este tercer vértice (120, 400 ó 720), escogemos un "camino" entre los tres posibles de una bifurcación (el que se muestra en la ilustración es el asociaciado a 400. Pero en su primeros cinco bloques no es diferente de los otros dos).

Dentro de estos tres "caminos" giramos otra vez la bandeja a la derecha, muestreamos los colores de la esquina y calculamos el valor Proddiv de ésta, que sería la llamada primera esquina. Este valor sólo puede ser uno de los restantes: si 96 era el valor de la referencia y, en el caso mostrado en la ilustración, la tercera esquina valía 400, las esquina que estamos estudiando ahora sólo puede tener como valores 120 ó 720. Por eso, la bifurcación dirigida por este valor es de las "clásicas" o de "dos caminos". Pero antes de hacer estos "itinerarios" conviene girar la bandeja dos veces a la izquierda para devolver el vértice am-az-ro a la esquina cuarta (o de referencia).

Estos dos "caminos" son:
  • el primero, es el ejemplo que se indicó gráficamente al principio de la entrada. Basta con aplicar una secuencia B para que la cara amarilla quede completada y ordenada.
  • el segundo es más complicado: para su resolución son necesarias dos secuencias B, dos giros de la bandeja a la derecha y otra secuencia B más.

De las seis posibilidades de ordenación que ofrece la cara amarilla, tres ofrecen cierta complicación. Para hallar la combinación de secuencias B y de giros de bandeja que permita su resolución es necesario cierto ejercicio mental con la ayuda de un lápiz y un papel que se le puede exigir a los alumnos.

En todo caso, las seis posibilidades con las seis secuencias que ordenan la cara amarilla se muestran a continuación.
  • Esquina 3ª (120) + esquina 1ª (400) = Mesaizquierda + Mesaizquierda + Secuencia B.
  • Esquina 3ª (120)+ esquina1ª (720) = Mensaje en pantalla "Secuencia B innecesaria": la cara amarilla está ya ordenada.
  • Esquina 3ª (400) + esquina 1ª (120) = Secuencia B
  • Esquina 3ª (400) + esquina 1ª (720) = Secuencia B + Secuencia B + Mesaderecha + Mesaderecha + Secuencia B
  • Esquina 3ª (720) + esquina 1ª (120) = Secuencia B + Mesaderecha + Mesaderecha + Secuencia B
  • Esquina 3ª (720) + esquina 1ª (400) = Mesaizquierda + Secuencia B
Ya tenemos la cara amarilla completada y ordenada al igual que su cara opuesta blanca. Ya sólo nos queda girar una de ellas para que coincidan los colores de sus caras adyacentes. De eso se encargan los dos siguientes bloques personalizados del programa principal 22jun.

El primero es Enc esqAm-Az-R: ya lo conocemos de antes. Es el que gira la bandeja hasta encontrar el vértice amarillo-azul-rojo.
El segundo es Tachan (pronúnciese Ta-chán: es la coda del programa). Si lo abrimos, ...


...vemos que, una vez encontrada el vértice am-az-ro, damos dos volteos: ahora tenemos la cara blanca hacia arriba y la amarilla hacia abajo. Acto seguido, leemos un vértice de la cara blanca ordenada y calculamos su valor Proddiv para elegir una de las cuatro posibilidades de la bifurcación siguiente.
  • si el vértice encontrado es el blanco-negro-verde (120): hace falta girar 90º la cara amarilla (ahora cara inferior) a la izquierda.
  • si el vértice encontrado es el  blanco-verde-rojo (216): hace falta girar 90º la cara amarilla dos veces a la izquierda (o a la derecha).
  • si el vértice encontrado es el blanco-azul-negro (720): no hace falta nada. La cara blanca y la amarilla ya coinciden en sus caras adyacentes.
  • si el vértice encontrado es el blanco-rojo-azul (900): hace falta girar 90º la cara amarilla hacia la derecha.
En este vídeo vemos una demostración casi completa de la secuencia B (empieza a grabar ya empezada la secuencia A  y se queda el móvil sin batería justo antes de terminar).



Demasiado exhaustos para acordarnos de poner un mensaje en pantalla o un pitido (*) celebrando que hemos terminado de programar la resolución del cubo, colocamos el bloque Stop y finalizamos la ejecución del programa.

En este otro vídeo empezamos ofreciéndole al prototipo el cubo con la cara blanca ya realizada. Evidentemente, aun así comprueba las ocho esquinas en busca de vértices con caras blanca. Es interesante porque perfectamente la secuencia A y la secuencia B, equivocándose sólo en el momento del Tachán: estaba depurando el programa.



Este otro vídeo muestra la resolución completa con un error al final del todo en la secuencia B: comienza a aplicarla sin tener la precaución de hacer dos giros de bandeja a la izquierda para volver a la esquina de referencia. De ahí el fallo último.


(*) En líneas generales, no conviene colocar a modo de "chivatos" bloques "visualizar" con gráficos o bloques "sonido" variados, para no engordar innecesariamente el tamaño del programa compilado: ya sabemos que con los 70 KB de la memoria del ladrillo vamos muy justitos. Nuestros chivatos serán mensajes de texto y un único tipo de pitido.