MouseOver Studio

MouseOver Studio header image 2

Code contest: Mega Sena acumulada

September 6th, 2007 por Diego Carrion · 12 comentários

Lendo hoje o blog do El Micox fiquei sabendo de um desafio muito interessante criado por Macaco Chefe:

Escrever em qualquer linguagem de programação um programa que realize 100.000 sorteios de um numero entre 1 e 60 e mostre na tela os 6 mais freqüentes.

Ganha quem fizer o programa com o menor numero de linhas possíveis, lembrando que a linha considerada é a linha da unidade léxica da linguagem, portanto a seguinte linha em Java seria considerada duas: int i =0; sysout(i);

Fiquei muito surpreso quando El Micox comentou que Bermon tinha conseguido fazer o desafio com somente uma linha, utilizando Ruby, como descreve no seu post. Por sua parte, El Micox não fico muito atrais e utilizando JavaScript, conseguiu resolver o problema em duas linhas, como mostrou aqui.

Dei uma olhada no código dele e tentei por as mãos na massa para ver si conseguia igualar o resultado do Bermon. Finalmente cheguei nessa solução, que espero possam analisar e validar.

A linha do código é:

for (var i, array = new Array(), j = 0; j < 100000; j++, i = Math.round(59 * Math.random ()) + 1, function() { if (j == 100000) array.sort(function(a,b) {return b.split(',')[1] - a.split(',')[1]}).slice(0,6).forEach(function(ele){document.write(ele.split(",")[0] + " ")})}())(typeof array[i] == 'undefined') ? array[i] = i + ",1" : array[i] = i + "," + (parseInt(array[i].split(",")[1]) + 1);

De jeito mais ordenado fica assim:

for (var i, array = new Array(), j = 0; j < 100000; j++, i = Math.round(59 * Math.random ()) + 1,
		function() {
			if (j == 100000) array.sort(
				function(a,b) {
					return b.split(',')[1] - a.split(',')[1]
				}
			).slice(0,6).forEach(
				function(ele) {
					document.write(ele.split(",")[0] + " ")
				}
			)
		}())
	(typeof array[i] == 'undefined') ?
		array[i] = i + ",1" :
		array[i] = i + "," + (parseInt(array[i].split(",")[1]) + 1)

Tags: JavaScript · programação

12 respostas ate agora ↓

  • 1 Micox // Sep 6, 2007 at 2:17 pm

    Jisuis!!! Caceta, ainda to tentando entender a parada hehaeheh
    //nota: não sabia da existencia do foreach para arrays. Valeu pela nova info :)

  • 2 Diego Carrion // Sep 6, 2007 at 7:12 pm

    Basicamente o que faz o script é validar em cada iteração si ja foram realizadas 10000 sorteios.

    Si a validação resultar em verdadeiro, nosso array é ordenado e logo são selecionados os 6 primeiros elementos.

    Finalmente imprimimos o valor de cada um desses elementos.

    O forEach e muito legal mas acho que no IE não rola, somente nos browsers decentes hehehe

  • 3 Bernardo Rufino // Sep 6, 2007 at 8:33 pm

    Poutz! Parabéns pessoal! Javascript no páreo!

  • 4 Bernardo Rufino // Sep 6, 2007 at 8:35 pm

    Feed Assinado!

  • 5 Walter Cruz // Sep 6, 2007 at 10:03 pm

    Eu até pensei em fazer em Javascript (que é uma das linguagens que eu mais gosto), mas deu uma preguiça! Ainda bem que temos duas versões..

    Micox, o forEach é só pra Javascript 1.6, que funciona no Firefox 1.5 (talvez nalgum outro browser não MS, alguém tem alguma informação?)

    Bacana o código :D

  • 6 JulioGreff // Sep 6, 2007 at 10:41 pm

    Legal! Dessa fiquei de fora mesmo, faltou miolo pra estudar…

  • 7 Fazedor de Site » Arquivos do Blog » Code contest: Mega Sena acumulada // Sep 7, 2007 at 6:01 am

    […] visto o dos outros, quem sai depois tem vantagem nesse caso Peguei o código do El Micox, com o do Diego, mudei detalhezinhos e acho que consegui reduzir, se vale assim, para 5 ou 4 linhas depende de quem […]

  • 8 Rodrigo Fante // Sep 7, 2007 at 6:19 am

    Fala Diego peguei seu código e o do Mico, mudei detalhes, juntei os 2, e deu pra reduzir um pouco.

    Diz o que vc acha depois.

  • 9 Rodrigo Fante // Sep 7, 2007 at 6:31 am

    Bom.. esquece o comentário anterior.
    Eu tinha feito besteira.
    A modificação que fiz era quase idêntica ao código reduzido do Mico, que quando li a primeira vez achei que era sempre o mesmo, porém com tudo colado.

    Vou editar o post.

    :/ falta de atenção é f…

  • 10 Diego Carrion // Sep 7, 2007 at 9:19 am

    Hehehe eu também na pressa deixei de prestar atenção em um monte de detalhes e dei um par de F5s até o código funcionar corretamente.

    Estava louquinho para conseguir uma solução de uma linha em JavaScript hahahah

  • 11 Rodrigo Fante // Sep 7, 2007 at 10:12 am

    ahahaha
    eu bem que tentei
    mas menor do que o que já mostraram não consegui.
    ahahahaha
    Mas é isso, o importante é tentar :D
    Quem sabe na próxima

  • 12 RodrigoSol // Sep 9, 2007 at 8:37 pm

    Bacana Cara!

    Já atualizei lá.

    Abraços,

Deixar um comentário