Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

The XeoN

Quem anima desafio?

Recommended Posts

Então, o meu está pronto. Por mim eu posto hoje, mas se o Denis e/ou o Evandro precisarem de mais uma semana, eu apoio, assim posso melhorar o meu.

Compartilhar este post


Link para o post
Compartilhar em outros sites

o meu resolve apenas sudoku's fáceis =\

 

gostaria de mais uma semana para implementar o último módulo que falta, tenho ele na cabeça, mas não consigo passar para a codificação

Compartilhar este post


Link para o post
Compartilhar em outros sites

aaaaaaaaeeeeewwww!

 

eu acabei de acabar. Imagem Postada

 

Mas acho legal mais uma semana tambem, ajuda bastante.

 

Edit: e tambem seria injusto, ja que nem todos terminaram ainda.

 

//eu apoio, assim posso melhorar o meu. [2]

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como os três participantes se manifestaram favoráveis ao adiamento da avaliação em mais uma semana, marquemos a entrega dos códigos para segunda feira, 8 de março.

 

Sucesso a todos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então galera, negócio é o seguinte.

 

Eu humildemente venho aqui dizer que meu script não está pronto.

 

Eu quando propus este desafio, na verdade eu queria um teste para ver se eu conseguiria entrar na empresa ou não.

 

Hoje já na empresa, e na condição de estagiário, ficou muito apertado o meu tempo.

 

Mas, como aceitei participar do desafio, isso pouco importa.

 

Eu até tenho a ideia na cabeça, mas como é muito complicada, não tive tempo para passar para o código.

 

Apesar também de saber que minha lógica tinha alguns erros.

 

Mas enfim, quem ganhar, ganhará por mérito, por conseguir criar um script difícil, que requer muito tempo e MUITA lógica, apesar de não requerer tanto conhecimento do php.

 

Desejando sorte aos demais competidores, posto aqui o meu código, intacto, do mesmo jeito que deixei.

 

Inclusive com comentários, e com uma gambiarrazinha na função getPossibleValue(). Apesar da minha campanha, todo mundo é humano ne Imagem Postada

 

Particularmente, acho que o Oenning irá ganhar. Nada contra o Evandro, torcida mesmo Imagem Postada

<?phperror_reporting(E_ALL | E_STRICT);ini_set('display_errors' , 1);define('X', NULL);$sudoku = array(	//	   0   1   2   3   4   5   6   7   8			array( 5 , 3 , X , X , 7 , X , X , X , X ), //0	array( 6 , X , X , 1 , 9 , 5 , X , X , X ), //1	array( X , 9 , 8 , X , X , X , X , 6 , X ), //2	array( 8 , X , X , X , 6 , X , X , X , 3 ), //3	array( 4 , X , X , 8 , X , 3 , X , X , 1 ), //4	array( 7 , X , X , X , 2 , X , X , X , 6 ), //5	array( X , 6 , X , X , X , X , 2 , 8 , X ), //6	array( X , X , X , 4 , 1 , 9 , X , X , 5 ), //7	array( X , X , X , X , 8 , X , X , 7 , 9 ), //8	//     0   1   2   3   4   5   6   7   8);dlSolveSudoku::loadGame($sudoku);class dlSolveSudoku{		private static $numbers, $game, $possibles;	public final static function loadGame($game)	{		self::$numbers = range(1, 9);		self::$game = $game;		self::checkArray();	}		private final static function filterArray($array)	{		$array = array_filter($array);		$newArray = array_unique($array);		return (count($array) == count($newArray));	}		private final static function getRow($index)	{		for($i = 0; $i <= 8; $i++)		{			$array[] = self::$game[$i][$index];		}		return $array;	}		private final static function getBlock($index)	{		$x = $index % 3 * 3;		$y = floor($index / 3) * 3;		for($i = 0; $i < 3; $i++)		{			for($w = 0; $w < 3; $w++)			{				$block[] = self::$game[$y + $w][$x + $i];			}          		}		return $block;	}		private final static function getPossibleValue($line, $row, $number)	{		switch($line)		{			case 0:			case 1:			case 2:				switch($row)				{					case 0:					case 1:					case 2:						$block = 0;							break;					case 3:					case 4:					case 5:						$block = 1;							break;					case 6:					case 7:					case 8:						$block = 2;							break;				}					break;			case 3:			case 4:			case 5:				switch($row)				{					case 0:					case 1:					case 2:						$block = 3;							break;					case 3:					case 4:					case 5:						$block = 4;							break;					case 6:					case 7:					case 8:						$block = 5;							break;				}					break;			case 6:			case 7:			case 8:				switch($row)				{					case 0:					case 1:					case 2:						$block = 6;							break;					case 3:					case 4:					case 5:						$block = 7;							break;					case 6:					case 7:					case 8:						$block = 8;							break;				}					break;		}		if(!in_array($number, self::$game[$line]) && !in_array($number, self::getRow($row)) && !in_array($number, self::getBlock($block)))		{			self::$possibles[$line][$row][] = $number;		}	}		private final static function uniquePossibleValues()	{		if(isset(self::$possibles) && is_array(self::$possibles))		{			for($line = 0; $line <= 8; $line++)			{				for($row = 0; $row <= 8; $row++)				{					if(isset(self::$possibles[$line][$row]) && count(self::$possibles[$line][$row]) == 1)					{						return false;					}				}			}			return true;		}		else		{			return false;		}	}		private final static function possibleValues()	{		$ifUnique = false;		do		{			for($line = 0; $line <= 8; $line++)			{				for($row = 0; $row <= 8; $row++)				{					foreach(self::$numbers as $number)					{						if(self::$game[$line][$row] == NULL)						{							self::getPossibleValue($line, $row, $number);						}					}					if(isset(self::$possibles[$line][$row]) && count(self::$possibles[$line][$row]) == 1)					{						self::$game[$line][$row] = self::$possibles[$line][$row];						unset(self::$possibles[$line][$row]);						$ifUnique = false;					}				}			}			$ifUnique = true;		}		while(!$ifUnique);		print_r(self::$possibles);		//self::solveGame();	}		private final static function isSolved($what, $index)	{		switch($what)		{			case 'row':				$array = self::$game[$index];					break;			case 'line':				$array =  self::getRow($index);					break;			case 'block':				$array = self::getBlock($index);					break;		}		return (count(array_diff(self::$numbers, $array)) == 0);	}		private final static function isSolvedGame()	{		for($i = 0; $i <= 8; $i++)		{			if(!self::isSolved('row', $i) || !self::isSolved('line', $i) || !self::isSolved('block', $i))			{				return false;			}		}		return true;	}		private final static function checkArray()	{		try		{			if(!is_array(self::$game) || count(self::$game) != 9)			{				throw new Exception("O array informado é inválido.");			}			foreach(self::$game as $key => $cols)			{				if(!is_array($cols) || count($cols) != 9 || !self::filterArray($cols) || !self::filterArray(self::getRow($key))|| !self::filterArray(self::getBlock($key)))				{					throw new Exception("O array informado é inválido.");				}				foreach($cols as $colKey => &$values)				{					$values = trim($values);					if(!preg_match("/^[1-9]{1}$/", $values))					{						if($values != NULL)						{							throw new Exception("Há valores incorretos no array ($array[{$key}][{$colKey}]).");						}					}				}			}		}		catch(Exception $e)		{			die($e->getMessage());		}		self::possibleValues();	}		private final static function solveGame()	{		$save = self::$game;		while(!self::isSolvedGame())		{			self::$game = $save;			for($line = 0; $line <= 8; $line++)			{				for($row = 0; $row <= 8; $row++)				{					if(isset(self::$possibles[$line][$row]))					{						if(count(self::$possibles[$line][$row]) == 1)						{							self::$game[$line][$row] = self::$possibles[$line][$row][0];						}						else						{							//self::$game[$line][$row] = self::$possibles[$line][$row][0];							//parei aqui						}					}				}			}		}	}			private final static function exportGame($type = NULL)	{		switch($type)		{			case 'json':				return json_encode(self::$game);					break;			case 'serialize':				return serialize(self::$game);					break;			case 'text':				return self::parseText(self::$game);					break;			case 'table':				return self::parseTable(self::$game);					break;			default:				return self::$game;		}	}	}?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

  Mostrar conteúdo oculto

 

 

 

fail Imagem Postada

 

 

como devem ter percebido, ela deve ser utilizada através de try/catch para manipulação de erros

 

para valores não-seriais (números sequenciais de 1 a X), utilizar o método ::setUp(mixed $items) onde $items é um array contendo os valores que preenchem o sudoku

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.