Vamos a platicar #3 - El sismo en México.




Tal y cómo lo mencioné la vez anterior, al encender el televisor, fue cómo logré apreciar la real magnitud de lo sucedido, la ciudad estaba totalmente estremecida, todos andaban con el rostro desencajado, los más jóvenes, por sufrir esa experiencia, los más viejos, ellos por volver a experimentar algo que se suponía que no debía de pasar de nuevo. ¿De que servia todo lo aprendido? supuestamente después de 1985, cosas cómo esas no deberían de pasar... Al final pasaron y tal cómo hace 32 años, la ciudad se fragmento una vez más.

Lo que pasó justo después es lo que se debe de rescatar. Todos aquellos que se encontraban cerca y vieron cómo se colapsaban los edificios, contrario a lo que uno pudiera pensar, no se alejaron para resguardarse, simplemente hicieron lo que debían de hacer, al estar lo más próximos a la tragedia, sería absurdo esperar a que viniera una ambulancia, bomberos o cualquier cosa que se supone debiera de ayudarlos. Simplemente usaron lo único que tenían disponible y comenzaron con la titánica tarea de rescatar a cualquiera que pudieran. Poco a poco se empezaron a crear cadenas de personas que sin saber quien era el que estaba al lado, comenzaron con el rescate de cualquiera que estuviera abajo, aun corriendo riesgos para su persona.

Cada vez más gente se unía cómo voluntaria, los que podían, levantaban piedras y mano a mano las alejaban del derrumbe, los que no podían, ayudaban distribuyendo víveres que las gente donaba. La ayuda fluía de manera impresionante. A diferencia del tembló anterior, cómo la tragedia ocurría en las calles, la ayuda era mucho más notoria, todos hacían lo que podían, incluso más.

Poco a poco me di cuenta que todo el tiempo había medido mal al país, siempre pensaba que si algo similar pasaba, cada quien haría lo que fuera necesario para resguardar sus bienes, eso fue lo que yo pensé primero yo y después los demás, al ver cómo a muchos no les interesaba me sentí mal conmigo mismo y por eso decidí ayudar en un centro de acopio. Fui un día completo a ayudar (no doy más detalles, se me hace innecesario).

El objetivo de estos post ha sido para rendir un pequeño homenaje a todos aquellos héroes anónimos, que me demostraron que aun hay muchas cosas buenas por las cuales abogar en este país, es cierto que algunas no funcionan cómo deberían, alguna simplemente no deberían de existir, pero por fortuna somos muchos más los que queremos un lugar mejor.

Sin mas que agregar solo me queda decir: Gracias a todos.

Los leo luego

Vamos a platicar #2 - El sismo en México

Hola de nuevo a todos, el día de hoy, les voy a contar una pequeña historia de lo que ha pasado en el centro de México.
Como muchos sabrán, el día  8 de septiembre se registró un temblor de magnitud 8.2 con epicentro en las costas de Chiapas. A pesar de haber sido un movimiento realmente potente, solo se registrarón daños en las zonas próximas al epicentro (sin ratar de minimizar la gravedad del asunto). La potencia que se registró fue superior a la del temblor más destructivo que se haya producido en la zona centro, incluso, supero al registrado en septiembre de 1985.
El temblor del 19 de septiembre de 1985, ha sido el más devastador que se había producido, destruyo mucha de la infraestructura de aquel momento, cobró la vida de al menos 5000 personas (según cifras no oficiales se habla de mas de 10000) y marcó un antes y un después en la vida de los ciudadanos de la Ciudad de México.
Al paso de los años, se registraron muchos sismos, algunos moderados y otro no tanto pero parecían poner a prueba a las edificaciones, que respondían soportando los movimientos.
Parte de las  cosas que nos dejó, fue la cultura de la prevención. Año tras año, se empezaron a realizar simulacros para que la población, supiera que hacer en caso de sismo.
El 19 de septiembre del 2017, se había llevado un simulacro como ya era costumbre, el día transcurría como se supone debía pasar, pero a las 13:14 horas de ese día, la tierra haría otro de sus movimientos. Un nuevo sismo de magnitud 7.1 con epicentro en puebla se desató y este a diferencia del que golpeo solo unos días antes, trajo consigo destrucción a zonas que no la habían experimentado desde hacia ya mucho y aumentando el que había en las zonas que apenas se les quitaba lo aturdido por el temblor previo mas reciente.
La zona donde yo vivo, está a una hora del  centro de la ciudad de México, pero aún así se registrarón derrumbes de algunos muros, caminos se destruyerón.
Justo cuando se registró el movimiento, al igual que mucha gente salí a la calle y a lo lejos logré ver como salia polvo de una de la construcciones más antiguas que hay en la ciudad. Me acerqué a ver cuales eran las proporciones del daño, a pesar que era un edificio dañado, me sorprendió bastante ver cómo una de ñas partes de la vieja casona, se había desplazado un buen tramo (según mis especulaciones, al menos 50 cm se movió, en cuanto lo averigüe lo agrego).
Era la primera vez que veía que ocurrían daños, por lo que decidí recorrer la ciudad y ver el espectáculo macabro que solo podía resultar de un temblor.
Poco a poco fui dimensionando que era lo que acababa de pasar, por mala suerte, aún no tenía noticias sobre la magnitud del movimiento, la energía eléctrica se había ido en toda la ciudad y las comunicaciones fallaron. Una persona cómo yo, que está acostumbrada a estar comunicado, pronto comencé a angustiarme, por no saber cual era la verdadera dimensión y por no saber si algo había pasado con las personas que me importaban. al seguir mi trayecto, vi cómo muchos transformadores eléctricos habían caído de sus postes, como muchas calles tenían fisuras, como se habían levantado trozo de concreto y de algunas casa que sufrieron daño considerable. Poco a poco se hozo la penumbra y una oscuridad como nunca recuerdo haber visto se hizo presente. Según reportes, al menos 2 millones de personas no tenían luz en las áreas afectadas, eso causo que una histeria (muy pequeña) se apoderara de todos, ante la posible falta de energía eléctrica que en su momento yo calculé que duraría días, micha gente salió a la calle a comprar tantas cosas cómo pudo y cosas que generalmente se acaban hasta el final del día, como por arte de magia, desaparecieron. Por fortuna, en varios sectores de la ciudad, en la noche, se restableció la energía eléctrica. A mi me toco el restablecimiento esa mis noche y lo primero que hice fue prender el televisor solo para apreciar la real magnitud de lo sucedido...

Vamos a platicar #1 - El sismo en México 7/9/2017

Hola de nuevo a todos, el día de hoy vamos a hacer una pequeña pausa de las cosas programacionales y vamos a hablar de algo que recientemente ocurrió en mi país.


Cómo muchos sabrán, el día  siete de septiempre de 2017 a las 23:49 GMT -6 (ST). Se registró un temblor con una magnitud de 8.2 grados. Pese a la gravedad de este, afortunadamente no fue tan catastrófico cómo el ocurrido el 19 de septiembre de 1985 en la ciudad de México.

Cuando el fenómeno termino, rápidamente empezaron a circular videos en el internet mostrando la magnitud que tuvo. Poco a poco empezaron a aparecer comentarios que explicaban algunos de los sucesos "extraños" que se apreciaban y otros más pronosticando futuros eventos sísmicos.



La explicación de las luces es realmente sencilla: son los cables de energía eléctrica que al moverse se tocan y causan un corto circuito, cómo el cielo estaba nublado, se magnificaba su efecto. Es cierto que existe un fenómeno llamado "luces de terremoto", pero estos son muy raros y además claramente se ve que en la mayoría de los casos (en el video) son producto de los cables de energía eléctrica.

Otro asunto es la predicción de los sismos. Actualmente y a pesar de todos los avances que se han hecho, aun no es posible predecir un sismo. Cuando ocurre un movimiento de magnitud considerable, es posible pronosticar que habrán replicas, inclusive nuevos sismos, pero bajo ninguna circunstancia se puede decir en que momento pasarán, me resulta sorprendente que haya gente diciendo "el día X habrá un mega-terremoto ..." pero me sorprende aun más que haya gente que les crea, en cada temblor reciente, hay gente que dijo que sabia que eso iba a ocurrir y peor aun, diciendo que iban a ocurrir.

Todos los datos relevante los puedes ver aquí:

Y bien por ahora es todo, en el siguiente post continuaremos con la programación.
Los leo luego.

Vamos a programar #40 - Números palindrómicos (ver C#)

Hola de nuevo a todos el día de hoy vamos a tratar de probar otra conjetura usando programación para esto.


Hace poco mientras charlaba con un amigo, por alguna razón empezamos a hablar sobre palíndromos. Para el que no lo sabe, un palíndromo es lo siguiente:

Un palíndromo (del griego palin dromein, volver a ir atrás), también llamado palindromo, palíndroma o palindroma, es una palabra, número o frase que se lee igual adelante que atrás. Si se trata de un numeral, usualmente en notación indoarábiga, se llama capicúa. Habitualmente, las frases palindrómicas se resienten en su significado cuanto más largas son. *Wikipedia/palíndromos*
 En resumidas cuentas, es una frase que se puede leer tanto de izquierda a derecha, cómo de derecha a izquierda.

Adivina ya te opina, ya ni miles origina, ya ni cetro me domina, ya ni monarcas, a repaso ni mulato carreta, caso nicotina, ya ni cita vecino, anima cocina, pedazo gallina, cedazo terso nos retoza de canilla goza, de pánico camina, ónice vaticina, ya ni tocino saca, a terracota luminosa pera, sacra nómina y ánimo de mortecina, ya ni giros elimina, ya ni poeta, ya ni vida. (de Ricardo Ochoa)
Hay que ser bastante creativos para lograr crear una oracion de mas de cinco palabras y que está tenga sentido.

Seguro te preguntarás, y eso que tiene que ver con la imagen de arriba? Mucho, pues al igual que las palabras crean palíndromos, los número son capaces de hacer lo mismo. hay algunos números que se pueden leer al derecho y al revés. Pero no solo eso, además existe una conjetura en la cual se dice que si se siguen ciertas reglas, es posible obtener un número palindrómico.
La conjetura es la siguiente:
"Tomese cualquier número entero postivo, a este hay que sumarle un número que será el mismo pero en orden inverso y se prosigue hasta conseguir el número palíndromo"
De acuerdo a la conjetura anterior, siguiendo ese método, deberíamos de ser capaces de obtener un número palíndromo a partir de cualquiera. Entonce el trabajo del día de hoy, consiste en crear una aplicación que haga los cálculos y no diga si un numero cumple la conjetura o no.

Supongamos que tenemos el numero 281, tendríamos lo siguiente:

  • 281 + 182 = 463
  • 463 + 364 = 827
  • 827 + 728 = 1555
  • 1555 + 5551 = 7106
  • 7106 + 6017 = 13123
  • 13123 + 32131 = 45254 Se cumple!!!
Con eso tenemos que al aplicar la conjetura al número 281, este la cumple en 6 pasos.

El Código

El código en c# que prueba la conjetura de los números palindrómicos es el siguiente.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Numerics;

namespace NumerosPalindromicos
{
	public partial class FrmMain : Form
	{
		private bool IsPalindrome(string Number)
		{
			if (Number.ToString() == ReverseNumber(Number.ToString()))
				return true;
			else
				return false;

		}
		private string ReverseNumber(string NumberIn)
		{
			char[] charArray = NumberIn.ToCharArray();
			Array.Reverse(charArray);
			return new string(charArray);
		}

		private void GetNumber(string Number1, decimal MaxIterations)
		{
			int Iterator = 1;
			if (IsPalindrome(Number1) == true)
				LBResults.Items.Add("0 iteraciones "+ Number1 +" cumple la conjetura");
			else
			{
				BigInteger Result;
				BigInteger.TryParse(Number1,out Result);
				while (IsPalindrome(Result.ToString()) == false)
				{
					Result += BigInteger.Parse(ReverseNumber(Result.ToString()));
					LBResults.Items.Add(Iterator + " iteraciones "+ Result);
					if (Iterator >= MaxIterations)
					{
						break;
					}
					Iterator += 1;
				}

				if (IsPalindrome(Result.ToString()) == true)
					LBResults.Items.Add("La conjetura se cumple");
				else
					LBResults.Items.Add("La conjetura no se cumple.");
			}

		}
		public FrmMain()
		{
			InitializeComponent();
		}
		private void BtnDo_Click(object sender, EventArgs e)
		{
			LBResults.Items.Clear();
			GetNumber(TxtNumberIn.Text, NUDIterator.Value);
		}
	}
}

El código anterior consta de tres funciones, la primera de ellas (en orden de aparición) es "IsPalindrome". Está función del tipo "boolean" y recibe un parámetro del tipo "string"; se encarga de comprobar si el parámetro que se ingresa cumple con la condición que sea un palíndromo, para eso, simplemente invierte el orden de los número del parámetro de entrada usando la función "ReverseNumber".
La funcion "ReverseNumber, al igual que la funcion "IsPalindrome", recibe un parametro del tipo "string", este lo convierte en una matriz del tipo "char" y luego coloca el primer elemento al final y viceversa, con esto obtenemos el parametro de entrada invertido. La funcion regresa un valor del tipo "string".
Finalmente la función "GetNumber", es la que se encarga de hacer los cálculos. Esta función, recibe dos parámetros, el primero del tipo "string" que es la representación del número al cual queremos comprobar la conjetura. El segundo parámetro, es un valor del tipo "decimal" que se usará para determinar cuantas ciclos deben de hacerse antes de que se diga que la conjetura no se cumple.
En la función, lo primero que hacemos, es comprobar si el número no es ya un palíndromo, si lo es solamente agregamos en la lista de resultados que el número ya es palíndromo y que no se hizo ninguna iteración.
Si no es el caso, creamos una variable del tipo "BigInteger" en la que almacenaremos el resultado de la suma.
Luego creamos el bucle principal, la condición para que este siga activo, es que al llamar a la función "IsPalindrome" esta devuelva false.  Luego a la variable "Result" le sumará el resultado de la función "ReverseNumber", luego agregará el resultado a la lista de resultados  y después comprobará que la iteración actual, este dentro de los limites establecidos en el parámetro "MaxIterations"; si no es así, el bucle se interrumpirá y terminará la prueba de la conjetura declarando que no se cumple en el limite establecido (pero eso no significa que no tenga solución); en caso contrario, se incrementará el valor de la variable "Iterator" en uno y el bucle volvería al inicio.

Con el código anterior, podemos probar que el número 28,121,993 no cumple la conjetura, o no dentro de las primeras mil iteraciones (tampoco en 10,000).
Al código anterior, al igual que a varios de los otros proyectos, le faltan algunas optimizaciones (correrlo en un thread diferente para no bloquear la interfaz principal), pero por ahora sirve para dejar la idea en claro, cómo siempre, el código completo lo puedes descargar de mi dropbox para revisarlo.

Por ahora es todo, los leo luego.