<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Okashini &#187; programación</title>
	<atom:link href="http://okashini.com/tags/programacion/feed/" rel="self" type="application/rss+xml" />
	<link>http://okashini.com</link>
	<description>Blog sobre curiosidades, tecnología, actualidad, astronomía y cualquier tema que se me pase por la cabeza</description>
	<lastBuildDate>Thu, 26 Jan 2012 18:52:05 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>El reto de la rana</title>
		<link>http://okashini.com/el-reto-de-la-rana/</link>
		<comments>http://okashini.com/el-reto-de-la-rana/#comments</comments>
		<pubDate>Mon, 22 Aug 2011 15:47:55 +0000</pubDate>
		<dc:creator>Kamugo</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[inteligencia]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[juego]]></category>
		<category><![CDATA[programación]]></category>

		<guid isPermaLink="false">http://okashini.com/?p=2352</guid>
		<description><![CDATA[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&#8230;]]></description>
			<content:encoded><![CDATA[<p><strong>Kaeru Jump</strong>, del japonés <em>kaeru</em> (蛙, 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 <strong>cada una de las piedras</strong> 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.</p>
<p>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.</p>

<embed "application="" x-shockwave-flash"="" src="http://okashini.com/wp-content/uploads/2011/08/kaeruJump.swf" width="700px" height="700px" quality="medium">

<h3>Solución</h3>
<p>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 <a href="http://es.wikipedia.org/wiki/Vuelta_Atr%C3%A1s" title="backtracking">backtracking</a>. Aunque por el nombre parezca algo <em>guapo</em>, 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?</p>
<p>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 <em><strong>checkbox</strong></em> del mapa del nivel, si está marcado es que en el mapa hay una piedra en esa posición. <strong>¡Si leéis desde el lector RSS es probable que no veáis nada!</strong></p>

<script type="text/javascript" src="http://okashini.com/js/jquery.js"></script>
<script type="text/javascript" src="http://okashini.com/wp-content/uploads/2011/08/rana.js"></script>

<div style = "text-align: center;">
Fila inicial: <select id="filaOrigen"></select>
Columna inicial: <select id="columnaOrigen"></select>
Dirección inicial:
<select id="direccionOrigen">
         <option value="arriba">Arriba</option>
         <option value="derecha">Derecha</option>
         <option value="abajo">Abajo</option>
	<option value="izquierda">Izquierda</option>
</select>
<input type="button" id="botonResolver" value ="Resolver"/>
<div style="text-align: center;" id ="tablero"></div>
<h4><div style = "font-family: Georgia, Times; font-style: italic;" id="solucionRana"></div></h4>
</div>

<h3>El código</h3>
<p>Os pongo la función para calcular la solución en <strong>javascript</strong>. 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.</p>
[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 &#038;& 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 &#038;& 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 &#038;& 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 &#038;& 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]

]]></content:encoded>
			<wfw:commentRss>http://okashini.com/el-reto-de-la-rana/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tu uso de cada letra</title>
		<link>http://okashini.com/uso-letras/</link>
		<comments>http://okashini.com/uso-letras/#comments</comments>
		<pubDate>Tue, 09 Nov 2010 15:54:33 +0000</pubDate>
		<dc:creator>Kamugo</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[Curiosidades]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[programación]]></category>

		<guid isPermaLink="false">http://okashini.com/?p=1400</guid>
		<description><![CDATA[Ya os hablé una vez de cuanto se usaba cada letra de media en Español, pero eso solo eran datos. Hoy os traigo algo más entretenido para que comprobéis que porcentaje de letras utilizáis vosotros mismos. Solo tenéis que escribir lo que queráis en el cuadro de texto y podréis ver un gráfico con los&#8230;]]></description>
			<content:encoded><![CDATA[<script type="text/javascript" src="/js/jquery.js"></script><script type="text/javascript" src="/js/jscharts.js"></script><script type="text/javascript" src="/wp-content/uploads/2010/11/cuenta_letras.js"></script><p>Ya os hablé <a href="http://okashini.com/el-uso-de-las-letras/">una vez</a> de cuanto se usaba cada letra de media en Español, pero eso solo eran datos. Hoy os traigo algo más entretenido para que comprobéis que porcentaje de letras utilizáis vosotros mismos. Solo tenéis que escribir lo que queráis en el cuadro de texto y podréis ver un gráfico con los porcentajes de cada letra. Si el texto es muy largo seguramente se parezca a la media que os conté la otra vez.</p>
<p>¿Se parece a los porcentajes del otro post? ¿Cuál es la letra que más utilizas?</p>
<p>El programa no cuenta caracteres <em>extraños </em>como á, é, ñ, ç, ... ¡viva el inglés! Recordad que necesitáis estar en el navegador y <strong>no en el lector RSS </strong>para poder probarlo.</p>
<p><textarea id="texto_letras_j"></textarea></p>
<div id="grafico_letras_j">
<p style="text-align:center; font-weight:bold;">Escribe el texto que quieras</p>
</div>
<p>Para los que quieran saber como funciona el programa en Javascript, os lo dejo aquí el código, he utilizado jQuery y <a href="http://www.jscharts.com/">JSCharts</a><strong> </strong>para generar los gráficos. El <strong>script principal</strong> es el siguiente:</p>
<code lang="js">
$(document).ready(function() {
	var v = new Array(26);
	var abecedario = new Array('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z');
	// Cada vez que dejemos de pulsar una tecla
	$("#texto_letras_j").keyup(function() {
		$("#contador_letras_j").text("");
		for(i = 0; i &lt; v.length; ++i) v[i] = 0;
		var arr = $("#texto_letras_j").val();
		var cont = 0;
		// Recorremos todo el texto para analizar cada letra
		for(i = 0; i &lt; arr.length; ++i) {
			// Comprobamos que sea una letra y la aÃ±adimos
			if(/[a-z]/.test(arr.charAt(i))){
				++cont;
				++v[arr.charCodeAt(i)-'a'.charCodeAt(0)];
			}
			else if(/[A-Z]/.test(arr.charAt(i))) {
				++cont;
				++v[arr.charCodeAt(i)-'A'.charCodeAt(0)];
			}
		}
		if(cont != 0) {
			var myData = new Array(26);
			// Escribimos los resultados
			for(i = 0; i &lt; v.length; ++i) {
				var res = 100*v[i]/cont;
				myData[i] = [abecedario[i], res];
				$("#contador_letras_j").append("&lt;li&gt;"+abecedario[i]+": "+res.toFixed(3)+"%&lt;/li&gt;");
			}
			// Generamos el grÃ¡fico de JSCharts
			var myChart = new JSChart('grafico_letras_j', 'bar');
			myChart.setTitle('Uso letras');
			myChart.setAxisNameY('%');
			myChart.setAxisNameX('Letras');
			myChart.setDataArray(myData);
			myChart.setBarColor('#42aBdB');
			myChart.setBarOpacity(0.8);
			myChart.setBarBorderColor('#D9EDF7');
			myChart.setBarValues(false);
			myChart.setTitleColor('#8C8383');
			myChart.setAxisColor('#777E81');
			myChart.setAxisValuesColor('#777E81');
			myChart.setSize(616, 321);
			myChart.draw();
	}
	else {
		$("#grafico_letras_j").text("");
	}
	});
});
</code>
<p>Además, para que funcione, debemos añadir lo siguiente al <strong>HTML</strong></p>
<p>El resultado final del HTML será el siguiente:</p>
<code lang="html"><script src="/jquery.js" type="text/javascript"></script>
<script src="/jscharts.js" type="text/javascript"</script>
<script src="/cuenta_letras.js" type="text/javascript"></script>
<textarea id="texto_letras_j"></textarea>
<div id="grafico_letras_j>Escribe el texto que quieras</div>
<ul id="contador_letras_j"></ul>
</code>
<ul>
<li>Los scripts Javascript.</li>
<li>El cuadro de texto (<strong>texto_letras_j</strong>).</li>
<li>Un <strong>div</strong> para colocar el gráfico (<strong>grafico_letras_j</strong>).</li>
<li>Una lista<strong> </strong>y un párrafo (<strong>contador_letras_j</strong>) para guardar los resultados.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://okashini.com/uso-letras/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Programadores maltratados</title>
		<link>http://okashini.com/programadores-maltratados/</link>
		<comments>http://okashini.com/programadores-maltratados/#comments</comments>
		<pubDate>Wed, 10 Sep 2008 14:36:55 +0000</pubDate>
		<dc:creator>Kamugo</dc:creator>
				<category><![CDATA[Informática]]></category>
		<category><![CDATA[programación]]></category>
		<category><![CDATA[vídeos]]></category>
		<category><![CDATA[youtube]]></category>

		<guid isPermaLink="false">http://okashini.co.cc/?p=407</guid>
		<description><![CDATA[Hoy os traigo un vídeo sobre el inferno de los programadores. Están en la calle, con carteles de cartón como si estuvieran pidiendo. www.youtube.com/watch?v=1lqxORnQARw Por si no sabéis ingles, os traduzco los carteles, por orden. Estoy dolido. Llevamos 4 meses en un programa de 5 y he recibido los requisitos finales ayer (y han vuelto a cambiar!)&#8230;]]></description>
			<content:encoded><![CDATA[<p>Hoy os traigo un vídeo sobre el inferno de los programadores. Están en la calle, con carteles de cartón como si estuvieran pidiendo.<br />
<p><a href="http://www.youtube.com/watch?v=1lqxORnQARw">www.youtube.com/watch?v=1lqxORnQARw</a></p><br />
Por si no sabéis ingles, os traduzco los carteles, por orden.</p>
<ul>
<li>Estoy dolido.</li>
<li>Llevamos 4 meses en un programa de 5 y he recibido los requisitos finales ayer (y han vuelto a cambiar!)</li>
<li>Gasto la mitad de mi día en reuniones de como trabajar mejor (en vez de trabajar).</li>
<li>Mi jefe leyó en una revista que los programadores usando (otro) lenguaje de programación eran dos veces más productivos, así que compró una copia y cortó por la mitad el programa (lo destrozó).</li>
<li>Cada día mi jefe cambia de opinión sobre lo que estamos programando.</li>
<li>La gente no para de decirme que les arregle el correo, así que no tengo tiempo para programar-</li>
<li>Mi padre no tiene más tiempo para mi.</li>
<li>Le dijeron a mi jefe que podían hacer nuestra siguiente versión en la mitad de tiempo y por la mitad de dinero, él les creyó, pero ahora han gastando todo su presupuesto y todo el tiempo y...</li>
<li>Está aun a la mitad. Ahora  se han ido y su código es un desastre, tenemos que arreglarlo y acabar lo que empezaron.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://okashini.com/programadores-maltratados/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

