[Evento del Gran Baile]Seguridad informática

Topic created · 68 Mensajes · 7187 Visitas
  • entonces como lo puedo hacer?

  • @archii said:

    interviene = intervieneneivretni en ves de intervieneivretni

    ¿Estás seguro de esto amigo? El palíndromo más corto es intervieneivretni, por tanto intervieneivretni es la correcta...

  • Tenéis el programa de ejemplo que he subido para ver lo que debería generar, para eso lo subí xD Está en el primer post, bajáoslo y comprobad todas las palabras que queráis. No estoy seguro si funciona bien con solo espacios en blanco o con palabras vacías porque cuando hice el programa no había pensado todavía cómo pediroslo, de todas formas eso es lo de menos, lo que importa es que genere bien las palabras, lo demás son minucias.

  • Ale, el jefe ha hablado xD. El concurso se termina puesto que ya se ha publicado la solucion. Esta semana volvere a mi casa de nuevo y publicare los resultados. Ahora estoy desde el iPod pero mañana pongo mi código.

    Un saludo.

  • **Aquí el mio, me costó muchísimo tiempo uff, aunque ahora casi ya no me acuerdo de mucho xD, aquí el mio:

    #include 
    #include 
    
    using namespace std;
    void pass_sure();
    void code_compare(string code,int one);
    void pass_create_pid();
    void pass_create(string code);
    void code_generate(string palin);
    
    void menu(){
        int select;
        cout << "Menu:\n";
        cout << "1. Introduce tu clave\n" << "2. Crea una clave\n";
        cin >> select;
        if(select == 1){
                  pass_sure();
        } else if(select == 2) {
              pass_create_pid();
        }else{
              cout << "Introduce un numero valido\n";
        }
        menu();
    }
    void pass_sure(){
        string code;
        char sure;
        int one = 0;
        while(true){
            cout << "Introduce tu codigo:\n";
            getline(cin, code);
            getline(cin, code);
            break;
            cout << "Este es tu codigo: " << code << "\nEstas seguro?(y/n)\n";
            cin >> sure;
            if (sure == 'y'){
                     break;
            }else {
                  continue;
            }
        }
        code_compare(code, one);    
    }
    void code_compare(string code, int one){
         string code_invert;
         int i, j, sure;
         i = 0;
         if(one == 0){
             while(i < code.size()){
                         while(true){
                             if(code[i] == ' '){
                                          code.erase(i, 1);
                             }else{
                                   break;
                             }
                         }
                                code[i] = tolower(code[i++]);
             }
         }
         code_invert = code;
         for(i= 0, j = code.size()-1; i < code.size(); i++, j--){
                 code_invert[i] = code[j];
         }
         if (code_invert == code && code.size() != 0){
                             if(one == 1){
                                    cout << code << endl;
                             }else{
                             cout << "\nTu codigo es un palindromo" << endl << "Puedes entrar a la fiesta\n\n";
                             }
         } else {
                if(one == 1){
                       pass_create(code);
                }else {
                cout << "Lo siento, tu codigo no es un palindromo\n\n";
                }
         }
         menu();
    
          system("pause > null");
    }
    
    void pass_create_pid(){
         string create_code;
         int one = 1;
         cout << "Introduce una frase o palabra:\n";
         getline(cin, create_code);
         getline(cin, create_code);
         code_compare(create_code, one);
    
    }
    void pass_create(string code){
         string code_palin, code_in;
         int i = 0;
         int s, j;
         code_palin = code;
         int num1 = code.size();
         while(i < code.size()){
                 code_palin.insert(code_palin.begin()+ num1, code[i++]);
                 code_in = code_palin;
                 for(s = 0, j = code_palin.size()-1; s < code_palin.size(); s++, j--){
                       code_in[s] = code_palin[j];
                 }
                 if(code_in == code_palin){
                                  code_generate(code_palin);
                                  break;
                       }
         }      
    }
    
    void code_generate(string palin){
         cout << "Tu codigo generado a palindromo es:\n";
         cout << palin << endl;
    }     
                    
             
    
    
    int main(){
        cout << "Codigo para el Concurso de Programacion \" El Gran Baile\"\nBy Danibonilla1\n";
        menu();
    
    }
    
    
    [licencia][/licencia] Por si acaso[/s][/i][/i][/i]
    

    **

  • Aquí está mi código fuente, si no se entiendo algo (y deduzco que no se entenderá la función iswpal xD) podéis preguntar para no quedaros con las dudas 😛

    #include  //libreria para entrada/salida (cin y cout)
    #include  //libreria para usar strings
    #include  //libreria para usar diversas funciones como tolower()
    using namespace std;
    
    bool ispal(string s) { //devuelve true si la cadena enviada es un palíndromo sin ignorar espacios en blanco
        // y distinguiendo mayúsculas de minúsculas.
        int i=0, j=s.length()-1;//i es la primera posición de la cadena y j la última
    	/**
    	* Ahora voy comparando la 1ª letra con la última, despues la segunda con la penúltima,
    	* y así hasta llegar al centro. De esta forma me ahorro revertir la frase.
    	*/
        while(i < j) {
            if(s[i++] != s[j--]) {
                return false;//si alguna vez las letras no coinciden, devuelvo false
    			// porque la cadena NO sería un palíndromo
            }
        }
        return true;//si llega hasta aquí es que la cadena es un palíndromo, por lo que devuelvo true
    }
    
    bool iswpal(string s) {//devuelve true si la cadena enviada es un palíndromo ignorando espacios
        //y sin distinguir mayúsculas de minúsculas
    
        //Hago lo mismo que antes pero añado tolower al comparar y me salto los espacios en blanco
        int i=0, j=s.length()-1;
        while(i < j) {
            while(i < j && s[i] == ' ') i++;
            while(i < j && s[j] == ' ') j--;
            if(tolower(s[i++]) != tolower(s[j--])) {
                return false;
            }
        }
        return true;
    }
    
    string palcorto(string& s) {
        string tmp = "";//inicializo la cadena tmp
        int i=0, len = s.length();
        while(i != len) {//mientras que i sea diferente de la longitud de la cadena inicial...
            if(ispal(s.substr(i))) {//si una subcadena desde i hasta el final es un palíndromo
                //la solución es añadirle a la cadena inicial todo desde el principio hasta i
                tmp = s;
                if(i) {
                    for(int j = i-1; j > -1; j--) {
                        tmp += s[j];
                    }
                }
                break;
            }
            i++;
        }
        return tmp;
    }
    
    int main() {
    	//Aquí lo unico que hago es mostrar el menú con todas las opciones.
        int opcion;
        string s;
        while(1) {
            cout << "Menu:" << endl << "1- Comprobar codigo." << endl << "2- Crear codigo nuevo" << endl << "3- Salir" << endl << endl;
            cin >> opcion;
            if(opcion != 1 && opcion != 2 && opcion != 3) {
                cout << '\a' << "No existe la opcion " << opcion << endl << endl;
            } else if(opcion == 1) {
                cout << "Introduce tu codigo del baile: ";
                getline(cin,s);
                getline(cin,s);
                if(iswpal(s) && s.length() != 0) {
                    cout << "El codigo introducido es correcto." << endl << endl;
                } else {
                    cout << '\a' << "ERROR: el codigo introducido no es correcto." << endl << endl;
                }
            } else if (opcion == 2) {
                cout << "Introduce una palabra para generar un codigo valido: ";
                getline(cin,s);
                getline(cin,s);
                if(s.length() == 0) cout << '\a' << "Error, tienes que introducir algo, no puedes generar un codigo a partir de una cadena vacia." << endl << endl;
                cout << "El codigo generado es \"" << palcorto(s) << "\"" << endl << endl;
            } else {
                return 0;
            }
        }
        return -1;
    }
    
    Añado también al primer post el código fuente.
    
    Un saludo!![/i]
  • Tal y como prometí, aquí están los resultados del concurso. Me parecía injusto elegir a uno solo así que he considerado ganadores a todos los que resolvieron correctamente todo. Y son los siguientes...
    ¡¿Qué nervios, eh?!
    Danibonilla1
    Nhur
    Salvatore
    freak7z

  • ups, se me paso poner el src...pero bueno ahi lo dejo para el que quiera verlo

    moduleMain

    from time import sleep
    from os import system
    
    def estiloVentana():
        system("title Seguridad para el Baile")
        system("mode con cols=80 lines=35")
        
    
    
    def mostrarMenu(titulo='Mi Menu',*menus):
        
        ## codigo de cabecera del Menu ##
        print """
            /*************************************************************\\
            /*******%s*******\\
            /*************************************************************\\
            """ %titulo.center(47)
        ## fin de la cabecera ##
        
        menus = menus + ('Salir\n',) ## agregar siempre el menu Salir aunque no se pasen argumentos
    
        ## codigo del ciclo para mostrar la lista del Menu ##
        for x in range(len(menus)):
            print "%d.- %s" %((x+1),menus[x])
        ## fin del codigo de la lista del Menu ##
    
    
    def ingresarOpcion():
        while True:
            try:
                opcion = input("Escoja una opcion del menu anterior(solo numeros): ")
                
                if (opcion  3):
                    print "Solo numeros validos del Menu\n"
                    continue
                else:
                    return opcion
            
            except NameError:
                print "Dije solo numeros\n"
                continue
            
            except SyntaxError:
                print "Debe Ingresar algun valor valido\n"
                continue
            
            except KeyboardInterrupt:
                break
    
    
    def verificarOpcion():
        while True:
            opt = ingresarOpcion()
            
            if opt == 1:
                ## -codigo para comprobar palindromo- ##
                frase = raw_input("\nIngrese la Frase: ")
                            
                if comprobarPalindromo(frase,1):
                    print 'La frase "%s" es palindroma. Puede pasar a la fiesta.\n' %frase
                    
                else:
                    print 'La frase "%s" NO es palindroma. NO puede pasar a la fiesta.\n' %frase
                    
                if seguirCerrar(): continue
                else: cerrarPrograma()
                break
                ## -fin del codigo de comprobacion- ##
            
            elif opt == 2:
                ## -codigo para crear palindromo- ##
                frase = raw_input("\nIngrese una Frase: ")
                if frase == ' ':
                    print "No se puede crear palindromos con espacios en blanco.\n"
    
                elif frase == '':
                    print "No se puede crear palindromos si no ingresas algo.\n"
                    
                else:
                    crearPalindromo(frase)
    
                if seguirCerrar(): continue
                else: cerrarPrograma()
                break
                ## -fin del codigo de creacion- ##
            
            elif opt == 3:
                cerrarPrograma()
                break
    
            else:
                break
    
    
    def comprobarPalindromo(frase,opcion):
        if (opcion == 1):
            frase = frase.lower()
    
        frase = frase.replace(' ','')
        
        if (frase == frase[::-1]): return True
        else: return False
    
    
    def crearPalindromo(cfrase):
        cont = 1
        if comprobarPalindromo(cfrase,2): print 'La frase "%s" ya es palindroma.\n' %cfrase
        else:
            for i in cfrase:
                tempFrase = cfrase + cfrase[:cont][::-1]
                if comprobarPalindromo(tempFrase,2):
                    print 'Frase Palindroma:  %s\n' %(tempFrase)
                    break
                cont = cont + 1
        
    
    def seguirCerrar():
        while True:
            seguir = raw_input("Desea Continuar?(S/N): ")
            
            if(seguir.lower() == 's'):
                print "\n"
                return True
            
            elif(seguir.lower() == 'n'): return False
    
    
    def cerrarPrograma():
        print "Saliendo...",
        sleep(1.5)
    

    main

    try:
        from moduleMain import *
        estiloVentana()
        mostrarMenu('Seguridad para el Baile','Ingresar y comprobar una frase.','Ingresar una frase y formar un palindromo.')
        verificarOpcion()
       
    except ImportError:
        print "\n'moduleMain' no encontrado."
        raw_input("\nPresione ENTER para salir...")
    

    quizas mucho codigo para ser python, pero era el primer programa que hize en este lenguaje, espero puedan comprender.

    y muchas felicidades a los ganadores 😉