Okashini

  • Inicio
  • Webs de lectores
  • Hiragana y Katakana

El reto de la rana

22 ago

Publicado por Kamugo en Programación

No hay comentarios

Kaeru Jump, del japonés kaeru (蛙, rana), es un pequeño juego en flash de inteligencia (o también de probar, probar y probar). El objetivo del juego es que la rana protagonista llegue a cada una de las piedras del escenario. A cada salto, la piedra anterior se hunde en el agua. Los saltos son sólo en ángulos rectos y no se puede saltar hacia atrás.

El reto son diez niveles generados aleatoriamente, a cada cual más difícil. Os reto a ver cuánto tiempo tardáis en acabarlos todos, sin hacer trampas claro.

Solución

Si no consiguieseis acabar todos los niveles, no os desesperéis ni lancéis el teclado por la ventana. Existe un método para resolver este tipo de problemas. En programación se le llama backtracking. Aunque por el nombre parezca algo guapo, no es más que ir probando combinaciones hasta encontrar las que resuelvan el problema (en nuestro caso paramos al encontrar la primera que lo resuelva). Son muchas combinaciones, pero mientras las haga el ordenador a nosotros nos da igual, ¿no?

Para hacerlo funcionar, sólo tenéis que decir la posición inicial, la dirección a la que mira la rana y marcar los checkbox del mapa del nivel, si está marcado es que en el mapa hay una piedra en esa posición. ¡Si leéis desde el lector RSS es probable que no veáis nada!

Fila inicial: Columna inicial: Dirección inicial:

El código

Os pongo la función para calcular la solución en javascript. Se puede comprimir más el código, pero así se entiende mejor. Para llamarla, necesitáis la fila y la columna inicial([cci lang="js"]f[/cci] y [cci lang="js"]c[/cci]), una matriz de booleanos para el [cci lang="js"]tablero[/cci] donde un [cci lang="js"]true[/cci] indica que hay una piedra en esa posición, un [cci lang="js"]Array[/cci] vacío para guardar el [cci lang="js"]camino[/cci] en la recursividad y un [cci lang="js"]string[/cci] [cci lang="js"]direccion[/cci] para la dirección inicial, que puede ser "arriba", "derecha", "abajo" o "izquierda". El resultado es un [cci lang="js"]Array[/cci] con dos posiciones: la primera indica si hay solución y la segunda indica el camino.

[cc lang = "javascript"] function resolver(f, c, tablero, restantes, camino, direccion) { if(restantes == 1) return new Array(true, camino); var resuelto = false; // Miro todas las direcciones desde la posición actual // Arriba if(direccion != "abajo") { var hay = false; for(fila = f - 1; !hay && fila >= 0; --fila) { if(tablero[fila][c]) { hay = true; tablero[f][c] = false; --restantes; camino.push("Arriba"); resultado = resolver(fila, c, tablero, restantes, camino, "arriba"); if(resultado[0]) return new Array(true, camino); else { ++restantes; tablero[f][c] = true; camino.pop(); } } } } // Derecha if(direccion != "izquierda") { var hay = false; for(columna= c + 1; !hay && columna < columnas; ++columna) { if(tablero[f][columna]) { hay = true; tablero[f][c] = false; --restantes; camino.push("Derecha"); resultado = resolver(f, columna, tablero, restantes, camino, "derecha"); if(resultado[0]) return new Array(true, camino); else { ++restantes; tablero[f][c] = true; camino.pop(); } } } } // Abajo if(direccion != "arriba") { var hay = false;; for(fila = f + 1; !hay && fila < filas; ++fila) { if(tablero[fila][c]) { hay = true; tablero[f][c] = false; --restantes; camino.push("Abajo"); resultado = resolver(fila, c, tablero, restantes, camino, "abajo"); if(resultado[0]) return new Array(true, camino); else { ++restantes; tablero[f][c] = true; camino.pop(); } } } } // Izquierda if(direccion != "derecha") { var hay = false;; for(columna= c - 1; !hay && columna >= 0; --columna) { if(tablero[f][columna]) { hay = true; tablero[f][c] = false; --restantes; camino.push("Izquierda"); resultado = resolver(f, columna, tablero, restantes, camino, "izquierda"); if(resultado[0]) return new Array(true, camino); else { ++restantes; tablero[f][c] = true; camino.pop(); } } } } return new Array(false); } [/cc]
  • Share
inteligencia, javascript, jquery, juego, programación

El conjunto de Mandelbrot

27 jul

Publicado por Kamugo en Matemáticas y números

No hay comentarios

Un fractal, como muchos sabréis, es una estructura que se repite a diferentes escalas. El fractal más conocido es el de Mandelbrot, estudiado por el matemático polaco, ya fallecido, Benoît Mandelbrot, recientemente fallecido, en la década de los 70 del siglo pasado. Mandelbrot pensaba que lo que él estaba estudiando no interesaba a nadie, ya que todos los demás matemáticos se centraban en estructuras "suaves y regulares". Para definir estas nuevas estructuras acudió a un diccionario de latín, hasta encontrar un adjetivo que describía las piezas irregulares de una piedra que ha sido lanzada: «fractus, fracta, fractum».

Los fractales no son sólo cosa de las matemáticas, sino que aparecen en muchos lugares de la naturaleza, como en las hojas de los helechos, en las ramas de los árboles, en el brécol, etc. Un caso extraordinario de fractal lo podemos encontrar en el Romanescu, una mezcla de brécol y coliflor.

Romanescu, un fractal en la naturaleza [latexpage] Matemáticamente, el conjunto de Mandelbrot se define como:
  • Tenemos c, un número complejo cualquiera.
  • Tenemos la sucesión por inducción siguiente $\left \{ \begin{matrix} z_0 & = & 0 \qquad \ & \qquad \\ z_{n+1} & = & z_n^2 + c & \end{matrix} \right.$

Si la sucesión queda acotada, podemos decir que el punto c es parte del conjunto.

Pero dejemos las matemáticas y vamos a ver como se ve el conjunto gráficamente. Lo he generado utilizando jQuery y HTML5. Podéis aumentarlo para ver la autosimilitud haciendo clic encima. Es probable que no lo podáis leer desde el lector RSS o utilizando un navegador antiguo.

Tu navegador no es compatible con Canvas, deberías utilizar uno más moderno.

Para acabar, la entrevista de Benoît en el programa Redes

Como siempre, dejo el código para los programadores curiosos

[cc lang="js"] // Clase timer para contar el tiempo de ejecucion var timer = { time: 0, now: function(){ return (new Date()).getTime(); }, start: function(){ this.time = this.now(); }, since: function(){ return this.now()-this.time; } } // Variables globales // Variables del tamaño de Canvas var width = 500; var height = 500; // Precisión de los pixels (1 es lo más preciso) var pixels = 1; // Coordenadas iniciales var xmin = -2; var xmax = 1; var ymin = -1.5; var ymax = 1.5; // Stride var stridex = ((xmax - xmin) / height) * pixels; var stridey = ((ymax - ymin) / width) * pixels; // Aumentos var zoom = 4; var aumentos = 0; // Iteraciones var maxIt = 200; function render() { timer.start(); // Cargamos canvas // Obtenemos el objeto Canvas var canvas = document.getElementById('canvas'); var context = false; // Obtenemos el contexto 2d if(canvas && canvas.getContext('2d')) { context = canvas.getContext('2d'); } if(context){ // Si existe empezamos a dibujar // Cambiamos el tamaño, por si este ha cambiado canvas.width = width; canvas.height = height; for(var x0 = xmin, i = 0; i < height; i += pixels, x0 += stridex){ for(var y0 = ymin, j = 0; j < width; j += pixels, y0 += stridey) { var x = 0; var y = 0; var it; for(it = 0; x*x + y*y < 4 && it < maxIt; ++it) { var xtemp = x*x - y*y + x0; y = 2*x*y + y0; x = xtemp; } if(it >= maxIt) { context.fillStyle = "rgba(0,0,0,1)"; context.fillRect(i,j,pixels,pixels); } else { context.fillStyle = "rgba(0,0,0," + it / maxIt + ")"; context.fillRect(i,j,pixels,pixels); } } } } return timer.since(); } $(document).ready(function() { var since = render(); $("#mandInfo").append("Renderizado en " + since + " ms
"); $("#canvas").click(function(e){ // Obtengo las coordenadas del clic dentro de canvas var x = Math.floor((e.pageX-$("#canvas").offset().left)); var y = Math.floor((e.pageY-$("#canvas").offset().top)); // Las transformo a las coordenadas actuales var realx = xmin + x * stridex; var realy = ymin + y * stridey; // Pongo los nuevos límites de las coordenadas var temp_xmin = xmin; var temp_xmax = xmax; var temp_ymin = ymin; var temp_ymax = ymax; xmin = realx - (temp_xmax - temp_xmin) / zoom; xmax = realx + (temp_xmax - temp_xmin) / zoom; ymin = realy - (temp_ymax - temp_ymin) / zoom; ymax = realy + (temp_ymax - temp_ymin) / zoom; // Recalculo los Strides stridex = ((xmax - xmin) / height) * pixels; stridey = ((ymax - ymin) / width) * pixels; ++aumentos; since = render(); $("#mandInfo").append("Aumentado en " + since + " ms
"); }); }); [/cc] Para que funcione, en el HTML hay que importar la librería jQuery. Después necesitamos el canvas de HTML5: [cci lang="html"][/cci] (tiene que tener identificador canvas). Por último y opcionalmente, un div donde se muestra el tiempo de renderizado: [cci lang="html"]
[/cci].
  • Share
fractales, javascript, jquery, mandelbrot, matemáticas

Las montañas de la Luna

15 jun

Publicado por Kamugo en Astronomía

No hay comentarios

Aunque desde aquí abajo parezca que la Luna es una pelotita redonda con algún que otro cráter, su superficie es muy irregular y tiene diferencias de altura muy grandes. Como es lógico, no conocemos tan bien su superficie comparado con la Tierra, pero la sonda LRO identificó hace unos meses el punto más elevado de la Luna. Este punto está a, nada más y nada menos, 10786 metros por encima del radio medio de la Luna. Esto es, 1938 metros más alto que el Everest (8848 metros por encima del mar).

El punto más alto de la Luna

Ahí está. Visto desde arriba sigue pareciendo una gran llanura "a nivel del mar". Los que tengáis telescopio, no os esforcéis en buscarlo, ya que se encuentrafuera del 59% de la Luna que podemos ver desde la Tierra, en la cara oculta.

De regalo: Un vídeo donde se ve la Luna desde la Tierra en un time lapse de un año entero. Podéis ver como hace algunos pequeños giros (libraciones) pero no llega a girar del todo, por eso sólo vemos ese 59%. También vemos como algunas veces aumenta de tamaño, por acercarse más a la Tierra.

Vía y más información en Eureka

  • Share
Astronomía, Curiosidades, Luna

SPAM “elogiador”

17 mar

Publicado por Kamugo en OkashiNi

1 comentario

Hoy acabo de sobrepasar la cifra de 1000 comentarios de SPAM. De todos ellos, Akismet (la barrera de mensajes basura) sólo ha dejado pasar unos pocos, a los que llamé SPAM "clon". Me pregunto si algo así le sale rentable a quien los envía.

Además, la cifra no para de aumentar día a día, y cada vez llegan nuevos tipos más retorcidos si cabe. Hace unos pocos días que estoy recibiendo una nueva forma de estos mensajes, a la que he llamado SPAM "elogiador". Se basan, básicamente, en citar el título del post y después escribir un mensaje de elogio, en inglés claro. El truco, otra vez, está en el enlace a su Web que puede poner cada comentarista, con lo que no escriben SPAM directo pero te consiguen colocar el enlace.

Aquí varios ejemplos, ¡tienen una colección de frasecillas halagadoras!

Spam clon.. Retweeted it

Haciendo referencia a uno de sus amigos, hay que ser valientes...

En defensa de los derechos en internet.. Super
Las predicciones de hace 100 anos parte 2.. Nice

Aún saben poco de español, a ver si aprenden a utilizar la ñ.

Pasatiempos collatz.. Great!
Distancias.. I like it

 

¿Cuál será su próxima estrategia? A saber... De momento me ha llegado uno con la situación actual de Japón.

P.D: Estoy buscando una buena tipografía para el Blog, no me acaba de convencer ninguna. Si alguien sabe, que lo escriba en los comentarios.

  • Share
basura, Blog, OkashiNi, spam

Las predicciones de hace 100 años. Parte 3

14 mar

Publicado por Kamugo en Curiosidades

No hay comentarios

Nueva parte del post más inacabable del Blog, no por su cantidad sino por su, digamos, poca actividad. La primera parte la publiqué a finales del año 2008, la segunda a principios del año pasado.

Para el que no se acuerde, o simplemente no las haya leído, se trata de unas cuantas predicciones que realizó John Elfreth en diciembre de 1900 para los próximos 100 años. Ya nos vamos alejando de esos años, pero sigue siendo curioso ver como se pensaba que sería el mundo hoy en día. ¿Alguien se atreve con una predicción para 2100?

Predicción 11
'Sin mosquitos ni moscas. Las mosquiteras serán innecesarias. Los mosquitos, las moscas y las cucarachas habrán sido practicamente exterminadas. Se destruirán todos sus refugios y zonas de cria, se drenarán todas las aguas estancadas y todas las corrientes de agua serán tratadas quimicamente. La exterminación del caballo (como medio de transporte) y su establo reducirán la cantidad de moscas '

Predicción 12
'Guisantes igual de largas que remolachas. Los guisantes y las habas serán igual de largas que las habas de hoy en día. Las cañas de azúcar producirán el doble, como el azucar de remolacha actual. La caña de azúcar se convertirá en nuestra fuente principal. Las plantas serán igual de resistentes a los microbios como lo es el hombre a la viruela hoy en día. El terreno será enrriquezido por las propias plantas, que recogerán los nutrientes del aire para luego fertilizar la tierra'

Predicción 13
'Nuestros tatara-tatara-nietos podrán comer fresas en las comidas de Navidad igual de grandes que las manzanas en cien años. Las frambuesas y las moras serán igual de grandes. Las fresas y los arandanos se cultivarán en arbustos altos. Arándanos y grosellas tendrán el mismo tamaño que las naranjas. Un melón satisfará a toda una familia. Melones, cerezas, uvas, ... no tendrán semillas. Los higos se cultivarán en todo Estados Unidos.'

Predicción 14
'Rosas negras, azules y verdes. Las rosas serán tan grandes como coles. Las violetas crecerán hasta tener el tamaño de orquídeas. Los pensamientos (planta) tendrán el tamaño de girasoles. Será posible plantar cualquier flor de cualquier color y transferir el olor de una a otra, por ejemplo, los pensamientos podrán tener el olor de las violetas.'

Predicción 15
'No habrá alimentos expuestos. Los comerciantes que expongan sus alimentos al aire libre serán detenidos, junto a los que vendan productos adulterados o en mal estado. Refrigeradores de aire líquido conservarán frescos los alimentos durante mucho tiempo.'

Predicción 16
'No habrá C, X o Q en el alfabeto. Serán abandonadas por ser innecesarias. La ortografía se adaptará al sonido, primero en los periódicos. El inglés será un idioma con palabras densas que expresan ideas complejas, siendo el más hablado del planeta. El ruso será el segundo.'

  • Share
Curiosidades, historia, predicción
«12345»1020...Última »
  • Léenos a través de feed RSS Sígueme en Twitter
  • Categorías

    • Actualidad (5)
    • Astronomía (14)
    • Aviación (2)
    • Ciencia (1)
    • Citas (7)
    • Críticas (3)
    • Curiosidades (25)
    • Encuestas (2)
    • España (2)
    • Física (12)
    • Fotos (3)
    • Frikadas (9)
    • Humor (7)
    • Inclasificable (5)
    • Informática (7)
    • Internet (12)
    • Japón (9)
    • Juegos (1)
    • Matemáticas y números (5)
    • Meteorología (1)
    • Naturaleza (10)
    • Noticias (7)
    • OkashiNi (6)
    • Opiniones (7)
    • Personal (8)
    • Personas (1)
    • Programación (4)
    • Tutoriales (1)
    • Viajes (1)
    • WTF? (5)
  • Twitter

    Cargando tweets...
    ¡Sígueme en Twitter!
  • Archivo

    •  2012
      • enero 2012
    •  2011
      • noviembre 2011
      • octubre 2011
      • agosto 2011
      • julio 2011
      • junio 2011
      • marzo 2011
      • febrero 2011
      • enero 2011
    •  2010
      • diciembre 2010
      • noviembre 2010
      • octubre 2010
      • junio 2010
      • abril 2010
      • febrero 2010
      • enero 2010
    •  2009
      • diciembre 2009
      • noviembre 2009
      • octubre 2009
      • septiembre 2009
      • junio 2009
      • mayo 2009
      • abril 2009
      • marzo 2009
      • febrero 2009
      • enero 2009
    •  2008
      • diciembre 2008
      • noviembre 2008
      • octubre 2008
      • septiembre 2008
      • agosto 2008
      • julio 2008
  • Páginas

    • Hiragana y Katakana
    • Léenos a través de feed RSS
    • Webs de lectores
  • Comentarios

  • Gravatar icon of marilu
    marilu
    enero 29, 2012
    ami me encanta la astronomia y esto me parece fasinante aunque no este comprobado
  • Gravatar icon of Kamugo
    Kamugo
    enero 22, 2012
    Sí. Cuando tenga tiempo tengo pensado arreglarlo y poner algunas cosas que me han pedido, pero d...
  • Gravatar icon of Ku
    Ku
    enero 21, 2012
    de todas maneras es una excelente idea y herramienta para los que empezamos este camino arigatou ...
  • Gravatar icon of Ku
    Ku
    enero 21, 2012
    を sale si o si a pesar que elijas
  • Gravatar icon of Kamugo
    Kamugo
    enero 11, 2012
    Sí. hay algún error en las selecciones por esa parte. Cuando acabe los exámenes y tenga tiempo...
Tema original: Mystique
Síguenos: Léenos a través de feed RSS Sígueme en Twitter
loading Cancel
Post was not sent - check your email addresses!
Email check failed, please try again
Sorry, your blog cannot share posts by email.