Algoritmo para exibir número de 1 a 100 aleatoriamente, sem repetir
Acabei de ver um cara perguntando isso no fórum.imasters.
Ele queria saber como exibir aleatoriamente números de 1 a 100, sem repeti-los.
Bom, primeiro precisamos dos tais números de 1 a 100
$arr = range(1,100);
Ok, então preciso exibir cada um desses números aleatoriamente, sem repeti-los.
O primeiro código que me veio na cabeça, foi o seguinte:
<?php
$arr = range(1,100);
while( sizeof( $arr )>0 )
{
shuffle( $arr );
echo $arr[0], '<br />';
unset( $arr[0] );
}
Não é o “melhor” código, nem o mais performático. Mas não é isso que me fez escrevê-lo.
Fiz apenas para “ver se resolvia”. Worse is better.
Ok, vamos lá. O loop ali, anda no array até ele “acabar”, pois conforme vou exibindo a primeira posição do array, eu removo este item dele.
Funciona. Mas note o shuffle ali dentro do loop. A cada volta ele é feito desnecessariamente.
Se desordenei o array uma vez, não preciso ficar fazendo isso a cada elemento que for exibir. Os próximos elementos já estarão “em ordem aleatória”.
Então, esse “incomodo” que estava atrapalhando a performance, e tornava o algoritmo mais complicado do que preciso, podemos jogar para fora do loop, e apenas exibir o array:
<?php
$arr = range(1,100);
shuffle( $arr );
foreach( $arr AS $each )
{
echo $each, '<br />';
}
Bem melhor.
Mas o importante foi a iniciativa de começar. Precisei de cerca de 4 minutos para ler o problema, formular o código ruim, e depois chegar a solução final.
O importante é não travar, não ficar só pensando, só especulando.. sem rascunhar, sem tentar.
Tente, comece fazendo um código ruim, desde que depois vc o melhore.