Subscribe:

Featured Posts

viernes, 30 de diciembre de 2016

Matriz caracol en C++

Cuando recién entré a la universidad recibí un curso propedéutico de parte de un profesor y un par de alumnos de (en ese entonces) tercer semestre. En dicho curso nos pusieron varios ejercicios de programación, entre los cuales hubo uno que no puse resolver por más que intenté.

Pasó el tiempo y olvidé que no lo había resuelto, pero hoy mientras cavilaba lo recordé y se me ocurrió ver si ya era capaz de resolverlo. El problema en sí es sencillo, pero para los conocimientos que tenía en aquel entonces no me sorprende que no lo pudiese resolver.

El problema es "La matriz caracol", que no es más que imprimir una matriz de tal manera que los números sigan una espiral (Ya sea de afuera hacia adentro o viceversa).

miércoles, 19 de octubre de 2016

Bugs estoréricos

Comienzo a escribir esto siendo las 11:27pm del 18 de octubre del 2016 y teniendo mil y un cosas más importantes que hacer (quizá no mil, pero sí 5 o 6) pero tenía muchas ganas de escribir sobre esto.

Como ya lo he mencionado en múltiples ocasiones por aquí, estudio una carrera relacionada con Ciencias de la Computación y, como en cada carrera, hay memes relacionados. Dentro de la carrera de ISC, y afines, quizá el meme más famoso sea el del punto y coma. Sí, punto y coma ";". Para aquellos que no estén inmersos en la programación, en muchos de los lenguajes de programación (o al menos en la mayoría de los más comunes), lo que marca el fin de una instrucción es un punto y coma.

domingo, 7 de agosto de 2016

Cómo han pasado los años

Hoy, casi sin querer, me puse a leer la primer entrada/post/publicación que hice en este blog y me llevé una gran y ¿agridulce? sorpresa. No me identifico con quien la escribió. Hace casi 7 años que comencé este blog y vaya que he cambiado.

Cuando comencé a escribir aquí tenía 16 años, probablemente estaba en 4 semestre de la preparatoria y tenía una vida de la que no me podía quejar. Hoy, mientras escribo esto, tengo 23 años, estoy por comenzar mi "Senior Year" en la universidad (El cual debí haber comenzado hace un año), tengo trabajo, mucho menos tiempo que antes y aun tengo una vida de la que no me puedo quejar.

Si me pongo a recordar cómo era en aquel entonces, era alguien bastante más arrogante que ahora pero con la misma baja autoestima que ahora. Por aquel entonces estaba completamente enamorado de Yameli (Fiiore o algo así se llamaba en el blog), hoy soy su padrino de confirmación (giros extraños de la vida) y ella está por casarse. En aquel entonces tenía una figura paterna a la cual podía decirle "Papá" sin dejo alguno de incomodidad. En esos días no sabía cuántos traumas (y no sólo de la niñez) llevo encima.

No me malentiendan, no digo que mi vida de antes fuese mejor que la de ahora, simplemente son situaciones y contextos distintos.

En casi 7 años he cambiado mucho, ya no soy tan ingenuo como antes (aunque aun hay algo de eso en mí), ahora odio que me digan que soy "buena persona" (Yup, es uno de los traumas mencionados dos párrafos arriba). Me pregunto cómo seré en otros 7 años. Espero que pueda voltear a mi yo actual y decir "Eras un pendejo, pero no cambiaría quien fui en aquel entonces".

PD. Hace 7 años no sabía bailar y mucho menos me gustaba. Pasaba por esa etapa de "Arriba el rock/metal y lo demás es basura" que muchas personas vivimos. Al día de hoy escucho de todo y me encanta bailar (incluso tomé un curso en la universidad donde conocí a gente increíble), lástima que aun no aprendo a hacerlo.

Hasta luego.

miércoles, 6 de abril de 2016

Listas enlazadas en C++

Hace una semana, después de acabar con la práctica de programación competitiva, noté que aun había dos alumnos de segundo semestre sentados frente a una computadora. Como soy muy metiche curioso, fui a preguntar qué estaban haciendo. Su respuesta fue "Tenemos que entregar un programa de listas enlazadas".

Después de que me dijeron esto y de que los vi batallando para poder eliminar un nodo por su índice, decidí darles un tip, no decirles la respuesta como tal, pero sí ayudarlos.

Justo hace unos minutos recordé que cuando me tocó ver este tema también tuve unos problemas para entenderlo, así que en este post intentaré aportar mi granito de arena por si alguien está viendo este tema y no le queda muy claro.

De Wikipedia "...una lista enlazada es una colección lineal de elementos, llamados nodos, donde cada uno de estos apunta a otro nodo mediante un apuntador...". Cada nodo, tiene al menos dos partes: un dato y un apuntador. Dependiendo de la implementación, puede tener un apuntador más (lista doblemente enlazada).

sábado, 5 de marzo de 2016

Función "genérica" de correlación en C#

Desde el semestre pasado he estado trabajando con imágenes en la universidad. Primero fue en la clase de Graficación y ahora en Procesamiento de Imágenes (aunque el primer acercamiento que tuve con este tema fue en 4to semestre).

El procesamiento de Imágenes no es de mis temas favoritos pero, como pueden ver, he tenido que acercarme en repetidas ocasiones. Hace una semana nos pidieron que escribiésemos funciones para aplicar los filtros de caja, Gaussiano, promedio y además que escribiésemos otras dos funciones (una para correlación y otra para convolución).

Cuando estaba viendo cómo se aplicaba la correlación a una imagen usando un filtro me di cuenta de que los otros filtros (caja y Gaussiano) que nos habían pedido que programáramos tenían el mismo comportamiento, así que no me quedé con la duda e investigando resultó que sí.

viernes, 23 de octubre de 2015

El pasar del semestre

Este semestre (7mo) ha sido uno de los semestres más tranquilos que he tenido en la universidad, sin embargo es de los que más me han hecho trabajar y no porque esté siendo demandante, simplemente comencé a hacer lo que debo.

Justo ahora acabo de terminar de escribir un reporte sobre un artículo de Autómatas Celulares, antes de eso terminé el reporte de la práctica de Graficación (la materia más "pesada" que llevo y de las pocas en que es necesario usar algo más que álgebra básica). Ahora me queda pendiente terminar ese AG que tengo arrumbado desde hace un mes y que debo presentar para la siguiente semana, también debo empezar a revisar el programa que debemos arreglar en Evolución del Software y prepararme para los exámenes que ya empezaron. Quizá suena a que me estoy quejando de que tengo muchas cosas por hacer (y sí lo estoy haciendo :P) pero no es del todo cierto.

Tengo ya un par de meses con actitud depresiva. Quienes padezcan algún grado de depresión saben a qué me refiero (y no, no digo que yo esté deprimido, al menos no he ido a que lo confirmen), esas ganas de no querer hacer nada, la incomodidad en todo momento, etc. Sin embargo, la válvula de escape que estoy usando es *Redoble de tambores...*

viernes, 31 de julio de 2015

Implementando algoritmo de Evolución Diferencial v1.0

Estas vacaciones tuve la fortuna de ir a un escuela de verano en la que nos presentaron un algoritmo que se llama Evolución Diferencial, que forma parte de la gran familia de Algoritmos Evolutivos. Una de las ventajas que tiene este algoritmo, con respecto a otros evolutivos, es que está diseñado para trabajar con problemas de optimización continua y que converge rápido, sin llegar a caer en convergencia prematura.

El algoritmo se divide en 4 etapas, estas son inicialización, mutación, recombinación y selección (me robé eso de Wikipedia). El algoritmo trabaja con una población NP (con 100 individuos trabaja bien) de vectores, con un valor constante F (o µ, dependiendo de la literatura) que controla la mutación que va de (0,1) o (0,2), dependiendo de la literatura. También incluye otra constante CR [0,1] que es usada en la recombinación, ya que esta se hace valor a valor del vector generado. Para generar un nuevo candidato se toman 3 vectores al azar dentro de la población y se le aplica la fórmula P= Ir1 + F * (Ir2 - Ir3) donde Iri son los vectores escogidos al azar.

Para mayor información, dejo aquí el enlace al artículo en que presentaron el algoritmo. La implementación que hice fue la siguiente: