(eu qui fiz esse banner hihihi)

Code contest: Mega Sena acumulada

Vindo do blog do Bermon (que provavelmente vai ser o vencedor), eu tinha que dar uma contribuição JavaScript para o desafio do Macaco chefe né? (Por favor, sem piadinhas. Ele não é chefe do mico hehehehh)

Mesmo sabendo que não ia nem chegar perto dos vencedores, não podia deixar o Javascript de fora da brincadeira hehe.

O desafio:

“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); ”

Os malucos do Ruby conseguiram fazer em 1 linha (incluindo o bermon nos ‘malucos’).
Com javascript eu tentei de várias formas porém eu só consegui fazer com 2 linhas:


for(var i,ra=new Array(),j=0 ; j<10000 ; j++,i=Math.round(59*Math.random())+1,ra[i]= (typeof(ra[i])=='undefined') ? ra[i]=i+" "+1  :  ra[i]=i+' '+(parseInt(ra[i].split(' ')[1]) + 1)) {  }
document.write(ra.sort(function(a,b){return b.split(' ')[1] - a.split(' ')[1]}).slice(0,6).join(' vez(es)\n<br />'));

Se não valer assim, aumento um pouquinho (também é bom pra verem melhor o que foi feito).


for(var i,ra=new Array(),j=0 ; j<10000 ; j++, i = Math.round(59*Math.random())+1)
    ra[i] = (typeof(ra[i])=='undefined') ? ra[i]=i+" "+1  :  ra[i]=i+' '+(parseInt(ra[i].split(' ')[1]) + 1);
document.write(ra.sort(function(a,b){return b.split(' ')[1] - a.split(' ')[1]}).slice(0,6).join(' vez(es)\n<br />'));

Caso não seja aceito da maneira acima, há também uma forma mais extendida que ficaria com 6 linhas (esta já está beeeem mais entendível pra qualquer um, caso queiram explicações é só perguntar).


var ra = new Array();
for(j=0;j<10000;j++){
 i = Math.round(59*Math.random())+1;
 ra[i] = (typeof(ra[i])=='undefined') ? ra[i]=i+" "+1  :  ra[i]=i+' '+(parseInt(ra[i].split(' ')[1]) + 1);
}
document.write(ra.sort(function(a,b){return b.split(' ')[1] - a.split(' ')[1]}).slice(0,6).join(' vez(es)\n<br />'));

Agora é pra todo mundo entender.



var ra = new Array(); //declaro o array
for(j=0;j<10000;j++){ //loop 10000 vezes
 i = Math.round(59*Math.random())+1; //faço o sorteio de 1 até 60 e jogo no 'i'
 //abaixo vou incrementar quem foi o índice do array sorteado
 //devido a deficiências de pegar o indice de um array em javascript
 //vou ter que guardar o índice no primeiro caractere pra splitar depois
 if(typeof(ra[i])=='undefined'){
  ra[i]=i+" "+1; //se ra[i] ainda não existir crio ele

 }else{ //se já existir, incremento ele
  ra[i]=i+' '+(parseInt(ra[i].split(' ')[1]) + 1);
 }
}
//faço a ordenação de acordo com uma função específica
//que pega só o que tem depois do espaço
ra.sort(function(a,b){return b.split(' ')[1] - a.split(' ')[1]})
//dou um slice pra pegar os 6 primeiros e uno eles com o join.
//jogo o resultado na tela
document.write(ra.slice(0,6).join(' vez(es)\n<br />'));

hehe, Engraçado. Viram como um código de 11 linhas pode virar só 2? hehe
Será que alguém consegue fazer com menos linhas aí no javascript? Bora ae, cai pra dentro. heheheahe

PS.: O engraçado é que ontem eu só consegui chegar a 7 linhas. Hoje que vieram umas inspirações heheh.

PS.2.: Este ainda não é o último post do elmicox.blogspot antes de migrar para o elmicox.com. Vocês não precisam mudar seus feeds. Eu vou alterar pelo feedburner.

Leave a Reply