Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Concurso De Programacion

Iniciado por MA]Mestre, 09 de Marzo de 2005, 04:06:21 PM

« anterior - próximo »

sés

Cita de: "gdl"
Cita de: "JuanK"
gdl,
el tuyo se revienta con cualquiera que comience por 7 y sea diferente de 7
cualquier numero teminado en 99 tambien lo revienta
Eso es porque has compilado en arquitectura i386 ¿verdad?  ;)
Prueba en otra arquitectura o con un mejor compilador.
Yo he compilado con MingW y no pasa lo del 7X, peri si que se vuelve loco si le meto un 99.
Lo de los espacios está bien, justo como dice en las reglas.
Soy indeciso... ¿o no?

igon

 Creo que envié otro que ocupaba mas, pero bueno


#include<stdio.h>
j,d,o,e[9][9];
main(i) {
scanf("%d",&d);
for(i=d/2-1,j=d-2;d&1*d>2&9/d&o<d*d;e[++i%d][++j%d]?--i,j-=2:i,e[i%d][j%d]=++o);
for(;o--;printf(o%d?"%-3d":"%-3d\n",e[o%d][o/d]));
}



nostromo

 Hay va mi codigo(128bytes contando un 0xA)...



#include<stdio.h>
s,j;main(d){for(scanf("%d",&d);~6&d-3?0:j<d*d;printf("\n%-3d"+(j++%d>0),(s-j%d+d/2)%d*d+s%d+1))s=j%d*2-j/d+d;}


Por cierto, es interesante ver de donde vienen estas formulas: http://mathforum.org/te/exchange/hosted/su...are.OddbyC.html
Creo que deberia haberme puesto a calcular las formulas a mano según la idea del link anterior, simplemente es una rotacion de 45º!!!    <_<

Bueno, que el ganador sea quien sea lo disfrute   (ole)

Un saludo a todos,

shephiroth

 Juas no se yo de donde habeis sacado esas expresiones, pero la verdad felicidades a todos xDD

La verdad que habeis ido quitando bytes por todos lados, hasta declarando una variable en el main O_O

Mi codigo no es tan reducido, al final me quede un poco por debajo de los 150 bytes (cosa que al principio me parecio imposible llegar xDD


#include <stdio.h>
i,t,N;
main(){
scanf("%i",&N);
if(N%2&&N>2&&N<10)
for(;t<N*N;){i=t/N+1+t%N*2;t%N?0:puts("");printf("%-3d",1+i%N+(N/2+i-t++%N)%N*N);}
}


Despues de ver vuestros codigos y sin reducciones matematicas, podría quitarme unos 10 bytes faciles, pero weno.....

gracias a todos y felicidades al ganador xDD

gdl

 
Cita de: "sés"
Cita de: "gdl"
Cita de: "JuanK"
gdl,
el tuyo se revienta con cualquiera que comience por 7 y sea diferente de 7
cualquier numero teminado en 99 tambien lo revienta
Eso es porque has compilado en arquitectura i386 ¿verdad?  ;)
Prueba en otra arquitectura o con un mejor compilador.
Yo he compilado con MingW y no pasa lo del 7X, peri si que se vuelve loco si le meto un 99.
Lo de los espacios está bien, justo como dice en las reglas.
Si sigues usando la arquitectura i386, seguirá fallando.

Por otra parte, es verdad, sés, que tu código funciona. El problema era el ++i dentro de un argumento a la llamada a printf(). El orden de la evaluación de los parámetros varía entre compiladores (el estándar asume esto).  :)

Por cierto, supongo que no se tendrán en cuenta las limitaciones de las arquitecturas porque en i386 todos los que usen int van a descubrir que su código falla cuando se introduce el número 4294967299. :blink:


Pogacha

 Como nadie demostro darse cuenta, replico "lo mio era un cazabobos"  :P y nadie leyó realmente el codigo

i,n;main(){for(scanf ("%d", &n );n>2&n<10&n&in*7+n)%n+i)%n));}

Me parecen muy interesantes los codigos finales ... muy trabajados todos, mis felicitaciones a todos, muchas ideas que no se me hubiesen ocurrido.

Cronodragón

 Ups, estaba seguro que Nostromo había hecho algo similar a mí. Bueno, este es mi código de 126 caracteres incluyendo un cambio de línea de 1 caracter:

#include <stdio.h>
main(){char n[99];FILE*f;scanf("%s",&n);if(f=fopen(n,"r")){while(!feof(f)){fgets(n,99,f);printf("%s",n);}}}


Nadie se dió cuenta de que las condiciones del concurso no dicen nada acerca de que no se puedan usar archivos adicionales al .c, y tampoco dicen nada sobre que el programa tenga que desarrollar matemáticamente el cuadrado, simplemente dice que lo muestre en pantalla. :) Así que junto a ese código van 4 archivitos llamados "3", "5", "7" y "9" que tienen el cuadrado pre-diseñado y listo para se lanzado a la consola. Espero que hayan valido esos exámenes en la universidad donde los profesores se pasaban de listos y ponían trampas en los encabezados de los problemas, por lo que te forzaban a leer con cuidado... y sino, fue divertido hacer esa solución válida. Que gane el mejor! :D

JuanK

 iNCREIBLE!!!

AJJAJAJAJAJAJA


Y para mi que si cumple con lo pedido, pues en ningun lado dice lo contrario.
(asco)  me siento muy torpe (genial)  

JuanK

 Y pensar que hubiese podido quedar aun más pequeño con algo asi como esto::

#include <stdio.h>
n[99];main(){FILE*f;f=fopen(n,"r");for(scanf("%s",&n);f&!feof(f),fgets(n,99,f);printf("%s",n));}


(twist)  (grrr)

114 caracteres

shephiroth

 Por poder aun se puede menos xDD


#include <stdio.h>
n[9];main()for(scanf("%s",&n),FILE*f=fopen(n,"r");f&!feof(f);fgets(n,9,f),printf("%s",n));


Son 6 bytes menos xDD

EDITADO:
Juank lo tuyo no rula, haces fopen antes de leer el numero xDD (y el for tienes mal ajustados los ; y las , pero no interfiere en nº de bytes)

JuanK

  Y pensar que hubiese podido quedar aun más pequeño con algo asi como esto::

bueno como podras entender no lo habia probado pues lo hice de afan en la oficina y sin opcion de hacer pruebas.

gdl

 Siento decirlo, pero el código de cronodragón tampoco cumple las reglas del concurso. De hecho, esas reglas dicen que

Citar• La dimensión del cuadrado mágico será aceptada con la instrucción scanf, acabándose el programa prematuramente, si el valor introducido no es una dimensión permitida.

He compilado y probado el programa de cronodragón y, como dimensión del cuadrado, he puesto

c:\windows\system.ini

Que claramente no es un número impar entre el 3 y el 9. El programa no ha acabado prematuramente, sino que ha impreso una serie de datos por pantalla.

Creo que va a quedarse desierto el concurso como sigamos a este paso.... O_O

patagon

Cita de: "Cronodragón"Ups, estaba seguro que Nostromo había hecho algo similar a mí. Bueno, este es mi código de 126 caracteres incluyendo un cambio de línea de 1 caracter:

#include <stdio.h>
main(){char n[99];FILE*f;scanf("%s",&n);if(f=fopen(n,"r")){while(!feof(f)){fgets(n,99,f);printf("%s",n);}}}


Nadie se dió cuenta de que las condiciones del concurso no dicen nada acerca de que no se puedan usar archivos adicionales al .c, y tampoco dicen nada sobre que el programa tenga que desarrollar matemáticamente el cuadrado, simplemente dice que lo muestre en pantalla. :) Así que junto a ese código van 4 archivitos llamados "3", "5", "7" y "9" que tienen el cuadrado pre-diseñado y listo para se lanzado a la consola. Espero que hayan valido esos exámenes en la universidad donde los profesores se pasaban de listos y ponían trampas en los encabezados de los problemas, por lo que te forzaban a leer con cuidado... y sino, fue divertido hacer esa solución válida. Que gane el mejor! :D
La solución de cronodragón es totalmente absurda y evidentemente no será dada por válida.

Siguiendo esta lógica, no se porque no se le ocurrió enviar un ejecutable cualquiera que pidiera los datos, resolviera el problema y lo imprimiera y un .c (de ¿50 Kb?) que simplemente ejecutara el anterior programa.

fiero

 Bueno, patagon, no es exactamente lo mismo. El sistema de cronodragón a mi me parece totalmente válido. Muchas veces cuando programamos nos encontramos con la cuestión de poder sustituir ciertos algoritmos que siempre tendrán las mismas salidas, por tablas de datos, para hacerlo más rápido. Otra cuestión es que no cumpla lo del 3,5,7,9. De todas formas por lo que veo no es el más corto.

un saludo

PD: leyendome de nuevo las bases no dice nada de que el programa deba calcular matemáticamente, solo dice que debe mostrar.
www.videopanoramas.com Videopanoramas 3D player

gdl

 La idea de Cronodragón es muy válida en la programación real: el precálculo. Sin embargo, en este caso tiene los defectillos que comenté antes.






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.