jueves, 2 de julio de 2015

Sesión 7: Completando la Cara Amarilla

Tras completar la cara blanca, tenemos la cara amarilla incompleta hacia arriba. Es el momento de empezar la segunda etapa consistente en completar esta cara, pero sin que sus vértices estén ordenados. Todo esto, por supuesto, sin deshacer la cara blanca que tanto esfuerzo le ha costado a nuestro robot montar (y a nosotros programar).

Para ello fijémonos en la siguiente imagen:


Esta tabla nos muestra los ocho posibles casos que nos podemos encontrar cuando empecemos a estudiar la cara amarilla. Si la F nos señala la cara frontal del cubo, los cuatro cuadrados  de cada dibujo nos muestran las cuatro caras superiores de los cuatro vértices: estas caras pueden ser la amarilla... O no serlo: en este caso se mostrarán de color gris y las "solapas" amarillas nos mostrarán la situación de la cara amarilla que se ofrecerían, llegado al momento, a los sensores que leen las caras frontal y derecha. Quede claro que el vértice que se ve abajo a la derecha en cada dibujo es el que se ofrece al sensor triple de colores.

Si consideremos que en cada vértice la cara amarilla puede estar en tres caras diferentes y que hay cuatro vértices, las combinaciones serían 3 elevado a cuatro, esto es... ¡81 combinaciones diferentes!. En realidad no son tantas: muchas no son mecánicamente posibles * (por ejemplo, en los ocho casos arriba mostrados ninguno tiene tres caras amarillas hacia arriba). Eso elimina muchas posibilidades dejándolas sólo en 27 casos reales. Por otra parte, estos 27 casos posibles, si los giramos en sentido horario 90º, 180º, o 270º, coinciden unos con otros: en realidad, a efectos de resolución, sólo son dignos de consideración los 8 casos mostrados.

Recordamos que se ha dicho aquí que la secuencia A es la que completa la cara amarilla aunque con los vértices desordenados. Dependiendo de cual de los ocho casos nos encontremos aplicaremos la secuencia A un número de veces diferentes. O no la aplicaremos, si nos encontráramos con el caso 8. En realidad, al aplicar la secuencia A vamos pasando de uno de los ochos casos a otro hasta completar un recorrido que debe terminar en el caso 8 como se muestra a continuación.



Dicho de otra manera, cada flecha roja en el esquema de abajo es una aplicación de la secuencia A. Pero, como veremos posteriormente, la cosa no es tan simple.

Veamos cómo se programa esto en el robot. Lo primero es crear una variable de nombre sumatrinaria: se trata del valor equivalente decimal que tendría un número en base 3 de cuatro dígitos. Para los que no entiendan esto útimo, nos referimos a un número de cuatro cifras donde cada una de estas cifras sólo pueden adoptar los valores 2, 1 y 0. Como ejemplos valdrían 2102 , 0112 , 1021,  2222 ó 0000. El valor decimal equivalente lo obtenemos si sumamos el resultado de multiplicar el primer dígito por 27 (3 al cubo), el segundo dígito multiplicado por 9 (3 al cuadrado), el tercer dígito por 3 (3 elevado a uno) y el cuarto dígito por 1 (3 elevado a cero). Así, el equivalente decimal de 2102 sería 2x27 + 1x9 + 0x3 + 2x1 = 65. La cifra más alta (2222) ofrecería un valor equivalente decimal de 80 y la más baja (0000) equivaldría a 0.


Empezamos asignándole a sumatrinaria el valor 0: constante 0 (maletín con candado) = variable sumatrinaria (maletín).
A continuación aparece el bloque personalizado suma 27. Si lo abrimos vemos en su interior:


Son los ya conocidos bloques personalizados Mesaderecha, Leeresquina y uno nuevo 0o1o2. Si abrimos este último vemos


En este bloque si, tras la lectura del sensor triple de colores, el color amarillo (valor 4) apareciera en la cara superior del vértice, la variable 210 valdría cero. Si aparece en la cara frontal, 210 valdrá 1. Y si el amarillo aparece en la cara derecha, 210 valdrá 2.


A continuación, multiplicamos 210 por 27 y se lo sumamos a sumatrinaria.

Si volvemos al programa principal 22jun, el siguiente bloque personalizado es Suma 9: es idéntico a suma 27 con la diferencia de que el valor de la variable 210 se multiplica por 9 antes de sumarse a sumatrinaria. Lo mismo podemos decir de Suma 3: la varialbe 210 se multiplica por 3 y se suma a sumatrinaria.


Por último, los bloques Mesaderecha, Leeresquina, 0o1o2 y Suma 1 (me olvidé de agruparlos en un solo bloque) nos aportan el último sumando para el cálculo de la variable sumatrinaria. Este me permitirá distinguir en cuál de los 8 casos se encuentra la cara amarilla del cubo.

Tras un nuevo bloque Mesaderecha, llegamos a un nuevo bloque personalizado: PresecA. Si lo abrimos, vemos...


Así, dependiendo del valor de sumatrinaria ejecutaremos una de 27 secuencias posibles. En la secuencia mostrada en la imagen superior, como resultado de que sumatrinaria valga 13, aparecerá un mensaje en pantalla indicando "Caso 3", le adjudicará a la nueva variable CasosecA el valor 3 y girará la bandeja dos veces hacia la izquierda.

Si hemos entendido lo que hemos hecho (y si no lo hemos entendido, no importa: se explica a continuación), podemos pensar que sería útil publicar aquí una tabla con los 27 valores posibles de sumatrinara, las equivalencias con los 8 casos posibles y los giros que hay que darle al cubo en consecuencia para que coincidan. Pero creo que es algo que se le puede pedir al alumnado. Por ejemplo:
  • el caso 1 se puede presentar de cuatro maneras distintas si, además, giramos su dibujo 90º, 180º ó 270º en sentido horario.
  • el caso 2 sólo puede presentarse de dos  maneras: como se ve en la tabla primera o girado 90º.
  • el caso 8 sólo puede presentarse de una manera: no importa cómo lo giremos.

Si sacamos las 27 maneras en que pueden presentarse en total los 8 casos, podremos calcular los números correspondientes en base 3 y sus equivalentes decimales, además de los giros de bandeja necesarios para que se coloque como se ve en la tabla inicial, lo que tenemos es un bonito ejercicio para que lo hagan los alumnos.

Ahora es cuando explicamos lo que ha hecho el programa: tras el primer giro de la bandeja, esta cara superior de la esquina en estudio (la que se encuentra abajo a la derecha cada dibujo) con el color amarillo hacia arriba en el espacio:  el primer sumando de sumatrinaria valdrá 0x27


A continuación, tras girar el cubo a la derecha, se ha encontrado que la cara amarilla está en la cara frontal. El segundo sumando valdrá 1x9
Tras volver a gira el cubo hacia la derecha, se ha encontrado que la cara amarilla se muestra en la cara frontal: el tercer sumando valdrá 1x3

Y tras el cuarto giro a la derecha,nuevamente la cara amarilla se encuentra en la cara frontal: el cuarto sumando valdrá 1x1.

Sumatrinaria valdrá 0+9+3+1 = 13 y volvemos a girarlo a la derecha dejándolo en la posición inicial.



En consecuencia, identificamos el caso como el 3 de los ocho casos posibles (variable CasesecA = 3) y lo reorientamos girándolo dos veces a la izquierda para que se quede con la orientacion mostrada en la primera tabla primera donde veíamos los ocho casos posibles de la cara amarilla.

En resumen, tras encargarse el bloque PrepsecA de identificar el caso y de girar el cubo para que la cara amarilla incompleta quede orientada como aparece en la tabla primera de esta entrada, el cubo está listo para aplicarle la secuencia A el número de veces que sea necesario. De esto se encarga el bloque personalizado SecAyMesaIq que viene a continuación. Si lo abrimos...


... vemos que si la variable CasosecA vale 3, le aplicamos una secuencia A. Tras los cual  obtenemos un caso 6, pero girado 90º a la derecha:...

... Habrá que girarlo 90º a la izquierda para tener el aspecto de la tabla primera.

 


 Si aplicamos una nueva secuencia A, mostrará un caso 4...


...que necesitará también ser girado a la izquierda para ofrecer el ángulo que tiene en la primera tabla


A continuación, tras otra secuencia A llegamos a un caso 7 también girado a la derecha: 



Es necesario pues, otro giro a la izquierda.



Tras una última secuencia A, llegamos al caso 8: hemos completado la cara amarilla, pero con los vértices desordenados.


 Por eso decíamos que la cosa no es tan simple como se muestra en este gráfico.


 Hay que clarificar cuando es necesario aplicar estos giros a la izquierda entre un caso y otro para reorientar la cara amarilla de acuerdo a la tabla primera. Son sólo tres casos:
  • en la transición de 3 a 6
  • en la transición de 6 a 4
  • en la transición de 4 a 7
Así, éstas son las tareas necesarias dependiendo del caso que nos encontremos
Caso 1: Secuencia A + Secuencia A
Caso 2: Secuencia A + Secuencia A + Secuencia A
Caso 3: Secuencia A+ Mesaizquierda + Secuencia A + Mesaizquierda + Secuencia A + Mesaizquierd + Secuencia A
Caso 4: Secuencia A + Mesaizquierda + Secuencia A
Caso 5: Secuencia A + Secuencia A + Mesaizquierda + Secuencia A + Mesaizquierda + Secuencia A
Caso 6: Secuencia A + Mesa Izquierda + Secuencia A + Mesa Izquierda + Secuencia A
Caso 7: Secuencia A
Caso 8: mensaje en pantalla "Secuencia A innecesaria".

Lo que la secuencia A hace realmente es
- no afectar a la cara contraria
- intercambiar la posicion de las piezas situadas en la 1ª y  3ª esquina, dándole un giro en sentido antihorario a la que ocupará la esquina 1ª
- intercambiar la posición de las piezas situadas en la 2ª y 4ª esquina, dándole un giro en sentido horario a la que ocupará la esquina 4ª.

Ya tenemos el cubo con la cara superior blanca completada y ordenada y la cara opuesta amarilla completada sin ordenar. En la siguiente sesión veremos cómo ordenar esta cara y como cuadrar las dos caras para tener el cubo completamente resuelto.


*Salvo que desmontemos el cubo y lo montemos en una configuración imposible a caso hecho.