Archivo de la etiqueta: ciclos excesivos

Juego 4 en raya hecho en C++

Revisando entre mis curiosidades me encontré un código que hice hace varios años (de la prepa creo), se trata del juego 4 en línea o 4 en raya hecho en C++, he decidido subirlo al blog ya que no me gustaría que se perdiera en el final de los tiempos xD.

Pueden descargar el código fuente aca:

Juego 4 en raya hecho en C++

#include <iostream>

using namespace std;

const int n=6;
const int m=8;

bool sobranEspaciosLibres(int tablero[n][m])
{
    for(int i = 0; i < 6; i++)
    {
        for(int j = 0; j < 8; j++)
        {
            if(tablero[i][j] == 0)
            {
                //Sobran espacios donde colocar fechas
                //cout<<"Hay espacios"<<endl;
                return true;
            }
        }
    }

    //No sobran mas espacios donde colocar fichas, juego empatado
    cout<<"No hay mas espacios: empate"<<endl;
    return false;
}

void ImprimirTablero(int tablero[n][m])
{
    for(int i = 0; i < 6; i++)
    {
        for(int j = 0; j < 8; j++)
        {
            if(tablero[i][j] == 1)
            {
                cout<<" O ";
            }
            else if(tablero[i][j] == 2)
            {
                cout<<" X ";
            }
            else
            {
                cout<<" . ";
            }

        }
        cout<<endl;
    }
}

int ColocarFichaEn(int tablero[n][m], int columna)
{
    for(int i = 0; i < 6; i++)
    {
        if(!(i+1 > 5))
        {
            if(tablero[i][columna] == 0 && tablero[i+1][columna] != 0 )
            {
                return i;
            }
        }
        else
        {
            //Alcanzo la base del tablero
            if(tablero[i][columna] == 0)
            {
                return i;
            }
        }
    }

    return -1;
}

bool columnaATope(int tablero[n][m], int columna)
{
    if(tablero[0][columna] != 0)
    {
        cout<<"No hay espacio para colocar la ficha ahi"<<endl;
        return true;
    }
    return false;
}

bool ganador(int tablero[n][m], int fila, int columna, int jugador)
{
    //Vertical
    bool encontrado = false;
    int total = 0;

    for(int i = 0; i < n; i++)
    {
        //cout<<"i: "<<i<<endl;
        if(encontrado)
        {
            if(tablero[i][columna] == jugador)
            {
                total++;
            }
            else
            {
                encontrado = false;
                total = 0;
            }
        }
        if(tablero[i][columna] == jugador && !encontrado)
        {
            encontrado = true;
            total++;
        }

        //cout<<"total: "<<total<<endl;
        if(total == 4)
        {
            cout<<"El jugador "<<jugador<<" gana!"<<endl;
            return true;
        }
    }

    //Horizontal
    encontrado = false;
    total = 0;

    for(int i = 0; i < m; i++)
    {
        //cout<<"i: "<<i<<endl;
        if(encontrado)
        {
            if(tablero[fila][i] == jugador)
            {
                total++;
            }
            else
            {
                encontrado = false;
                total = 0;
            }
        }
        if(tablero[fila][i] == jugador && !encontrado)
        {
            encontrado = true;
            total++;
        }

        //cout<<"total: "<<total<<endl;
        if(total == 4)
        {
            cout<<"El jugador "<<jugador<<" gana!"<<endl;
            return true;
        }
    }

    //Diagonal \
    //Obtener Coordenadas donde inicia la diagonal en base a fila - columna
    int nuevaFila = fila;
    int nuevaColumna = columna;
    encontrado = false;
    total = 0;

    //cout<<"Fila: "<<fila<<" Columna: "<<columna<<endl;

    while((nuevaFila != 0 || nuevaColumna != 0))
    {
        nuevaFila--;
        nuevaColumna--;

        //cout<<"nueva Fila: "<<nuevaFila<<" nueva Columna: "<<nuevaColumna<<endl;
        if(nuevaFila == 0 || nuevaColumna == 0)
        break;
    }

    //cout<<"nueva Fila: "<<nuevaFila<<" nueva Columna: "<<nuevaColumna<<endl;

    do
    {
        if(nuevaFila >= n)
        break;

        //cout<<"nueva Fila: "<<nuevaFila<<" nueva Columna: "<<nuevaColumna<<endl;
        if(encontrado)
        {
            if(tablero[nuevaFila][nuevaColumna] == jugador)
            {
                total++;
            }
            else
            {
                encontrado = false;
                total = 0;
            }
        }
        if(tablero[nuevaFila][nuevaColumna] == jugador && !encontrado)
        {
            encontrado = true;
            total++;
        }

        //cout<<"total: "<<total<<endl;
        if(total == 4)
        {
            cout<<"El jugador "<<jugador<<" gana!"<<endl;
            return true;
        }

        nuevaFila++;
        nuevaColumna++;

    }while(nuevaFila < n);



    //Diagonal /
    nuevaFila = fila;
    nuevaColumna = columna;
    encontrado = false;
    total = 0;

    //cout<<"Fila: "<<fila<<" Columna: "<<columna<<endl;

    while((nuevaFila != 0 || nuevaColumna != m))
    {
        nuevaFila--;
        nuevaColumna++;

        //cout<<"nueva Fila: "<<nuevaFila<<" nueva Columna: "<<nuevaColumna<<endl;
        if(nuevaFila == 0 || nuevaColumna == m)
        break;
    }

    //cout<<"nueva Fila: "<<nuevaFila<<" nueva Columna: "<<nuevaColumna<<endl;

    do
    {
        //cout<<"nueva Fila: "<<nuevaFila<<" nueva Columna: "<<nuevaColumna<<endl;
        if(nuevaFila >= n)
        break;

        //cout<<"nueva Fila: "<<nuevaFila<<" nueva Columna: "<<nuevaColumna<<endl;
        if(encontrado)
        {
            if(tablero[nuevaFila][nuevaColumna] == jugador)
            {
                total++;
            }
            else
            {
                encontrado = false;
                total = 0;
            }
        }
        if(tablero[nuevaFila][nuevaColumna] == jugador && !encontrado)
        {
            encontrado = true;
            total++;
        }

        //cout<<"total: "<<total<<endl;
        if(total == 4)
        {
            cout<<"El jugador "<<jugador<<" gana!"<<endl;
            return true;
        }

        nuevaFila++;
        nuevaColumna--;

    }while(nuevaFila < n);

    return false;
}

int main()
{
    int matriz[n][m];

    //Preparamos el tablero del juego rellenandolo con 0's
    for(int i = 0; i < n; i++)
    {
        for(int j = 0; j < m; j++)
        {
            matriz[i][j] = 0;
            //cout<<matriz[i][j]<<" ";
        }
        //cout<<" "<<endl;
    }

    //Logica
    int jugador = 0;
    int ultimo = 0;
    do
    {
        int colocarColumna = -1;
        bool columnaTope = true;

        if(ultimo == 1)
        {
            jugador = 2;
        }
        else
        {
            jugador = 1;
        }

        do
        {
            cout<<"Turno del jugador "<<jugador<<" - Elije un numero del 1 al 8: "; cin>>colocarColumna; cout<<endl;
            colocarColumna--;
            columnaTope = columnaATope(matriz,colocarColumna);
        }
        while((colocarColumna < 0 || colocarColumna > 7) || columnaTope);

        int colocarFila = ColocarFichaEn(matriz,colocarColumna);
        matriz[colocarFila][colocarColumna] = jugador;
        ImprimirTablero(matriz);

        //Revisar si hay un 4 en raya
        if(ganador(matriz,colocarFila,colocarColumna,jugador))
        {
            break;
        }

        ultimo = jugador;
        jugador++;
    }
    while(sobranEspaciosLibres(matriz));

    return 0;
}

PD

No tiene nada de inteligencia artificial ni algoritmos minimax, es el código del juego simplemente, muy sencillo y algo feo también :p.

Video introducción a la Criptografía

Comparto con ustedes este excelente vídeo donde se da una pequeña introducción de lo que es la criptografía y su utilizaban, además también se muestra el funcionamiento del método de encriptación digital Diffie-Hellman Key Exchange o intercambio de llaves exponencial, espero lo disfruten :).

Regresando de Campus Party

Uff despues de una larga semana y algunos dias porfin estamos de regreso :), ¿que como describiria mi experiencia en campus party en 1 sola palabra? … Increible, asi es, simplemente fue increible, conoci bastante gente muy interesante, asisti a ponencias de gran nivel he hice nuevos amigos :).

Llegue el miercoles 20 a las 4 am al evento x’D (por cuestiones de trabajo), donde ya me estaban esperando @Zagrevyum y @uhgy3k (que no tenian camping x’D y pues ya les di 2 pases VIP :D), como ya era casi de dia pues ¿para que dormir? asi que emprendimos un dia maratoniano manteniendonos despiertos durante 2 dias y medio seguidos jajaja.

De las personas mas interesantes que conoci y con las cuales me tome algunas fotos fueron @_hkm, @cibercrimen, Jon Maddog, @xianur0, @nitr0usmx, @only_oCrA, @paulinocaIderon, Umberto121, @_soldier, @adrianmtzb, @tachuela, @tachuelaa, @bucio, @xrandy, @sucubus_vampire, son los que vienen a mi mente ahora (una disculpa si olvido alguno )

Las mejores conferencias sin duda fueron las de seguridad permitral y configuracion de honeypots, la de informatica forence, la de dotdotFUA (dotdoypwn)de @nitr0usmx, la de los routers de @_hkm, la herramienta fhttp de @Xianur0 y ya mas aca en la comunidad underground x’D la de creacion de scripts para nmap de @paulinocaIderon, bypasseando sistemas de seguridad biometricos de @xianur0, la conferencia de Napa sobre biohacking y enfermedades terminales (realizo una investigación muy completa e impresionante) y la de Umberto121 quien descifró el algoritmo de generación de contraseña de los routers Huawei Hg xD.

Sin duda ahi nos veremos el año que viene 🙂

A continuación les dejo algunas fotografias que tome 🙂

PD el año que viene me compro una mejor cámara jaja.

salu2

Activar compositing manager en backtrack 5


Hola lectores, en esa ocasión les traigo no un tutorial si no mas bien un breve tip, resulta que en la empresa donde actualmente trabajo (si esa donde desarrollo aplicaciones móviles y web) ahora esta comenzando proyectos de seguridad de la mano de PROSA xD y pues la verdad tenia ya algunos meses que no hacia algo de hacking.

Tengo otra laptop con ubuntu 10.04 dije, manos a la obra pero me pedía actualizar así que opte por mejor des instalar esa distribución e instalar backtrack (se que trae muchas herramientas que tal vez no utilizare), una distribución mas acorde a los fines que tengo que realizar, como soy un usuario de gnome algo que me agrado es que ahora backtrack trae de forma nativa ese escritorio :), instale el sistema operativo, lo actualice y voila.

Aun habían algunas cosas que tenia que arreglar antes, algo que me agrado mucho es que a diferencia de distribuciones pasadas era un lio primero hacer que las interfaces de red funcionaran, después la tarjeta de video etc, solo me resto activar el compositing manager, para los que no sepan que es, son esos pequeños efectos del gestor de ventanas Metacity que hacen que nuestro escritorio se vea un poco mejor, sin sacrificar recursos de la computadora (sombras en las ventanas, transparencias, etc).

Una vez que tenemos todos los paquetes actualizados

[email protected]:~# apt-get upgrade

tan simple como:

[email protected]:~# apt-get install xcompmgr

Después tan solo ejecuten el comando xcompmgr y listo

[email protected]:~# xcompmgr

Como es muy molesto estar escribiendo el comando cada vez que inicia Backtrack hay varias maneras para ejecutarlo al iniciar el sistema operativo, una seria crear un script en /etc/init.d/miScript o añadirlo a la lista de comandos en el archivo /etc/rc.local, etc. Pero para mas fácil tan solo nos vamos a System > Preferences > Startup Applications, seleccionamos Add (indicando que queremos añadir una nueva tarea) y en comando escribimos xcompmgr y listo 🙂 compositing-manager activado.

salu2

DefCon organiza una convención para mini-hackers de 8 a 16 años

Los organizadores de la convención anual de hackers DefCon han anunciado que lanzarán una versión infantil del evento para motivar a la nueva generación de hackers a desarrollar sus capacidades en el área de la informática.

DefCon Kids” estará dirigido a niños de entre 8 y 16 años, y su primera versión se llevará a cabo el 6 y 7 de agosto en Las Vegas, al mismo tiempo que la 19œ versión de DefCon.

“Es bueno tener la oportunidad de ser un mentor para niños que muchas veces son rechazados en el colegio por tener habilidades que otros chicos no comprenden”, opinó Joe Grand, un veterano de Defcon.

Los hackers también desmintieron la idea de que se enseñará a los chicos técnicas de hacking maliciosas. “Todos están asustados porque piensan que vamos a enseñar a los niños a ser malos, pero no es así”, dijo Chris Hadnagy, experto en seguridad y creador del sitio web social-engineer.org. “Internet está lleno de atacantes, y quiero que mis hijos tengan la habilidad de no caer en sus trampas cuando alguien esté intentando manipularlos para que hagan algo malo; ya sea por presión social o por parte de un adulto con malas intenciones”, dijo Hadnagy.

Se enseñará a los niños técnicas para asegurar sus redes inalámbricas, encontrar datos publicados en Google, hackear hardware para jugar juegos y codificar sus comunicaciones, entre otras cosas. Todo lo que se enseñe se hará desde un enfoque que promueva el hacking ético. Se les enseñará a descubrir fallas de seguridad para asegurarlas y no explotarlas.

Al evento también asistirán oficiales del gobierno estadounidense para buscar hackers que en el futuro puedan contratar para que ayuden a las autoridades a combatir el crimen virtual.

Hee vivan los mini hackers 🙂

salu2

via http://www.viruslist.com/sp/news?id=208274798