• Domingo 19 de Mayo de 2024, 14:56

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Mensajes - Binary

Páginas: 1 2 [3]
51
Retos / Re: Lectura De Testo
« en: Martes 3 de Agosto de 2004, 04:52 »
Hola!
Resolvi tu reto :D
La cosa es que la salida que has dado esta erronea, y el diccionario contiene palabras de la misla longitud que empiezan y terminan igual.

Sin embargo, me parecio un reto interesante y curioso. :D
Aqui te mando el programa.

Es muy simple: tiene 80 lineas, pero la mitad son comentarios para claridad.
Tiene capacidad de hasta 5000 palabras (no veo necesidad para hacerlo mas espacioso). Maximo largo de palabra 20, maximo largo de puntuacion 3, maximo espacio entre palabras: 1.

El algoritmo es lineal, me refiero a que al toparse con una palabra del texto lo busca entre todas las palabras del diccionario con este largo. Eso significa que el algoritmo llega hasta una complejidad de O(M
  • ) para cada palabra con largo X, donde M
  • es el numero de palabras en el diccionario con largo x.


Una posible optimacizacion para el algoritmo para acelerarlo, seria ordenar las palabras de un mismo largo (del diccionario) por orden lexicografico y buscar una que empieze con la letra deseada, mediante Binary_search().

Eso daria una velocidad de hasta lg(M
  • )) + O(lgM
  • ) para cada palabra.

Eso aceleraria el proceso solo si las palabras de igual largo empiezan con diferentes letras, sino el bin_search() indicara buscar desde la palabra 1 hasta el final, y no cabe sentido.

... Adjunto el codigo ...
Esta escrito en C/C++ :D
Personalmente, prefiero la entrada/salida de C, pero en C++ todo lo que es definicion de tipos y punteros es mas accesible, asiq ue generalmente hago una mezcla.

Saludos.

52
C/C++ / Re: Como Dejar Algo Impreso Estatico
« en: Martes 3 de Agosto de 2004, 03:01 »
yo lo haria con gotoxy(int x, int y);
haces

#include <conio.h>

gotoxy(40, 20);
cout<<"Hello World"<<endl;

y todo lo del juego de la misma forma... asi es bastante portatil, definiendo los y y x al inicio...

Aunque no se, tal vez el metodo de la ventana sea un poco mas sofisticado... yo por decir no mas :D

A mi me ha funcionado en todos los trabajos con posiciones en pantalla.

Saludos!

53
C/C++ / Re: Alguien Sabe Como Transformar ..
« en: Martes 3 de Agosto de 2004, 01:34 »
Hay, creo algunas bibliotecas, pero yo prefiero hacerlo por mi cuenta.
La idea es ir sacandole los digitos de atras hacia adelante, y meterlos al string, luego inviertes el string, mira:

char s[MAXD];
int number;

void transform()
{
int p = 0;

if(number == 0) s[0] = 0;
else
while(number > 0) {
s[p++] = number % 10; // le ponemos el ultimo digito en s[p]
number /= 10;  // le sacamos el ultimo digito
}

invertir string; //porque el s[0] contiene el ultimo digito, el s[1] el penultimo y asi..

}


invertir string se puede hacer con strrev(s); ( <string.h> ), eso si, el ultimo char del string debe ser el nulo = '\0'. ---> s[p++] = '\0';

o si quieres, manualmente:


int i, j;
char aux;
i = 0; j = strlen(s); //eso es "p" de arriba
while(i < j) {
aux = s;
s = s[j];
s[j] = aux;
i++; j--;
}

eso seria todo.
saludos. :D

54
C/C++ / Re: Graficos
« en: Lunes 2 de Agosto de 2004, 01:39 »
Hey Binary... here I got ur answer!

When u copy the buffer into the video buffer, please us char f[], otherways, u are copying entire (int) value with is 4 bytes, and there will be only 1 pixel per 4 pissible. Nice try :D

P.D. nice answering myself, just lenguage switch and im not the same :D

55
C/C++ / Graficos
« en: Domingo 1 de Agosto de 2004, 23:58 »
Hola... estoy utilizando graficos en DJGPP con

   #include <dpmi.h>
   #include <go32.h>
   #include <sys/farptr.h>      
   #include <sys/movedata.h>

Bueno, el problema que tengo es que los pixeles salen a una distancia de aprox 4 pixeles... o sea... al trazar una linea horizontal o vertical, salen puntos bastante alejados unos de otros, como si estuviera una resolucion de 50(y)*80(x) en vez de 200(y) * 320(x) que seria el modo 13h.

Cualquier respuesta, informacion o pista esta bienvenida :D
Saludos...

P.D. adjunto codigo y .exe para mostrar lo que ocurre.

56
C/C++ / Re: Backtacking, Problema En El Algoritmo
« en: Domingo 1 de Agosto de 2004, 05:09 »
hahaha.... rec() = find() :D my mistake... srry

57
C/C++ / Re: Backtacking, Problema En El Algoritmo
« en: Domingo 1 de Agosto de 2004, 05:08 »
se me olvidaba....
Debes tener ingresados los numeros en: int num[] (1 based) o sea... tu primer numero debe ser el 1, y el ultimo el N.

Debes llamar a la funcion find asi: find(1, suma), donde suma es la suma que quieres producir de los numeros en num[].

Saludos.


P.D. escribi el codigo en el foro directo... no me he dado el trabajo de depurarlo, pero lo mas importante es que lo entiendas... pregunta si tienes algo inclaro por alli....

58
C/C++ / Re: Backtacking, Problema En El Algoritmo
« en: Domingo 1 de Agosto de 2004, 05:03 »
Entretenido tu codigo, pero no lo entiendo...
No dice donde tienes los numeros, donde anotas el 0/1 ni nada.

Mira... la idea del algoritmo es dejar un numero dentro o fuera del conjunto que dara la suma deseada. Asi... tenemos 2^N posibilidades (para cada numero: 0/1 (usarlo, no usarlo))

Eso se llama trabajo en niveles....
EN el caso, tenemos N niveles, y en cada uno debemos decidir si el nivel sera 1 o 0.

En el fondo, estamos generando un vector de 0 i 1... ej: 010101010.
Como se hace esto: para cada nivel de la recursion (backtracking), probamos con 0 i luego con 1, y probamos asi para este nivel.


El codigo debe ser asi:

nivel: nivel que estamos determinando (si usar el numero num[nivel] o no)
sum: la suma que nos queda por generar a tal nivel de la recursion

int rec(int nivel,  int sum)
{
  if(nivel > N)  {    // Si nivel esta fuera del rango de los numeros que tenemos
    if(sum == 0) { print(); return 1; }   // Si hemos logrado producir la suma
    else return 0;  // si no, nos devolvemos sin exito
  }
  else {
    b[nivel] = 0;
    if(rec(nivel+1, sum)) // probamos con el proximo numero sin usar el num[nivel]
      return 1;

    if(num[nivel] <= sum) { // si el numero que ponemos no excede la suma que buscamos
      b[nivel] = 1;
      if(rec(nivel+1, sum-num[nivel]))
        return 1;
    }
    return 0;
  }
}


la funcion print sera asi:

void print()
{
  for(int i = 1; i <= n; i++)
    if(b == 1) // si usamos el numero con indice i
      cout<<num;
}


int find() devuelve 1 si encontro una suma, 0 si no.

59
C/C++ / Re: Cambio Compilador
« en: Sábado 31 de Julio de 2004, 23:35 »
Pues, te decides con un compilador, lo bajas, los instalas y programas en el :D
No se si sabes, pero el lenguaje es igual, me refiero a que todos los compiladores para C/C++ hacen mas o menos lo mismo.

El VC++ es bueno, no veo necesidad de cambiarlo.
El DJGPP es el otro que se lleva buen credito (es bajo DOS)

Saludos.

60
C/C++ / Re: Backtacking, Problema En El Algoritmo
« en: Sábado 31 de Julio de 2004, 15:07 »
ah, y dime si de verdad necesitas el backtracking, o prefieres el metodo de la mochila, porque no se para que lo necesitas...

Lo que si, es que el backtrack es lentisimo. Yo nunca lo ocuparia para hacer sumas. Eso sirve solo para puzles, caballos y reinas :D (todos se saben esos clasicos de la demostracion del backtrack) :D

61
C/C++ / Re: Backtacking, Problema En El Algoritmo
« en: Sábado 31 de Julio de 2004, 15:05 »
A ver...
antes que nada... el metodo que quieres ocupar es muy lento...
un backtracking (o recursion por niveles mejor), porque el backtracking es diferente, te costara mucho tiempo para N > 30. (numeros)

Lo que te recomiendo es que checkees el metodo de la mochila, que hace todas las sumas de numeros en tan solo unas 5-6 lineas de codigo. Eso es de la parte dinammic programming (hacer soluciones a partir de soluciones mas chicas ya calculadas).

Asi, ese codigo ententara con el primer numero, segundo, tercero, hasta que encuentre una suma == X.
Incluso te puede encontrar la suma con la menor cantidad de numeros posibles (como optimazicacion), sin agregarle ni una linea de codigo.

Ahora no tengo tiempo para escribirlo...
Si alguien otro puede hacerlo por aqui, excelente, si no... esperame unas 6 horas, luego te lo codifico y explico.

Saludos.

62
C/C++ / Re: Sonido
« en: Sábado 31 de Julio de 2004, 14:57 »
Muchas gracias... el sound(freq) y nosound() funcionaron a la perfeccion.
Lo que si, es que para juegos, no se puede usar delay(), porque el juego debe continuar, no? :D

Asi que eso lo verifico con:
clock_t t1, t2;

sound(freq);
t1 = t2 = clock();

if(t1 + (0.1 * CLK_TCK) > t2)  nosound();
else  t2 = clock();

Lo que si, me salvaste el pellejo :D
Me estaba urgiendo porque no sabia como ponerle sonido.
Para los que quieran, aqui esta el .exe
No envio los codigos, porque es trabajo de 3 horas (no documentado, ni ordenado)

Adios, y gracias de nuevo!

63
C/C++ / Sonido
« en: Sábado 31 de Julio de 2004, 01:06 »
Necesito saber la forma mas simple de producir algun sonido en C/C++ (DJGPP)
Windows XP... es para una juego... (tetris), solo necesito un beep para cuando avancen las piezas...

Tengo todo lo demas terminado.

64
Diseño de Algoritmos / Re: Codigo De Una Matriz Magica
« en: Viernes 30 de Julio de 2004, 19:29 »
Cual es el rango de cada numero?
Cual es la relacion de cada fila? (suma, multiplicacion, otro)
Cuentan diagonales? Cuales?

Respondeme eso y lo pienso :D

65
C/C++ / Página Web De Retos
« en: Jueves 29 de Julio de 2004, 14:53 »
"Hola mundo!"
No es por ser muy gracioso que es la primera frase del primer programa de cada principiante. Es por su aparicion en este campo de las ciencias, especificamente la informatica.

La razon en este post, es una idea que me surgio, a partir de mi campo de interes.
Yo me dedico a las competencias de informatica como la IOI, ACM, TopCoder, y aunque no soy de los mejores, tengo suficientes conocimientos como para guiar a otras personas hacia este campo.

Mi idea es crear una pagina web que impulse a personas de habla hispana a estudiar esta ciencia de forma interactiva. Esto es, avanzar por un programa de una serie de problemas a resolver, avanzando de nivel y dificultad.

A cada problema, se tendra una aproximacion de tiempo por resolver, un "consejito" como un poco de ayuda (al principio) y el usuario tratara de escribir el codigo que mediante la pagina sera mandado a los webmasters que lo testeran y le mandaran de regreso los resultados.

Asi, despues de cada problema habra una o dos soluciones posibles.

Ademas, cada cierto nivel (compuesto de unos 10 problemas), tendra su topico especifico, como basicos, matrices, grafos, dinamic programming, greedy algorithms, etc.

Asi, de forma interactiva, los usuarios podran por su cuenta entender y competir, ademas de intercambiar opiniones y discutir en los foros que tendremos. Luego, la mayoria de estas personas, posiblemente se enfoquen en competencias de mayor nivel, o simplemente habran desarrollado una forma de pensar logica, dirigida hacia los algorithmos.

Espero que todos los interesados se comuniquen conmigo.
Eso sera algo mas que un reto para nosotros, y para los usuarios de la futura pagina.

Mi nombre es Velin Alexandrov.
Vivo en Chile desde hace 7 anios, aunque soy bulgaro.
Email: velin_alexandrov@hotmail.com

Un saludo!

Páginas: 1 2 [3]