elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  RETOS C++
0 Usuarios y 3 Visitantes están viendo este tema.
Páginas: 1 2 [3] 4 5 6 7 8 9 10 11 12 13 14 15 16 17 Ir Abajo Respuesta Imprimir
Autor Tema: RETOS C++  (Leído 56,095 veces)
do-while


Desconectado Desconectado

Mensajes: 1.276


¿Habra que sacarla de paseo?


Ver Perfil
Re: RETOS C++
« Respuesta #20 en: 21 Septiembre 2012, 12:40 pm »

1.
Código
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. #define DIM 100
  5.  
  6. int main(int argc, char *argv[])
  7. {
  8.    char texto[DIM],*cifras[]={"cero","uno","dos","tres","cuatro","cinco","seis","siete","ocho","nueve"};
  9.    int i;
  10.  
  11.    do{
  12.        if(!fgets(texto,DIM,stdin))
  13.            return 0;
  14.  
  15.        for(i = 0 ; texto[i] ; i++)
  16.            if(texto[i] >= '0' && texto[i] <= '9')
  17.                printf("%s\n",cifras[texto[i] - '0']);
  18.  
  19.    }while(texto[strlen(texto) - 1] != '\n');
  20.  
  21.    return 0;
  22. }
  23.  

Código
  1. #include <iostream>
  2. #include <string>
  3.  
  4. using namespace std;
  5.  
  6. int main(int argc, char *agrv[])
  7. {
  8.    char *cifras[] = {"cero","uno","dos","tres","cuatro","cinco","seis","siete","ocho","nueve"};
  9.    string texto;
  10.  
  11.    getline(cin,texto);
  12.  
  13.    for(int i = 0 ; i < texto.length() ; i++)
  14.        if(texto[i] >= '0' && texto[i] <= '9')
  15.            cout << cifras[texto[i] - '0'] << endl;
  16.  
  17.    return 0;
  18. }
  19.  

Y mas eficiente:
Código
  1. #include <iostream>
  2. #include <string>
  3.  
  4. using namespace std;
  5.  
  6. int main(int argc, char *agrv[])
  7. {
  8.    char *cifras[] = {"cero","uno","dos","tres","cuatro","cinco","seis","siete","ocho","nueve"};
  9.    string texto;
  10.  
  11.    getline(cin,texto);
  12.  
  13.    //no se dice nada sobre el orden
  14.    for(int i = texto.length() - 1 ; i >= 0 ; i--)
  15.        if(texto[i] >= '0' && texto[i] <= '9')
  16.            cout << cifras[texto[i] - '0'] << endl;
  17.  
  18.    return 0;
  19. }
  20.  

2. Faltan datos: ¿Nombre del fichero? ¿Tipo de fichero? (binario/texto) ¿Leer completo, por bloques de una cantidad determinada de bytes, por palabras...?

3.
Código
  1. #include <stdio.h>
  2.  
  3. int main(int argc, char *argv[])
  4. {
  5.    int max, num,i;
  6.  
  7.    scanf("%d",&max);
  8.  
  9.    for(i = 1 ; i < 4 ; i++)
  10.    {
  11.        scanf("%d", &num);
  12.        if(num > max)
  13.            max = num;
  14.    }
  15.  
  16.    printf("Max: %d\n",max);
  17.  
  18.    return 0;
  19. }
  20.  

4.
Código
  1. #include <iostream>
  2. #include <string>
  3.  
  4. using namespace std;
  5.  
  6. int main(int argc, char *argv[])
  7. {
  8.    string min, palabra;
  9.    int i;
  10.  
  11.    cin >> min;
  12.  
  13.    for(i = 1 ; i < 4 ; i++)
  14.    {
  15.        cin >> palabra;
  16.  
  17.        if(palabra < min)
  18.            min = palabra;
  19.    }
  20.  
  21.    cout << min;
  22.  
  23.    return 0;
  24. }
  25.  

5. Faltan datos: ¿Alfabeto? ¿Longitud de la clave?


« Última modificación: 21 Septiembre 2012, 13:35 pm por do-while » En línea

- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!
Stakewinner00


Desconectado Desconectado

Mensajes: 1.426



Ver Perfil WWW
Re: RETOS C++
« Respuesta #21 en: 21 Septiembre 2012, 15:09 pm »

perdon  por los que se confundieron con el punto 4 fue error mio.

Estoy mirando los codigos y sumando los puntos.

do-while, en los que faltan datos es libre

ecfisa, en tu codigo falta un include despues lo añado


« Última modificación: 21 Septiembre 2012, 15:11 pm por Stakewinner00 » En línea

do-while


Desconectado Desconectado

Mensajes: 1.276


¿Habra que sacarla de paseo?


Ver Perfil
Re: RETOS C++
« Respuesta #22 en: 21 Septiembre 2012, 16:22 pm »

2.
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main(int argc, char *argv[])
  5. {
  6.    FILE *f;
  7.    char *contenido;
  8.    unsigned long longitud;
  9.  
  10.    f=fopen("algunfichero","rb");
  11.  
  12.    fseek(f,0,SEEK_END);
  13.  
  14.    if(!(contenido = malloc(longitud = ftell(f))))
  15.        return -1;
  16.  
  17.    fseek(f,0,SEEK_SET);
  18.  
  19.    fread(contenido,longitud,1,f);
  20.  
  21.    fclose(f);
  22.  
  23.    free(contenido);
  24.  
  25.    return 0;
  26. }
  27.  

5.
Este crashea con alfabetos de mas de 18 caracteres y longitud 6
Código
  1. /*
  2.  *  linea de comandos:
  3.  *      nombreprograma alfabeto longitud
  4.  */
  5.  
  6. #include <iostream>
  7. #include <list>
  8. #include <string>
  9. #include <cstring>
  10. #include <cstdlib>
  11.  
  12. using namespace std;
  13.  
  14. unsigned long convertir(char *s);
  15. void bruteforce(list<string> &resultado,char *alfabeto,unsigned long longitud);
  16.  
  17. int main(int argc, char *argv[])
  18. {
  19.    list<string> resultado;
  20.    unsigned long l;
  21.  
  22.    if(argc != 3)
  23.    {
  24.        cerr << argv[0] << " alfabeto longitud" << endl;
  25.        return -1;
  26.    }
  27.  
  28.    if(!(l = strlen(argv[1])))
  29.    {
  30.        cerr << argv[0] << " alfabeto longitud" << endl;
  31.        return -1;
  32.    }
  33.  
  34.  
  35.    //eliminamos caracteres repetidos del alfabeto
  36.    for(int i = 0 ; i < strlen(argv[1]) ; i++)
  37.        if(strchr(argv[1] + i + 1 , argv[1][i]))
  38.        {
  39.            memmove(argv[1] + i ,argv[1] + i  + 1, (l--) - i );
  40.            i--;
  41.        }
  42.  
  43.    //nos aseguramos de que el segundo argumento sea numerico
  44.    for(int i = 0 ; argv[2][i] ; i++)
  45.        if(argv[2][i] < '0' || argv[2][i] > '9')
  46.        {
  47.            cerr << argv[0] << " alfabeto longitud" << endl;
  48.            return -1;
  49.        }
  50.  
  51.    bruteforce(resultado,argv[1],convertir(argv[2]));
  52.  
  53.    for(list<string>::iterator it = resultado.begin() ; it != resultado.end() ; it++)
  54.        cout << (*it) << endl;
  55.  
  56.    return 0;
  57. }
  58.  
  59. unsigned long convertir(char *s)
  60. {
  61.    unsigned long ret = 0;
  62.  
  63.    for(int i = 0 ; s[i] ; i++)
  64.    {
  65.        ret *= 10;
  66.        ret += s[i] - '0';
  67.    }
  68.  
  69.    return ret;
  70. }
  71.  
  72. void bruteforce(list<string> &resultado,char *alfabeto,unsigned long longitud)
  73. {
  74.    static string cadena;
  75.    static unsigned long posicion = 0;
  76.  
  77.    if(posicion == longitud)
  78.    {
  79.        //si hemos llegado a la ultima posicion almacenamos la variacion
  80.        resultado.push_back(cadena);
  81.        return;
  82.    }
  83.  
  84.    //si es la primera llamada damos la longitud deseada a la cadena
  85.    if(posicion == 0)
  86.        cadena.resize(longitud);
  87.  
  88.    //para cada una de los caracteres del alfabeto
  89.    for(int i = 0 ; alfabeto[i] ; i++)
  90.    {
  91.        cadena[posicion] = alfabeto[i]; //asignamos a la posicion correspondiente el caracter del alfabeto.
  92.  
  93.        //avanzamos una posicion
  94.        posicion++;
  95.  
  96.        //y calculamos el siguiente caracter
  97.        bruteforce(resultado , alfabeto , longitud);
  98.  
  99.        //volvemos a la posicion original
  100.        posicion--;
  101.    }
  102.  
  103.    //posicion termina a cero para la siguiente llamada
  104.    if(!posicion)
  105.        cadena.resize(0);
  106. }
  107.  

Alternativa:
Código
  1. /*
  2.  *  linea de comandos:
  3.  *      nombreprograma alfabeto longitud
  4.  */
  5.  
  6. #include <iostream>
  7. #include <string>
  8. #include <cstring>
  9. #include <cstdlib>
  10.  
  11. using namespace std;
  12.  
  13. unsigned long convertir(char *s);
  14. void bruteforce(char *alfabeto,unsigned long longitud);
  15.  
  16. int main(int argc, char *argv[])
  17. {
  18.    unsigned long l;
  19.  
  20.    if(argc != 3)
  21.    {
  22.        cerr << argv[0] << " alfabeto longitud" << endl;
  23.        return -1;
  24.    }
  25.  
  26.    if(!(l = strlen(argv[1])))
  27.    {
  28.        cerr << argv[0] << " alfabeto longitud" << endl;
  29.        return -1;
  30.    }
  31.  
  32.  
  33.    //eliminamos caracteres repetidos del alfabeto
  34.    for(int i = 0 ; i < strlen(argv[1]) ; i++)
  35.        if(strchr(argv[1] + i + 1 , argv[1][i]))
  36.        {
  37.            memmove(argv[1] + i ,argv[1] + i  + 1, (l--) - i );
  38.            i--;
  39.        }
  40.  
  41.    //nos aseguramos de que el segundo argumento sea numerico
  42.    for(int i = 0 ; argv[2][i] ; i++)
  43.        if(argv[2][i] < '0' || argv[2][i] > '9')
  44.        {
  45.            cerr << argv[0] << " alfabeto longitud" << endl;
  46.            return -1;
  47.        }
  48.  
  49.    bruteforce(argv[1],convertir(argv[2]));
  50.  
  51.    return 0;
  52. }
  53.  
  54. unsigned long convertir(char *s)
  55. {
  56.    unsigned long ret = 0;
  57.  
  58.    for(int i = 0 ; s[i] ; i++)
  59.    {
  60.        ret *= 10;
  61.        ret += s[i] - '0';
  62.    }
  63.  
  64.    return ret;
  65. }
  66.  
  67. void bruteforce(char *alfabeto,unsigned long longitud)
  68. {
  69.    static string cadena;
  70.    static unsigned long posicion = 0;
  71.  
  72.    if(posicion == longitud)
  73.    {
  74.        //si hemos llegado a la ultima posicion almacenamos la variacion
  75.        cout << (cadena) << endl;
  76.        return;
  77.    }
  78.  
  79.    //si es la primera llamada damos la longitud deseada a la cadena
  80.    if(posicion == 0)
  81.        cadena.resize(longitud);
  82.  
  83.    //para cada una de los caracteres del alfabeto
  84.    for(int i = 0 ; alfabeto[i] ; i++)
  85.    {
  86.        cadena[posicion] = alfabeto[i]; //asignamos a la posicion correspondiente el caracter del alfabeto.
  87.  
  88.        //avanzamos una posicion
  89.        posicion++;
  90.  
  91.        //y calculamos el siguiente caracter
  92.        bruteforce(alfabeto , longitud);
  93.  
  94.        //volvemos a la posicion original
  95.        posicion--;
  96.    }
  97.  
  98.    //posicion termina a cero para la siguiente llamada
  99.    if(!posicion)
  100.        cadena.resize(0);
  101. }
  102.  
« Última modificación: 21 Septiembre 2012, 16:26 pm por do-while » En línea

- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!
Stakewinner00


Desconectado Desconectado

Mensajes: 1.426



Ver Perfil WWW
Re: RETOS C++
« Respuesta #23 en: 21 Septiembre 2012, 16:43 pm »

do-while el 2 no compila

a.cpp:14: ANSI C++ forbids implicit conversion from `void *' in assignment

el otro te subo los puntos

quien haga otro programa más rápido que el de el ganara más puntos
o si alguien lo hace más lento ganaras mas puntos tu do-while
« Última modificación: 21 Septiembre 2012, 16:46 pm por Stakewinner00 » En línea

do-while


Desconectado Desconectado

Mensajes: 1.276


¿Habra que sacarla de paseo?


Ver Perfil
Re: RETOS C++
« Respuesta #24 en: 21 Septiembre 2012, 16:48 pm »

¡Buenas!

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main(int argc, char *argv[])
  5. {
  6.    FILE *f;
  7.    char *contenido;
  8.    unsigned long longitud;
  9.  
  10.    f=fopen("algunfichero","rb");
  11.  
  12.    fseek(f,0,SEEK_END);
  13.  
  14.    if(!(contenido = (char*) malloc(longitud = ftell(f))))
  15.        return -1;
  16.  
  17.    fseek(f,0,SEEK_SET);
  18.  
  19.    fread(contenido,longitud,1,f);
  20.  
  21.    fclose(f);
  22.  
  23.    free(contenido);
  24.  
  25.    return 0;
  26. }
  27.  

Prueba ahora, que en C++ me parece que no se puede asignar un punter void a un puntero no void. Obliga a hacer el cast.

¡Saludos!
En línea

- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!
Stakewinner00


Desconectado Desconectado

Mensajes: 1.426



Ver Perfil WWW
Re: RETOS C++
« Respuesta #25 en: 21 Septiembre 2012, 16:55 pm »

¡Buenas!

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main(int argc, char *argv[])
  5. {
  6.    FILE *f;
  7.    char *contenido;
  8.    unsigned long longitud;
  9.  
  10.    f=fopen("algunfichero","rb");
  11.  
  12.    fseek(f,0,SEEK_END);
  13.  
  14.    if(!(contenido = (char*) malloc(longitud = ftell(f))))
  15.        return -1;
  16.  
  17.    fseek(f,0,SEEK_SET);
  18.  
  19.    fread(contenido,longitud,1,f);
  20.  
  21.    fclose(f);
  22.  
  23.    free(contenido);
  24.  
  25.    return 0;
  26. }
  27.  

Prueba ahora, que en C++ me parece que no se puede asignar un punter void a un puntero no void. Obliga a hacer el cast.

¡Saludos!

ami no me salta ningun error pero no me habre ningun archivo ya probe de crear un archivo con ese nombre y camiar el nombre pero no muestra el texto del documento
En línea

0xDani


Desconectado Desconectado

Mensajes: 1.077



Ver Perfil
Re: RETOS C++
« Respuesta #26 en: 21 Septiembre 2012, 16:58 pm »

El programa de do-while que es el crackeador de md5 o el generador de diccionarios? Lo digo porque ya he solucionado lo de que no escribiera en el mio.

Es simple, pero se puede hacer mas complejo.

Código
  1. #include <stdio.h>
  2.  
  3. int main()
  4. {
  5. char vars[6];
  6. vars[5]='\n';
  7. FILE* diccionario = fopen("diccionario", "w");
  8. for(vars[0]='a'; vars[0]<'z'; vars[0]++)
  9. {
  10.   for(vars[1]='a'; vars[1]<'z'; vars[1]++)
  11.   {
  12.     for(vars[2]='a'; vars[2]<'z'; vars[2]++)
  13.      {
  14.        for(vars[3]='a';vars[3]<'z'; vars[3]++)
  15.         {
  16.  
  17.          for(vars[4]='a';vars[4]<'z'; vars[4]++)
  18.           {fprintf(diccionario, "%s", vars);}
  19.         }
  20.      }
  21.   }
  22. }
  23. fclose(diccionario);
  24. return 0;
  25. }
  26.  

Es C, ahora lo subo en C++.
En línea

I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!

I code for $$$
Hago trabajos en C/C++
Contactar por PM
Stakewinner00


Desconectado Desconectado

Mensajes: 1.426



Ver Perfil WWW
Re: RETOS C++
« Respuesta #27 en: 21 Septiembre 2012, 16:59 pm »

El programa de do-while que es el crackeador de md5 o el generador de diccionarios? Lo digo porque ya he solucionado lo de que no escribiera en el mio.

Es simple, pero se puede hacer mas complejo.

Código
  1. #include <stdio.h>
  2.  
  3. int main()
  4. {
  5. char vars[6];
  6. vars[5]='\n';
  7. FILE* diccionario = fopen("diccionario", "w");
  8. for(vars[0]='a'; vars[0]<'z'; vars[0]++)
  9. {
  10.   for(vars[1]='a'; vars[1]<'z'; vars[1]++)
  11.   {
  12.     for(vars[2]='a'; vars[2]<'z'; vars[2]++)
  13.      {
  14.        for(vars[3]='a';vars[3]<'z'; vars[3]++)
  15.         {
  16.  
  17.          for(vars[4]='a';vars[4]<'z'; vars[4]++)
  18.           {fprintf(diccionario, "%s", vars);}
  19.         }
  20.      }
  21.   }
  22. }
  23. fclose(diccionario);
  24. return 0;
  25. }
  26.  

Es C, ahora lo subo en C++.

el suyo es el de fuerza bruta de momento dowhile va ganando haber si lo superas
En línea

do-while


Desconectado Desconectado

Mensajes: 1.276


¿Habra que sacarla de paseo?


Ver Perfil
Re: RETOS C++
« Respuesta #28 en: 21 Septiembre 2012, 17:04 pm »

¡Buenas!

¿A que te refieres con un crackeador de MD5? ¿A redibir como argumento un hash y generar una cadena que de el mismo hash?
En línea

- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!
0xDani


Desconectado Desconectado

Mensajes: 1.077



Ver Perfil
Re: RETOS C++
« Respuesta #29 en: 21 Septiembre 2012, 17:05 pm »

el suyo es el de fuerza bruta de momento dowhile va ganando haber si lo superas

Ok, pero yo gano puntos o no? Se me ha adelantado por segundos :-[

Aqui esta en C++:

Código
  1. #include <fstream>
  2.  
  3. int main()
  4. {
  5. char vars[6];
  6. vars[5]='\n';
  7. ofstream diccionario.open("diccionario", ios::out);
  8. for(vars[0]='a'; vars[0]<'z'; vars[0]++)
  9. {
  10.   for(vars[1]='a'; vars[1]<'z'; vars[1]++)
  11.   {
  12.     for(vars[2]='a'; vars[2]<'z'; vars[2]++)
  13.      {
  14.        for(vars[3]='a';vars[3]<'z'; vars[3]++)
  15.         {
  16.  
  17.          for(vars[4]='a';vars[4]<'z'; vars[4]++)
  18.           {diccionario.write(vars, 6);}
  19.         }
  20.      }
  21.   }
  22. }
  23. diccionario.close();
  24. return 0;
  25. }
En línea

I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!

I code for $$$
Hago trabajos en C/C++
Contactar por PM
Páginas: 1 2 [3] 4 5 6 7 8 9 10 11 12 13 14 15 16 17 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[RECOPILACION DE RETOS] VBClassic Por 79137913
Programación Visual Basic
79137913 5 14,458 Último mensaje 21 Enero 2013, 18:58 pm
por 79137913
Zona de retos Scripting « 1 2 3 »
Scripting
Eleкtro 23 55,633 Último mensaje 20 Enero 2014, 19:16 pm
por Eleкtro
Retos de java « 1 2 »
Java
4dr14n31t0r 10 5,735 Último mensaje 22 Enero 2016, 16:06 pm
por 0xFer
Retos forenses en español?
Dudas Generales
Sapote 0 2,070 Último mensaje 22 Mayo 2017, 02:58 am
por Sapote
Retos(1 - 15) (wardGame) « 1 2 »
Desafíos - Wargames
4A45414E 14 8,174 Último mensaje 10 Noviembre 2018, 03:16 am
por zonahurbana
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines