logoTh!nk Again


Increible tetris en 19 líneas escrito en c

Posted in Challenges, Ejemplos, Programming Languages by admin on the August 8th, 2010

Código ganador del “The International Obfuscated C Code Contest“ del 2007 hecho en México.
¡Completamente inspirador!

long h[4];t(){h[3]-=h[3]/3000;setitimer(0,h,0);}c,d,l,v[]={(int)t,0,2},w,s,I,K
=0,i=276,j,k,q[276],Q[276],*n=q,*m,x=17,f[]={7,-13,-12,1,8,-11,-12,-1,9,-1,1,
12,3,-13,-12,-1,12,-1,11,1,15,-1,13,1,18,-1,1,2,0,-12,-1,11,1,-12,1,13,10,-12,
1,12,11,-12,-1,1,2,-12,-1,12,13,-12,12,13,14,-11,-1,1,4,-13,-12,12,16,-11,-12,
12,17,-13,1,-1,5,-12,12,11,6,-12,12,24};u(){for(i=11;++i<264;)if((k=q[i])-Q[i]
){Q[i]=k;if(i-++I||i%12<1)printf("\033[%d;%dH",(I=i)/12,i%12*2+28);printf(
"\033[%dm  "+(K-k?0:5),k);K=k;}Q[263]=c=getchar();}G(b){for(i=4;i--;)if(q[i?b+
n[i]:b])return 0;return 1;}g(b){for(i=4;i--;q[i?x+n[i]:x]=b);}main(C,V,a)char*
*V,*a;{h[3]=1000000/(l=C>1?atoi(V[1]):2);for(a=C>2?V[2]:"jkl pq";i;i--)*n++=i<
25||i%12<2?7:0;srand(getpid());system("stty cbreak -echo stop u");sigvec(14,v,
0);t();puts("\033[H\033[J");for(n=f+rand()%7*4;;g(7),u(),g(0)){if(c<0){if(G(x+
12))x+=12;else{g(7);++w;for(j=0;j<252;j=12*(j/12+1))for(;q[++j];)if(j%12==10){
for(;j%12;q[j--]=0);u();for(;--j;q[j+12]=q[j]);u();}n=f+rand()%7*4;G(x=17)||(c
=a[5]);}}if(c==*a)G(--x)||++x;if(c==a[1])n=f+4**(m=n),G(x)||(n=m);if(c==a[2])G
(++x)||--x;if(c==a[3])for(;G(x+12);++w)x+=12;if(c==a[4]||c==a[5]){s=sigblock(
8192);printf("\033[H\033[J\033[0m%d\n",w);if(c==a[5])break;for(j=264;j--;Q[j]=
0);while(getchar()-a[4]);puts("\033[H\033[J\033[7m");sigsetmask(s);}}d=popen(
"stty -cbreak echo stop \023;sort -mnr -o HI - HI;cat HI","w");fprintf(d,
"%4d from level %1d by %s\n",w,l,getlogin());pclose(d);}

Para verlo en acción abran una terminal, compilen y ejecuten:

$ gcc tetris.c -o tetris
$ ./tetris

Concurso de Programación ANPA10

Posted in Challenges, Programming Languages, Uncategorized by admin on the March 27th, 2010
logoANPA

Faltan pocos días para el ANPA 2010

El próximo concurso de la ANPA será el 24 de Abril del presente año en León, Guanajuato; no es necesario pertenecer a alguna institución para poder participar y para que se animen a participar, este es uno de los problemas del ANPA07.

Problema: Cajas (ANPA 07 Semifinal) 
Autor: Fory
Historia  
         El encargado de “Empresa productora de cartón” decidió lanzar una línea nueva de cajas.  La línea consiste en una colección de cajas cúbicas de diferentes tamaños.  Como promoción de lanzamiento se hicieron paquetes de cajas de tal forma que al abrir una puedas encontrar otra y dentro de esta una más y así sucesivamente hasta abrir la caja más pequeña incluida en el paquete.  De improviso llega un cliente a la fábrica pidiendo un paquete de lanzamiento; desafortunadamente todos los paquetes ya fueron enviados a las tiendas. Dado que tú eres el responsable de armarlos decides formar uno con el mayor número posible de cajas existentes en la fábrica.  
Problema

 Hacer un programa que lea el tamaño de cada una de las cajas que hay en la fábrica y escriba el mayor número de cajas que puede tener el paquete. Dentro de una caja de tamaño T puedes meter otra de tamaño t sólo sí t < T. 

Entrada 

La primer línea de la entrada contendrá un sólo número entero n (1 ≤ n ≤ 100). Dicho número representa el número de casos de prueba para este problema. Cada una de las siguientes n líneas describirá un caso de prueba. En cada caso debes leer primero un entero k (1 ≤ k ≤ 1000) que indica cuantas cajas hay en la fábrica y después leer el tamaño de cada una de las cajas. El tamaño de cada caja será un entero entre 1 y 1000.

 Ejemplo: 
4
11 1 2 3 4 5 6 7 8 9 10 11
1 10
4 2 2 2 2
5 1 2 2 3 10 

Salida 

Para cada caso de prueba debes escribir una línea de texto con el mensaje “El paquete mayor tiene N cajas.”, siendo N el número de cajas en el paquete más grande.  Ejemplo (estas salidas corresponden al ejemplo que se da en Entrada): 

El paquete mayor tiene 11 cajas.
El paquete mayor tiene 1 cajas.
El paquete mayor tiene 1 cajas.
El paquete mayor tiene 4 cajas. 

Nombre del programa 
cajas.cpp, cajas.java, cajas.cs, cajas.vb

Como pueden ver, no es nada del otro mundo y la solución se puede escribir en pocas lineas en c++:

//@dennysreg
#include <cstdio>
#include <set>
using namespace std;
int main(){
  int casos, ncajas, tamCaja;
  scanf("%d",&casos);
  while(casos--){
      set<int>cajas_no_repetidas;
      scanf("%d",&ncajas);
      for(int i=0; i<ncajas;i++){
          scanf("%d",&tamCaja);
          cajas_no_repetidas.insert(tamCaja);
      }
      printf("El paquete mayor tiene %d cajas.\n",cajas_no_repetidas.size());
  } 
}

Les dejo algunos de los problemas aquí para que se terminen de animar.

Resultados del ACM ICPC World Finals 2009

Posted in Challenges by admin on the April 23rd, 2009

Denominada “La Batalla de los cerebros”, el ACM ICPC World Finals desafía a 100 equipos universitarios de todo el mundo a utilizar la tecnología de estándar abierta para el diseño de software, que resuelve problemas del mundo real. Cada equipo de tres estudiantes enfrentan 11 problemas de diferentes niveles de dificultad, todos modelados sobre cuestiones del mundo real, tales como la creación de un calendario para un aeropuerto para aterrizajes más seguros considerando cambios climáticos entre otros improvistos y optimizar las horas pico del tráfico en las carreteras.

Puedes bajar los problemas aquí (PDF)

El scoreboard 1 hora antes del final del concurso

Resultados Finales de la página oficial

Ver análisis de los problemas en Petr Mitrichev’s blog

Post Original Students of St. Petersburg State University of IT, Mechanics and Optics Crowned World Champions of the IBM-sponsored ‘Battle of the Brains’

¿Cómo simular un movimiento natural?

Posted in Challenges, Processing by admin on the December 23rd, 2008

Esto se puede hacer usando un algoritmo aleatorio, que integra processing en la función noise(). ¿podría simular el movimiento de un insecto?

float xtime = 0.0;
float ytime = 100.0;
float increment  = 0.01;
void setup(){
  size(200,200);
  smooth();
  background(255);
}
void draw(){
  if(mousePressed)//limpia la pantalla
    background(255);

  float x = height*noise(xtime);
  float y = width*noise(ytime);
  fill(200);
  ellipse(x,y,10,10);
  ytime+=increment;
  xtime+=increment;
}

El problema de los APPOs

Posted in Challenges, Ejemplos by admin on the December 1st, 2008

Es bien conocido que hace no más de 2 años los denominados APPOs se apoderaron de la ciudad capital del estado de Oaxaca, y entre otras cosas, colocaron una serie de barricadas por toda la ciudad. La PFP envió algunos helicópteros para sobrevolar la zona y reportar el área total ocupada por estas barricadas. Los agentes solo regresaron con la información de las barricadas mapeadas como coordenadas (x,y). ¿Puedes ayudar a completar la misión?

En el siguiente applet (built with processing :P ), puedes generar una instancia del problema.
1. Con el click izquierdo dibujas los puntos que representan las barricadas.
2. Al presionar el click derecho se muestra el área que debes encontrar.

Sierpinski en 3D

Posted in Challenges, Processing by admin on the November 24th, 2008

El reto es sumarle una dimensión, como se muestra en el video

Dando continuidad al reto y para incentivar un poquito, el applet se vería así

¿qué hace está función?

Posted in Challenges by admin on the November 5th, 2008
void func(int n){
  char *s,cad[]={0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x0};
  s = &cad[7];
  while(n)
    *s--= (n & 1 << 7!=0) +'0',
    n >>= 1;
  printf("%s",cad);
}

Puede que pueda ser…

Posted in Challenges by admin on the November 4th, 2008

01101000011011110110110001100001
01100001 0111010001101111011001000110111101110011

Con este blog pretendo crear un espacio de ocio, para aquellos que gustan de los retos. La idea es proponer algún problema, acertijo o juego, que represente un reto para todos, comentar las soluciones y aumentar nuestra habilidad para resolver problemas matemáticos y lógicos.

Habrá ocasiones en que quizás sea necesario utilizar una computadora y un lenguaje de programación para resolver algún problema :P . Suerte!

011100000110111101110011011101000110010101100001
0111010001110101 0111001101101111011011000111010
101100011011010010110111101101110 01100001011100
010111010101101001