Cita de: Stakewinner00 en 1 Octubre 2012, 21:05 PM
esta forma de estructurar el if nunca lo havia visto
y a decir verdad solo entiendo la mitad.
Si me puedes explicar el ? y el a:b. que és lo que no entendi.
Operadores ternarios busca documentación sobre ellos son bastante útiles.
EI: juntando mensajes.
RETO 12:
Código (cpp) [Seleccionar]
#include <iostream>
#include <fstream>
using namespace std;
int numeroSudoku[100];
bool compruebaVertical();
bool compruebaCuadros();
bool compruebaHorizontal();
int main(int argc,char* argv)
{
ifstream archivo("sudoku.txt");
for(int x=0;x<=80 && archivo.eof() == false;x++)
{
archivo >> numeroSudoku[x];
}
if(compruebaVertical() && compruebaHorizontal() && compruebaHorizontal())
{
cout << "Sudoku Valido" << endl;
}
else
{
cout << "Sudoku Invalido" << endl;
}
return 0;
}
bool compruebaVertical()
{
if(numeroSudoku[0] + numeroSudoku[9] + numeroSudoku[18] + numeroSudoku[27] + numeroSudoku[36] + numeroSudoku[45] + numeroSudoku[54] + numeroSudoku[63] + numeroSudoku[72] == 45 )
{
if(numeroSudoku[1] + numeroSudoku[10] + numeroSudoku[19] + numeroSudoku[28] + numeroSudoku[37] + numeroSudoku[46] + numeroSudoku[55] + numeroSudoku[64] + numeroSudoku[73] == 45 )
{
if(numeroSudoku[2] + numeroSudoku[11] + numeroSudoku[20] + numeroSudoku[29] + numeroSudoku[38] + numeroSudoku[47] + numeroSudoku[56] + numeroSudoku[65] + numeroSudoku[74] == 45 )
{
if(numeroSudoku[3] + numeroSudoku[12] + numeroSudoku[21] + numeroSudoku[30] + numeroSudoku[39] + numeroSudoku[48] + numeroSudoku[57] + numeroSudoku[66] + numeroSudoku[75] == 45 )
{
if(numeroSudoku[4] + numeroSudoku[13] + numeroSudoku[22] + numeroSudoku[31] + numeroSudoku[40] + numeroSudoku[49] + numeroSudoku[58] + numeroSudoku[67] + numeroSudoku[76] == 45 )
{
if(numeroSudoku[5] + numeroSudoku[14] + numeroSudoku[23] + numeroSudoku[32] + numeroSudoku[41] + numeroSudoku[50] + numeroSudoku[59] + numeroSudoku[68] + numeroSudoku[77] == 45 )
{
if(numeroSudoku[6] + numeroSudoku[15] + numeroSudoku[24] + numeroSudoku[33] + numeroSudoku[42] + numeroSudoku[51] + numeroSudoku[60] + numeroSudoku[69] + numeroSudoku[78] == 45 )
{
if(numeroSudoku[7] + numeroSudoku[16] + numeroSudoku[25] + numeroSudoku[34] + numeroSudoku[43] + numeroSudoku[52] + numeroSudoku[61] + numeroSudoku[70] + numeroSudoku[79] == 45 )
{
if(numeroSudoku[8] + numeroSudoku[17] + numeroSudoku[26] + numeroSudoku[35] + numeroSudoku[44] + numeroSudoku[53] + numeroSudoku[62] + numeroSudoku[71] + numeroSudoku[80] == 45 )
{
return true;
}
}
}
}
}
}
}
}
}
else return false;
}
bool compruebaHorizontal()
{
bool sudokuCorrecto = false;
if(numeroSudoku[0] + numeroSudoku[1] + numeroSudoku[2] + numeroSudoku[3] + numeroSudoku[4] + numeroSudoku[5] + numeroSudoku[6] + numeroSudoku[7] + numeroSudoku[8] == 45 )
{
if(numeroSudoku[9] + numeroSudoku[10] + numeroSudoku[11] + numeroSudoku[12] + numeroSudoku[13] + numeroSudoku[14] + numeroSudoku[15] + numeroSudoku[16] + numeroSudoku[17] == 45 )
{
if(numeroSudoku[18] + numeroSudoku[19] + numeroSudoku[20] + numeroSudoku[21] + numeroSudoku[22] + numeroSudoku[23] + numeroSudoku[24] + numeroSudoku[25] + numeroSudoku[26] == 45 )
{
if(numeroSudoku[27] + numeroSudoku[28] + numeroSudoku[29] + numeroSudoku[30] + numeroSudoku[31] + numeroSudoku[32] + numeroSudoku[33] + numeroSudoku[34] + numeroSudoku[35] == 45 )
{
if(numeroSudoku[36] + numeroSudoku[37] + numeroSudoku[38] + numeroSudoku[39] + numeroSudoku[40] + numeroSudoku[41] + numeroSudoku[42] + numeroSudoku[43] + numeroSudoku[44] == 45 )
{
if(numeroSudoku[45] + numeroSudoku[46] + numeroSudoku[47] + numeroSudoku[48] + numeroSudoku[49] + numeroSudoku[50] + numeroSudoku[51] + numeroSudoku[52] + numeroSudoku[53] == 45 )
{
if(numeroSudoku[54] + numeroSudoku[55] + numeroSudoku[56] + numeroSudoku[57] + numeroSudoku[58] + numeroSudoku[59] + numeroSudoku[60] + numeroSudoku[61] + numeroSudoku[62] == 45 )
{
if(numeroSudoku[63] + numeroSudoku[64] + numeroSudoku[65] + numeroSudoku[66] + numeroSudoku[67] + numeroSudoku[68] + numeroSudoku[69] + numeroSudoku[70] + numeroSudoku[71] == 45 )
{
if(numeroSudoku[72] + numeroSudoku[73] + numeroSudoku[74] + numeroSudoku[75] + numeroSudoku[76] + numeroSudoku[77] + numeroSudoku[78] + numeroSudoku[79] + numeroSudoku[80] == 45 )
{
return true;
}
}
}
}
}
}
}
}
}
else return false;
}
bool compruebaCuadros()
{
bool sudokuCorrecto = false;
if(numeroSudoku[0] + numeroSudoku[1] + numeroSudoku[2] + numeroSudoku[9] + numeroSudoku[10] + numeroSudoku[11] + numeroSudoku[18] + numeroSudoku[19] + numeroSudoku[20] == 45 )
{
if(numeroSudoku[3] + numeroSudoku[4] + numeroSudoku[5] + numeroSudoku[12] + numeroSudoku[13] + numeroSudoku[14] + numeroSudoku[21] + numeroSudoku[22] + numeroSudoku[23] == 45 )
{
if(numeroSudoku[6] + numeroSudoku[7] + numeroSudoku[8] + numeroSudoku[15] + numeroSudoku[16] + numeroSudoku[17] + numeroSudoku[24] + numeroSudoku[25] + numeroSudoku[26] == 45 )
{
if(numeroSudoku[27] + numeroSudoku[28] + numeroSudoku[29] + numeroSudoku[36] + numeroSudoku[37] + numeroSudoku[38] + numeroSudoku[45] + numeroSudoku[46] + numeroSudoku[47] == 45 )
{
if(numeroSudoku[30] + numeroSudoku[31] + numeroSudoku[32] + numeroSudoku[39] + numeroSudoku[40] + numeroSudoku[41] + numeroSudoku[49] + numeroSudoku[50] + numeroSudoku[51] == 45 )
{
if(numeroSudoku[33] + numeroSudoku[34] + numeroSudoku[35] + numeroSudoku[42] + numeroSudoku[43] + numeroSudoku[44] + numeroSudoku[51] + numeroSudoku[52] + numeroSudoku[53] == 45 )
{
if(numeroSudoku[54] + numeroSudoku[55] + numeroSudoku[56] + numeroSudoku[63] + numeroSudoku[64] + numeroSudoku[65] + numeroSudoku[72] + numeroSudoku[73] + numeroSudoku[74] == 45 )
{
if(numeroSudoku[57] + numeroSudoku[58] + numeroSudoku[59] + numeroSudoku[66] + numeroSudoku[67] + numeroSudoku[68] + numeroSudoku[75] + numeroSudoku[76] + numeroSudoku[77] == 45 )
{
if(numeroSudoku[60] + numeroSudoku[61] + numeroSudoku[62] + numeroSudoku[69] + numeroSudoku[70] + numeroSudoku[71] + numeroSudoku[78] + numeroSudoku[79] + numeroSudoku[80] == 45 )
{
return true;
}
}
}
}
}
}
}
}
}
else return false;
}
El código no está para nada optimizado (puede ocupar menos de la mitad de lineas usando arrays multidimensionales),lo he hecho rápido antes de ir a acostarme . El usuario introduce los valores por lineas en un archivo de texto, de izquierda a derecha del sudoku es decir siguiendo esta imagen:
http://i.msdn.microsoft.com/dynimg/IC37479.gif
Una parte del archivo de texto quedaría así:
Código [Seleccionar]
6
3
2
7
8
1
9
4
5
...
Precisamente con el sudoku de ese gif he hecho la prueba del programa y funciona
Cuando tenga tiempo lo optimizaré, de momento 35 puntos más, esto engancha que te cagas