Mostrando entradas con la etiqueta Games. Mostrar todas las entradas
Mostrando entradas con la etiqueta Games. Mostrar todas las entradas

viernes, 21 de febrero de 2014

Palíndromos en Código Morse

Un palíndromo (del griego palin dromein, otra vez, nuevamente o de nuevo) es una palabra, número o frase que se lee igual hacia adelante que hacia atrás. Si se trata de un número, se denomina capicúa. En el caso de las frases palindrómicas, a medida que se hacen mas extensas, se complejiza su comprensión, sin embargo, según demuestran los linguistas, conservan su valor sintáctico.


En la Gráfica y el Arte

Existen numerosos ejemplos de la aplicación de la simetría reversible, en el arte, la escultura y los grafismos.

Un Palíndromo Gráfico

Las palabras EARTH, AIR, FIRE, y WATER, además de representar los 4 elementos primordiales de la antigüedad, y hoy, los 4 estados de la materia, están delineadas con una tipografía especial y dispuestas de modo tal que pueden leerse en forma simétrica.


Combina texto y gráfica

En las figuras anteriores encontramos la simetría, exclusivamente en la forma gráfica, en la primera y en ambos, textos y gráfica, en la segunda.


Palíndromos y Belleza

De acuerdo con los más recientes estudios científicos, realizados por Anthony Little de la Universidad de Stirling, Escocia y Annika Paukner del Instituto Nacional de la Salud en EE.UU, existe una correlación entre la simetría facial y el estado de salud.


El rostro simétrico de Scarlet Johannson


Números y Letras

Números como el 6123216 son capicúa, y consecuentemente, son palíndromos. ABATATABA, es un ejemplo de una palabra palindrómica, como también lo es la palabra SOMETEMOS.

La más clásica frase palindrómica del español es "dabale arroz a la zorra el abad". En inglés, también existe una frase palindrómica muy famosa "A man, a plan, a canal: Panama". Y de la serie de dibujos animados Los Simpson, se extrajo el sigüiente palíndromo: "Rise to vote, sir".


¿Palíndromos Musicales?

Menos conocidas son las expresiones palindrómicas musicales, pero las hay. Por ejemplo, la sinfonía Nº47 de Joseph Haydn tiene el sobrenombre "el palíndromo" por cuanto su tercer movimiento forma un palíndromo, en el que la segunda mitad del movimiento está compuesta con la repetición de la primera mitad, pero a la inversa.

Si bien hay mucho ejemplos de partituras palindrómicas, el Cánon del Cangrejo de Johann Sebastian Bach es emblemático, y lo pueden ver ejemplificado en el siguiente video:

El Cánon del Cangrejo


Palíndromos en Código Morse

En este artículo, les presento la posibilidad de encontrar palíndromos en sistemas de código, tales como, la escritura, la música y el arte, entre otras.

Una forma de codificar el texto que se usaba ampliamente a principios del siglo XX, con el auge de las radiocomunicaciones, es el Código Morse. La idea es presentar el tema y proponer un pequeño programa en JavaScript que pueden utilizar en esta misma página para probar palabras y detectar si son o no palíndromos.


Detector de Palíndromos Morse
Palabra:
Resultado:

Lista de Palíndromos (Morse) en Inglés

A continuación les presento una breve lista de palabras que responden a una codificación Morse palindrómica y pueden probar con el "detector".

Palíndromos en Inglés
INTEND POOPCHEEK
HERBS ACETATECOHORT
USED TAINTSTARTS
WEEP ALIKEAFTER
FAMINE VISITSETCHING
QUEENLY GOATSKIRTS
HISSES SCENTSSLEEVES


En Castellano, como palíndromo morse, les propongo la palabra VILLAS, y espero que aquellos que les interese el tema encuentren muchas mas.

Piensen también que este principio se puede aplicar a otras formas de codificación, como por ejemplo, el binario.

En una próxima entrega, publicaré el programa fuente del "detector" en JavaScript, sin embargo, es bastante sencillo de realizar, para cualquier programador novato. Se trata simplemente de una matríz que contiene el Código Morse dentro de una función que recibe una cadena de texto y devuelve una cadena de puntos y rayas. Luego se le quitan los espacios entre puntos y rayas y se compara la cadena al original con la invertida.

¡FIN!

Sergio Otaño

martes, 11 de diciembre de 2012

Torres de Hanoi en RPG-II

Torres de Hanoi en COBOL

Torres de Hanoi en Excel

Torres de Hanoi en ET-3400

Torres de Hanoi en Strawberry Prolog

sábado, 13 de octubre de 2012

Hanoi en Assembler A86

El punto de partida del peregrinaje de Hanoi fue la implementación del algoritmo de las Torres de Hanoi en lenguaje de máquina del microprocesador 6800 de Motorola. Para "programarlo", tuve que escribir un pseudo código, pasarlo a lenguaje ensamblador de 6800, posteriormente “ensamblarlo” en el papel, instrucción por instrucción, para luego ingresarlo por medio de un teclado hexadecimal, directamente en la memoria del MEK-6800.

Fig. 1 Teclado del MEK-6800

En memoria de ese acontecimiento, hace unos años repetí la experiencia, pero en esa ocasión, con una PC y por medio del Debug de DOS. Hoy, tanto el código fuente de la versión "light" como la versión "de Luxe" se perdieron en alguna de las tantas migraciones de PC. Pero, el artículo que publiqué en este blog aun permanece, de manera que es lo que usaré como punto de partida para la realizar esta nueva versión en A86.

Vean el Proceso Completo

El video muestra el código fuente en A86, el proceso de compilación y su puesta en funcionamiento.

El A86 es un Macroassembler, de manera que el código que usé para ensamblar con Debug requerirá varias modificaciones para que el A86 lo acepte y me genere un ejecutable.

El Código Original

El siguiente listado corresponde al código tal como está publicado en este blog: Reursion and Machine Language.

            

Listado 1

Si observamos en detalle el Listado 1, notaremos la aparente ausencia de "variables", tampoco se observan "procedimientos" o "subrutinas". En realidad, tanto las variables como las subrutinas están ahí, solo que no tienen nombre, son solo posiciones en la memoria.

La primera tarea consiste en asignar nombres "simbólicos" a esas posiciones de memoria, para convencer al A86 de que se trata de un programa en lenguaje ensamblador y no de una lista de compras. Para eso, primero vamos a ensamblar el código (con Debug), para determinar donde están las posiciones de memoria a las que hacemos referencia.

Compilación con Debug

E:\TC\A86>debug <hanoi.txt

El Debug genera un archivo ejecutable .COM

Pruebo el Funcionamiento

E:\TC\A86>hanoi
1 A B 2 A C 1 B C 3 A B 1 C A 2 C B 1 A B 4 A C 1 B C 2 B A 1 C A 3 B C 1 A B 2 A C 1 B C

Funciona!

Para ahorrar tiempo

  • Genero un listado con el debug
  • E:\TC\A86>debug hanoi.com >prog.txt
  • Luego escribo cinco veces u y luego q.

Obtengo el siguiente listado

            

Listado 2

Procesamiento con Excel

Esta es una de las aplicaciones prácticas de Excel, nos permite trabajar con texto en forma tabular y aplicar funciones para agregarle o quitarle elementos (también es muy útil para trabajar con páginas web).

  • Separamos las direcciones de las instrucciones (B y D).
  • Insertamos una columna (C).
  • Asignamos Nombres a las direcciones representativas.
  • Copiamos las columas C y D en un archivo de texto con la extensión .8 que es la extensión de los programas fuentes en A86.

Listado A86 Coompleto

            

Listado 3 Programa Completo en A86

Compilación y Prueba

E:\TC\A86>A86 HANOI.8
A86 macro assembler, V3.72 Copyright 1994 Eric Isaacson
Source:
HANOI.8
Object: HANOI.COM
Symbols: HANOI.SYM

E:\TC\A86>HANOI
1 A C
2 A B
1 C B
3 A C
1 B A
2 B C
1 A C

El código funciona perfectamente e incluye la generación del carácter "\n" o (0D0A) provisto por la subrutina NL, para mejorar la salida por pantalla. El A86 genera un archivo .COM y no requiere enlazarlo. Este A86 en particular lo bajé del sitio de su autor. Cuando vivía en USA, yo había comprado un A86 (shareware) que generaba .OBJ además de .COM, pero es posible que su autor haya modificado su esquema de distribución.

¡Que tengan un gran día!

Sergio Otaño

jueves, 4 de octubre de 2012

By any Other Name o la Aventura de Hanoi en los Lenguajes

What's in a name? that which we call a rose
 By any other name would smell as sweet
Shakespeare

Introducción

Cuando era niño, me intrigaba mucho un libro que había en la biblioteca de mi casa y solía sacarlo del anaquel y ojearlo con mucho interés, aunque no podía comprender bien de qué se trataba, me daba cuenta que se relacionaba con algo así como un "cerebro electrónico" que podía pensar en forma autónoma. El libro se llamaba Cibernética y su autor era Norbert Wiener. Esta curiosidad me llevó a estudiar informática y a aprender algunos lenguajes de programación.


¿Programar en Todos los Lenguajes? 

La cantidad de lenguajes de programación que existen en la actualidad, aunque finita es muy grande, aún así, pienso que un individuo puede tomar un pequeño algoritmo e implementarlo en, digamos, muchos lenguajes. Por esta razón, desempolvé el viejo algoritmo de la "Torre de Hanoi" para acometer esta aventura de programarlo en tantos lenguajes como me sea posible, y me puse manos a la obra.

El Recorrido de Hanoi Hasta el Momento

Uno de los desafíos de este experimento consiste en obtener los compiladores para probar el código y hacerlo funcionar. Por fortuna, las décadas de Shareware y GNU, junto con la generosidad de muchos Informáticos, han nutrido la web con una amplia colección de Compiladores, Ensambladores, Emuladores e Intérpretes.

Bueno, si, también eché mano de algunos compiladores comerciales que ya pueden considerarse obsoletos, o por lo menos anticuados "legacy software". Pero, qué aventurero que se precie de tal va a renunciar a su hazaña por el simple hecho de evitar recurrir a alguna treta subrepticia.

Además, como mi intención es que aquellos lectores interesados puedan reproducir la experiencia y sacar de paseo su algoritmo favorito en los lenguajes de elección, escogí los compiladores para la plataforma más ubicua del mundo PC Win/Dos/Unix (muchos compiladores disponen también versiones para Mac y Workstarions).

Voy a publicar una entrada para cada lenguaje con comentarios y recomendaciones y le voy a agregar el enlace para poder acceder en forma directa. Además, a medida que pruebe otros lenguajes, la lista de abajo se irá acrecentando.

La siguiente es una lista de todos los lenguajes en que programé el algoritmo de las Torres de Hanoi hasta el momento.

Debug "Assembler"

Quick Basic

Visual Basic 1.0

QBasic

Java

LOGO

VB.NET

PROLOG-2

Assembler A86

Strawberry Prolog

Turbo C++

Turbo Pascal

LISP

XPL0

Turbo Prolog

dBase III Plus

Clipper

RM-COBOL

ASP

FORTRAN

JavaScript/HTML

ALGOL

Python

Jython

APL

PLI

Modula-2

RPG-II

Emulador EM6800

MEK-6800

Excel VBA

ET-3400

ADA

C# & ASP.NET


Que tengan un gran día,

Sergio Otaño

lunes, 10 de septiembre de 2012

Five Cards

La modalidad de poker Five Cards Draw (Cinco Cartas) es tal vez de las más clásicas y famosas. De esta forma era jugado en los "Saloon" del lejano oeste y en los barcos de vapor que recorrían el Mississippi que solían ser timoneados nada menos que por Mark Twain.

Mi Versión del Juego

En la Fig. 1 se puede observar mi propia versión del Cinco Cartas que está escrito en Java y funciona como applet (on line) o como aplicación. Lo pueden jugar en línea al hacer clic sobre la Fig. 1 o, si lo prefieren…

Lo pueden bajar aquí: Download Cinco Cartas

En esta versión se juega con la mano abierta y el jugador decide con cuantas cartas se queda, al aceptar la mano automáticamente se computa su jugada. El cuadro de lista ofrece un análisis de la mano. Es ideal para aprender a jugar.


¡Hasta Pronto!

Sergio Otaño

lunes, 27 de agosto de 2012

Enigma: Las Vegas

Recuerdo que mi padre era un gran aficionado a los juegos de palabras cruzadas y los enigmas de las revistas de ingenio. En particular solía comprar la revista Joker que traía una gran cantidad de enigmas y acertijos, a diferencia de otras publicaciones que se limitaban casi exclusivamente a los juegos de letras.

Mi Versión del Acertijo

De chico, yo solía incautar los ejemplares de "la Joker" que encontraba por ahí y resolver alguno de los enigmas. Mis favoritos eran los enigmas matemáticos, los rebus y los juegos de lógica.

En especial me gustaba un enigma que consistía en un grupo de 16 cartas de poker de las que se indicaba el palo en el lomo de la carta, mientras que en las columnas y filas se indicaba el valor de las cartas correspondientes a esas filas y columnas en cuestión. El lector debía deducir a qué carta correspondía cada una de las 16.

En la Fig. 1 se observa la versión del juego en Java a la que se puede acceder Aquí: Enigma Las Vegas en Java. Hice también una versión en Visual Basic y otra En ASP a la que se puede acceder Aquí: Enigma Las Vegas en ASP.

Fig. 2 El Enigma Resuelto

Como hacía mucho tiempo que no veía este juego por ningún lado, decidí programarlo en JavaScript para poder jugarlo en mi equipo, mas adelante algunos amigos comenzaron a jugarlo y como les gustó bastante hice una versión On Line para jugarlo en los viajes.

¡Hasta la Vista!

Sergio Otaño

miércoles, 22 de agosto de 2012

El Misterioso Tangram

Tiempo atrás, para mi cumpleaños me regalaron el libro "Het oude Chinese vormenspel" del autor alemán DuMont's Kopf-Zerbrecher. Para ponerlo en términos simples, el libro versa sobre el juego chino Chi Chiao Pan, conocido por nosotros como Tangram y contiene una gran variedad de diseños a modo de ejemplo.

Mi Versión del Tangram

Esta es mi propia versión del Tangram escrito en Java que puede jugarse on line ya que funciona como applet o puede bajarse y usarse como aplicación.

Para jugar On LIne haga clic en la Fig. 1

Lo pueden bajar aquí: TANGRAM

Se ejecuta: Java -jar Tangram.jar

Es muy fácil de usar:

- Con el botón Ejemplos se pueden ver algunos ejemplos cargados con las fichas bastante separadas para facilitar la reproducción.

- Con el botón Colores se pueden seleccionar hasta 10 colores distintos.

- Para mover las fichas, arrastrar con el ratón y para girarlas se sostiene la ficha con el ratón y se rota con las flechas Der e Izq. La flecha hacia arriba se usa para voltear el paralelogramo.

- Al hacer clic en la leyenda que se encuentra debajo de los botones verá la AYUDA

¿Qué es el Tangram?

El Tangram está formado por un conjunto de piezas (o TANs) que se obtienen al recortar un cuadrado y pueden combinarse (sin superponerlas) de diferentes maneras para construir una gran variedad de diseños incluyendo figuras geométricas.

Tal como señala Thomas Hill en su libro "Puzzles to Teach Geometry", al Tangram se lo puede emplear en la enseñanza de la matemáticas como introducción a conceptos de geometría plana. Otro pequeño libro denominado "The Fashionable Chinese Puzzle" aborda aspectos más lúdicos del Tangram. El juego consiste en usar todas las piezas para construir diferentes formas. Aunque originalmente estaban catalogadas tan solo algunos cientos de formas, hoy día existen más de 10.000.

Si bien el Tangram es antiguo, es mucho menos de lo que señala Sam Loyd en su obra "The Eighth Book of Tan" que no es más que un relato fabulado similar al legendario relato de Édouard Lucas sobre las Torres de Brahma, también conocidas como las Torres de Hannoi, de ambos temas pueden leer los siguientes artículos de mi blog aqui: La Torre de Brahma y Hannoi Towers (Machine Language)

Ejercite su Cerebro

Los juegos constituyen una magnifica forma de estimular y desafiar al cerebro. Ya sea que se trate de sudokus, crucigramas, sopa de letras o algún otro tipo de "brain trainer", el hecho es que son recursos legítimos para mejorar la agilidad mental y la capacidad de memorizar. Estos juegos, además de divertidos están fundamentados en las funciones lógicas y en las capacidades verbales, matemáticas y espaciales entre otras.

Del mismo modo que entrenamos los músculos para mejorar la capacidades y conservar la salud, el mayor beneficio se obtiene practicando estos juegos un poco cada día ya que operan por frecuencia más que por intensidad.

¡Buenos Juegos!

Sergio Otaño

miércoles, 8 de agosto de 2012

Juegos Educativos Virtuales

Desde el punto de vista de la psicopedagogía, los juegos, además de ser una fuente de entretenimiento, también contribuyen al desarrollo del pensamiento. El carácter didáctico del juego se pone en evidencia y se potencia al combinarlo con las posibilidades que ofrecen las computadoras. En este artículo presento uno de los ejemplos clásicos de este tipo de juegos: El Ahorcado.

Fig. 1 El Ahorcado

El Ahorcado

El Ahorcado pertenece a la categoría de juegos apropiados para desarrollar habilidades lingüísticas, aprender nuevos términos y facilitar su memorización. Por esta razón, el Ahorcado se emplea asiduamente en la enseñanza de idiomas.

Desde el punto de vista del diseño de programas, observamos que con herramientas muy simples, podemos empaquetar un programa de propósito general que permita al docente ajustarlo a sus necesidades. Tanto los niveles de operatividad cognitiva como las transiciones entre esos niveles quedan librados a su discreción.

Otra consideración a la hora de diseñar un juego de este tipo es tomar en cuenta la institución que hará uso del recurso. ya que algunas organizaciones repudian el uso de imágenes violentas (como el Ahorcado) en sus recursos educativos. En estos casos se puede apelar a otros esquemas gráficos, tales como un malabarista que deja caer objetos, o un mozo que deja caer platos a medida que pierde puntos, por ejemplo.

En este ejemplo de juego de “el ahorcado”, la lista de términos separados por "\n" se puede cargar en el archivo JAR, mientras que el nombre del archivo se podría seleccionar por medio de un combo box en la página web. En esta versión del programa no le puse pistas de referencia para el jugador, esto se podría hacer simplemente mediante el trámite de separar los registros por medio de una coma.

¡Que tengan un gran día!

Sergio Otaño

lunes, 19 de diciembre de 2011

Gorilas en Java

Aquellos que iniciaron su sendero informático en la década de 1990 recordarán el sistema operativo DOS, el Windows 3.0 y aquellos juegos como el Super Mario, Príncipe de Persia y Wolfenstein entre tantos otros. El DOS incluía en esos días el QBasic.exe, un editor e intérprete de Basic muy completo. Dentro de este conjunto venía el programa Gorillas.bas muy popular en esos días. Jorilas es una versión Java de aquél clásico.

Fig. 1 Gorilas en Java

Como se Juega

El juego en cuestión consiste en hacer estallar al oponente por medio de bananas explosivas. La característica que hizo este juego bastante popular entre informáticos y programadores es que había que realizar un ejercicio de trayectoria para aproximar mentalmente el rango del impacto y el ángulo necesario para evitar los edificios (bastante similar al tipo de cálculo que deben realizar los artilleros).

En este caso hay dos gorilas Maximus a la izquierda y Eslavon a la derecha que disparan alternativamente las bananas en los ángulos y con la fuerza apropiada para hacer volar al oponente. Sin embargo pueden estallar ellos mismos si eligen algunas opciones de velocidad o ángulo.

Imágenes

En el aspecto gráfico, traté al máximo de mantener el estilo y los colores del original, sin embargo el sol es un poco más grande y lo dibujé con una combinación de los métodos fillOval(), drawLine() y cálculos trigonométricos. Los gorilas están grabados del programa original en una máquina con XP ya que en W7 y Vista no permiten ejecutar DOS en pantalla completa (una posibilidad para hacerlo sería por medio de DOSBox o un emulador similar). Las bananas son en realidad 1 banana que bajé de internet, la reduje y la procesé en iaza.com donde la convertí a gif transparente y luego hice las rotaciones.

Sonidos

Con respecto a los sonidos, probé grabar los originales pero sonaban muy mal de manera que utilicé sonidos de galerías gratuitas y en un caso, edité con el Vegas un pequeño fragmento de una pista de percusión africana, lo subí a convertfiles.com para generar los archivos de audio .au requeridos por Java.

Sitios recomendados:

¡Que tengan un gran día!

Sergio Otaño