Às vezes preciso decidir algo com um simples yes
ou, no
mas não sei o que fazer. Meu jeito é uma simples chamada de JavaScript:
Array.apply(null, new Array(1000)).map(Number.prototype.valueOf,0).map(function() { return Math.round(Math.random()*100000) % 2; }).reduce(function(carry, i) { if (i) { carry.yes++; } else { carry.no++; } return carry; }, {yes: 0, no: 0});
ok está um pouco sujo, então aqui está:
// Build an array with 1000 zeros
Array.apply(null, new Array(1000))
.map(Number.prototype.valueOf,0)
.map(function() {
// Fill up with zeros and ones
// based on random numbers (odd or even)
return Math.round(Math.random()*100000) % 2;
})
.reduce(
function(carry, i) {
// If one then it's a Yes
// If zero then it's a No
if (i) { carry.yes++; }
else { carry.no++; }
return carry;
},
{yes: 0, no: 0}
);
Agora eu tenho a resposta:
{ "yes": 506, "no": 494 }
Decisão tomada!
Ok, é um simples “Coin Flipper”, então melhore-o para lidar com mais respostas. Em primeiro lugar, transformar-se em uma função com parâmetros “infinitos”. Cada parâmetro será uma resposta, exceto o primeiro. O primeiro será uma série de amostras.
function iNeedAnswers() {
var args = Array.prototype.slice.call(arguments),
answerCount = 0,
answers;
if (args.length < 1) { sampleRate = 1000; }
else if (parseInt(args[0], 10) != args[0]) { sampleRate = 1000; }
else { sampleRate = parseInt(args.shift(), 10); }
if (args.length < 2) {
args = ["Yes", "No"];
}
answers = args.reduce(function(carry, answer) {
carry[answer] = 0;
return carry;
}, {});
answerCount = args.length;
// Build an array with 1000 zeros
return Array.apply(null, new Array(sampleRate))
.map(Number.prototype.valueOf, 0)
.map(function() {
// Fill up with zeros and ones
// based on random numbers (odd or even)
return Math.round(Math.random()*100000) % answerCount;
})
.reduce(
function(carry, i) {
carry[args[i]]++;
return carry;
},
answers
);
}
Como ligar?
console.log(iNeedAnswers());
console.log(iNeedAnswers(500));
console.log(iNeedAnswers(500, "Yes"));
console.log(iNeedAnswers(500, "Yes", "No"));
console.log(iNeedAnswers(500, "Yes", "No", "Maybe"));
console.log(iNeedAnswers("Yes", "No", "Maybe"));
Resultado?
{ "Yes": 515, "No": 485 }
{ "Yes": 252, "No": 248 }
{ "Yes": 240, "No": 260 }
{ "Yes": 242, "No": 258 }
{ "Yes": 155, "No": 170, "Maybe": 175 }
{ "Yes": 332, "No": 333, "Maybe": 335 }
Ok, não precisamos digitar isso sempre que precisarmos decidir algo. Adicione esta linha ao final do arquivo:
console.log(iNeedAnswers.apply(this, process.argv.slice(2)));
E isso no topo do arquivo (será a primeira linha) :
#!/usr/bin/env node
Agora temos um script incrível que podemos usar como qualquer outro programa em nosso sistema.
❯ chmod +x flip.js
❯ mv flip.js /usr/local/bin/myflip
❯ myflip
{ Yes: 468, No: 532 }
❯ myflip 5000 Yes No Maybe
{ Yes: 1679, No: 1640, Maybe: 1681 }
❯ myflip 5000 Yes No Maybe Tomorrow
{ Yes: 1225, No: 1259, Maybe: 1286, Tomorrow: 1230 }
Por isso diz: Não, não faça isso, ou se você realmente não sabe, talvez.
O código-fonte completo está disponível como uma essência: https://gist.github.com/Yitsushi/1ad9fe8638e0a0010906