Tuesday, September 15, 2009

Vacio implacable

Vacío en los ojos que contemplan el espacio
que se llena solo con recuerdos
Vacío silente, antes lleno de música, de risa
Vacío estático, antes lleno de movimiento, de gracia
Vacío solitario antes ocupado por
la alegría y la amistad ahora perdida
Vacío inmarcesible que se a veces se llena
pero siempre vuelve .... siempre
Vacía sensación de falta de propósito
Vacío implacable que nos recuerda la fragilidad de esta perra vida y lo inevitable de la muerte

Saturday, September 05, 2009

Google code jam 2009

This is the first time I enter the code jam qualification. It was interesting to solve problems which put to test your imagination. Although I contemplated the possibility of coding in python, I coded in C.

Problem C:

This was my solution to problem C (my favorite):


#include
#include
int L[20][502];
void init(){
int i, j;
for (i = 0; i<20; i++){
for( j = 0; j < 501; j++){
L[i][j] = -1;
}
}
}
int m(char *word, char *paragraph, int w_i,int p_i){
if (( paragraph[p_i] == 0 ) && ( word[w_i] != 0) ) {
L[w_i][p_i] = 0;
} else if (L[w_i][p_i] != -1){
} else if (word[w_i] == 0){
L[w_i][p_i] = 1;
} else if (word[w_i] == paragraph[p_i]){
L[w_i][p_i] = (m(word, paragraph, w_i + 1, p_i + 1) + \
m(word, paragraph, w_i, p_i + 1))%10000;
} else{
L[w_i][p_i] = m(word, paragraph, w_i, p_i + 1);
}
return L[w_i][p_i];
}
int main(void){
int i, N;
char str[502];
char word[20] = "welcome to code jam";
scanf("%d\n", &N);
for (i = 0; i < N ; i++){
fgets(str, 502, stdin);
init();
printf ("Case #%d: %.4d\n", i+1, m(word, str,0,0));
}
return 0;
}

This was my solution to problem B (My second favorite):


char diffuse(int r, int c, int height, int width){
int n, s, e, w, m;
if (solution[r][c] == '.') {
n = get_terr(r-1, c, height, width);
s = get_terr(r+1, c, height, width);
e = get_terr(r, c+1, height, width);
w = get_terr(r, c-1, height, width);
m = min( min(n,s) , min(e,w) );
if ( terrain[r][c] <= m ){
last_sink ++;
solution[r][c] = last_sink;
return solution[r][c];
}else{
if (m == n){
solution[r][c] = diffuse(r-1, c, height, width);
}else if ( m == w){
solution[r][c] = diffuse(r, c-1, height, width);
}else if ( m == e){
solution[r][c] = diffuse(r, c+1, height, width);
}else if ( m == s){
solution[r][c] = diffuse(r+1, c, height, width);
}
}
}
return solution[r][c];
}


This was my solution to problem A:


#include
#include

#define MAX 502

char words[5000][17];
char patterns[500][MAX];


int L,D,N;

void read_input(int d, int n){
int i;
for ( i = 0; i < d; i++){
fgets(words[i],17,stdin);
words[i][strlen(words[i])-1] = 0;
}
for (i = 0; i < n; i++){
fgets(patterns[i], MAX, stdin);
patterns[i][strlen(patterns[i])-1] = 0;
}
}

void convert( char *pattern, char *pat[], int l){
int i = 0;
int inside = 0;
*pat = 0;
while (*pattern){
if(*pattern == '('){
pat[i] = pattern + 1;
i++;
inside = 1;
} else if (!inside ){
pat[i] = pattern;
i++;
} else if ( inside ){
if ( *pattern == ')'){
inside = 0;
pattern[0] = 0;
}
}
pattern++;
}
pat[i] = 0;
}

int matches( char *wrd, char *pat[], int l){
int i;
for( i = 0; i < l; i++){
if(!strchr(pat[i], wrd[i])){
return 0;
}
}
return 1;
}


int main(void){
int i, j;
int counter ;
char *ptn[500];
if (3 != scanf ("%d%d%d\n", &L,&D,&N)){
printf ("Could not read sizes \n");
return 1;
}
read_input(D, N);
for (i = 0; i < N; i++){
convert( patterns[i], ptn, L);
counter = 0;
for( j = 0; j < D; j++){
if (matches( words[j], ptn, L )){
counter ++;
}
}
printf ("Case #%d: %d\n", i+1, counter);
}
return 0;
}

It was really funny to participate. I used bad sizes for the buffers of fgets (i.e. 501 instead of 502) in A and C. I have to be more careful with that.

Monday, August 31, 2009

Estará cerca la ruptura del cognocentrismo ?

La evolución humana ha estado siempre rodeada de tabús y creencias centristas, muchas veces cultivadas por la religión. El geocentrismo, por ejemplo, defendía la idea de que la tierra era el centro del universo. Esta teoría era defendida por la iglesia católica, pues parecía consistente con las antiguas creencias que la cimentaban, dejando espacio para cosas como el cielo y el infierno; sin embargo, no fue sostenible cuando avanzó lo suficiente la ciencia y el conocimiento humano, pues a la luz de la evidencia era muy claro que la tierra era la que giraba alrededor del sol. Otro ejemplo se encuentra en los anales de la historia cuando se considera la esclavitud de los negros e indígenas, que muchos defendían argumentando que los negros e indígenas "no tenían alma", y por tanto no eran seres humanos. Como un último ejemplo, se pueden citar los fundamentalistas, que creen que son el centro de alguna clase de verdad. Tal fundamentalismo llevó en el medioevo a las cruzadas, en donde en nombre de la religión se masacró millones de personas.

Actualmente vivimos varios paradigmas centristas. Uno de ellos es la creencia de que somos los únicos seres vivos en el universo. Al igual que el geocentrismo, nos hace sentirnos más importantes y justifica otras creencias que probablemente simientan nuestra moral y costumbres. La ecuación de Drake y su estimación pesimista, determinan que solo en nuestra galaxia, debería haber alrededor de 10 civilizaciones extraterrestres además de la nuestra. Creo que la única postura razonable es mantener una prudente inquietud al respecto.

Otro de los paradigmas centristas de nuestra sociedad es el monopolio humano de la razón (que podemos llamar cognocentrismo). Si lo consideramos abiertamente, diferentes animales tienen diferentes niveles de razonamiento. Algunos son capaces de contar (como algunas especies de cuervos), otros se comunican e interactuan en grupo (como los delfines). Muchas personas sostienen que se trata de "instinto". Sin embargo, es evidente que los cerebros de todos los animales son en esencia conjuntos de neuronas y synapsis que se estructuran de alguna manera para razonar. Si bien el razonamiento de los animales no es tan complejo como el humano esto se debe en esencia a la cantidad de neuronas y conexiones que hay en sus cerebros. El cerebro humano, por ejemplo, es 150000 veces más complejo que el cerebro de una rata(en términos de cantidad de neuronas y synapsis). Aun así, las ratas son capaces de aprender y comunicarse.

Los avances de la electrónica en campos como integración de circuitos a muy gran escala y la computación cuántica, hacen ahora que sea realista considerar la simulación de cerebros de animales, incluyendo el ser humano - aunque tal vez toca esperar unos 30 años para ello. Una vez se logre la simulación de un cerebro humano, solo queda esperar las consecuencias a nivel social. La posibilidad de crear "conciencia" inorgánica probablemente generará choques culturales, acabará creencias como la del cognocentrismo y generará algunos problemas sociales; pero también abrirá puertas y romperá los límites que contienen nuestra cultura, nuestra experiencia y nuestra presencia en el universo.

Saturday, August 15, 2009

Estrella bruja

Una estrella arrogante y distante con oscilar hipnótico me visitó en los sueños de la vigilia.
Llena de colores reflejaba sus cuidados en silencio, solo insinuaba.
Una estrella con ojos, me dije, mientras caia preso de su embrujo y comenzaba a tener ideas
trascendentales inyectadas por su presencia en la distancia. Una estrella con labios, pensé, mientras me dejaba seducir por sus palabras. Una estrella en que me estrello una y mil veces con los ojos cerrados en un apasionado vacío de la mente, solo acción cruda, contemplación y ritmo. Una estrella en que me veo pensando a la orilla del agua. Una estrella que me controla, con solo una mirada. Estrella con espinas y encantos, estrella de una vida imaginada . . . una estrella bruja.

Monday, August 10, 2009

Weekend

This weekend I did various things. First of all, I built a hovercraft using off the shelf parts that I already had. It was amazing to watch it hovering 1mm over the ground. After that, I built a spitfire model airplane (doesn't fly, just plastic; it was one the favorite airplanes of Jesus), which incredibly took me about the same time I took to design and build the hovercraft. Then I looked out of the window and there it was Jupiter, hence, I took my telescope (Meade LX90) and watched Jupiter and its moons for about an hour or so. Then I realized there was a communications tower in range. In order to re-calibrate the focuser of the telescope, I pointed to the light on top of it. It was so funny that I was able to even read the serial number and brand of the antennas. Cool weekend, although I feel I could have done more things.

Wednesday, July 22, 2009

El lenguaje

Las barreras ocultas del lenguaje más bien parecen cuerdas.
Nos enredan y entre vueltas y nudos nos hacen a veces difícil saber si decimos lo que pensamos o si se entiende lo que decimos y por consiguiente, si se entiende lo que pensamos . . .

Y diciendo y diciendo inundamos el mundo de palabras que se envuelven consigo mismas o se enredan con otras palabras. Palabras que se estrellan contra el vidrio, palabras que viajan por cables, palabras limitadas que tratan de expresar ideas ilimitadas o incontenibles. Y es que las gramáticas diferentes inspiradas por culturas diferentes se unen con fonéticas diversas que a veces son irreconciliables para formar mensajes que a veces son incomprensibles, nutridos tal vez por la falta de epítetos y por el exceso de metáforas, o por falta de ellas. Después de tantos enredos y problemas, lo más increible de todo es que la gente se comunique.

Thursday, July 16, 2009

Embot

Embot is essentially an application of the ECB_AT91 V1 board. It shows how powerful can your applications get when using embedded technology. You can use the V1 to monitor enviroments, control mechanisms, or measure analog and digital variables.

This is a video of Embot:





* The ECB_AT91 V1 be acquired at http://www.emqbit.com.