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.
Gostou da dica acima? Então clica nos botões de compartilhamento abaixo e me ajude a dica a subir no Google.