Skip to content

Instantly share code, notes, and snippets.

@amih
Created April 9, 2020 10:06
Show Gist options
  • Save amih/a096506f3f2f4668bc60097e35f70b77 to your computer and use it in GitHub Desktop.
Save amih/a096506f3f2f4668bc60097e35f70b77 to your computer and use it in GitHub Desktop.
JS Bin // source https://jsbin.com/sagigac
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<title>JS Bin</title>
<script src="https://unpkg.com/gaussian@1.1.0/lib/gaussian.js"></script>
<script src="https://bossanova.uk/jexcel/v3/jexcel.js"></script>
<script src="https://bossanova.uk/jsuites/v2/jsuites.js"></script>
<link rel="stylesheet" href="https://bossanova.uk/jexcel/v3/jexcel.css" type="text/css" />
<link rel="stylesheet" href="https://bossanova.uk/jsuites/v2/jsuites.css" type="text/css" />
<style id="jsbin-css">
#summary, #detailsX {
height: 300px;
border: 1px solid blue;
border-radius: 6px;
}
</style>
</head>
<body>
<div>Summary</div>
<div id="summary"></div>
<div>Details</div>
<div id="details"></div>
<script id="jsbin-javascript">
//jshint esnext:true
const gaussian = window.gaussian; // require('gaussian');
const N45 = (mean, sd=45) => gaussian(mean, sd*sd).ppf(Math.random());
const U = (min, max) => Math.floor(Math.random()*(max - min + 1) + min)
const removeSmallest = (arr) => {
arr.sort((a, b) => Math.sign(a.bet - b.bet));
const numOfLosers = arr.reduce((acc, cur) => (cur.bet == arr[0].bet) ? acc+1 : acc, 0);
arr.splice(U(1, numOfLosers), 1); // remove one of the losers
return arr;
}
const log = (where, ...params) => {
for(p of params){ document.getElementById(where).innerHTML += p + ' '; }
document.getElementById(where).innerHTML += '<br>';
}
// for(let i=0; i<10; i++) log('summary', N45(45, 3));
// for(let i=0; i<10; i++) log('details', U(0, 150));
var data1 = [
[ 2, 10, 1.10, '=B1*C1'],
];
var table1 = jexcel(document.getElementById('summary'), {
data:data1,
columns: [
{ title: 'Round', type: 'text', width:'100px', },
{ title: 'X1', type: 'number', width:'30px', },
{ title: 'X2', type: 'number', width:'30px', },
{ title: 'Total', type: 'number', width:'100px', },
],
rowResize: true,
});
const getPlayers = () => {
return [
{
strategy: 'simple,max(x1,x2)',
func: (X1, X2, T) => {
if(X1>X2){
return 'S';
} else {
return 'R';
}
}
},
{
strategy: 'crazy,min(x1,x2)1',
func: (X1, X2, T) => {
if(X1<X2){
return 'S';
} else {
return 'R';
}
}
},
{
strategy: 'crazy,min(x1,x2)2',
func: (X1, X2, T) => {
if(X1<X2){
return 'S';
} else {
return 'R';
}
}
},
{
strategy: 'crazy,min(x1,x2)3',
func: (X1, X2, T) => {
if(X1<X2){
return 'S';
} else {
return 'R';
}
}
},
{
strategy: 'crazy,min(x1,x2)4',
func: (X1, X2, T) => {
if(X1<X2){
return 'S';
} else {
return 'R';
}
}
},
{
strategy: 'crazy,min(x1,x2)5',
func: (X1, X2, T) => {
if(X1<X2){
return 'S';
} else {
return 'R';
}
}
},
{
strategy: 'crazy,min(x1,x2)6',
func: (X1, X2, T) => {
if(X1<X2){
return 'S';
} else {
return 'R';
}
}
},
{
strategy: 'alwaysSafe1',
func: (X1, X2, T) => {
return 'S';
}
},
{
strategy: 'alwaysSafe2',
func: (X1, X2, T) => {
return 'S';
}
},
{
strategy: 'alwaysSafe3',
func: (X1, X2, T) => {
return 'S';
}
},
{
strategy: 'alwaysSafe4',
func: (X1, X2, T) => {
return 'S';
}
},
{
strategy: 'alwaysSafe5',
func: (X1, X2, T) => {
return 'S';
}
},
{
strategy: 'alwaysRisk',
func: (X1, X2, T) => {
return 'R';
}
},
];
}
for(let round = 0; round<10000; round++){
log('details', 'ROUND', round);
let player = getPlayers();
while(player.length>1){
let X1 = U(0,150);
let X2 = U(0,150);
// log('details', 'X1', X1, ', X2', X2);
for(i=0; i<player.length; i++){
let decision = player[i].func(X1, X2, player.length);
if(decision == 'S'){
player[i].bet = X1;
log('details', 'Player ', player[i].strategy, ', decision:', decision, ', X1', X1, ', bet', player[i].bet);
}else{
player[i].bet = Math.round(N45(X2));
log('details', 'Player ', player[i].strategy, ', decision:', decision, ', X2', X2, ', bet', player[i].bet);
}
}
// find loser and remove him
player = removeSmallest(player);
if(player.length==1){
log('details', 'Winner is: ', player[0].strategy);
}
}
}
</script>
<script id="jsbin-source-css" type="text/css">#summary, #detailsX {
height: 300px;
border: 1px solid blue;
border-radius: 6px;
}</script>
<script id="jsbin-source-javascript" type="text/javascript">//jshint esnext:true
const gaussian = window.gaussian; // require('gaussian');
const N45 = (mean, sd=45) => gaussian(mean, sd*sd).ppf(Math.random());
const U = (min, max) => Math.floor(Math.random()*(max - min + 1) + min)
const removeSmallest = (arr) => {
arr.sort((a, b) => Math.sign(a.bet - b.bet));
const numOfLosers = arr.reduce((acc, cur) => (cur.bet == arr[0].bet) ? acc+1 : acc, 0);
arr.splice(U(1, numOfLosers), 1); // remove one of the losers
return arr;
}
const log = (where, ...params) => {
for(p of params){ document.getElementById(where).innerHTML += p + ' '; }
document.getElementById(where).innerHTML += '<br>';
}
// for(let i=0; i<10; i++) log('summary', N45(45, 3));
// for(let i=0; i<10; i++) log('details', U(0, 150));
var data1 = [
[ 2, 10, 1.10, '=B1*C1'],
];
var table1 = jexcel(document.getElementById('summary'), {
data:data1,
columns: [
{ title: 'Round', type: 'text', width:'100px', },
{ title: 'X1', type: 'number', width:'30px', },
{ title: 'X2', type: 'number', width:'30px', },
{ title: 'Total', type: 'number', width:'100px', },
],
rowResize: true,
});
const getPlayers = () => {
return [
{
strategy: 'simple,max(x1,x2)',
func: (X1, X2, T) => {
if(X1>X2){
return 'S';
} else {
return 'R';
}
}
},
{
strategy: 'crazy,min(x1,x2)1',
func: (X1, X2, T) => {
if(X1<X2){
return 'S';
} else {
return 'R';
}
}
},
{
strategy: 'crazy,min(x1,x2)2',
func: (X1, X2, T) => {
if(X1<X2){
return 'S';
} else {
return 'R';
}
}
},
{
strategy: 'crazy,min(x1,x2)3',
func: (X1, X2, T) => {
if(X1<X2){
return 'S';
} else {
return 'R';
}
}
},
{
strategy: 'crazy,min(x1,x2)4',
func: (X1, X2, T) => {
if(X1<X2){
return 'S';
} else {
return 'R';
}
}
},
{
strategy: 'crazy,min(x1,x2)5',
func: (X1, X2, T) => {
if(X1<X2){
return 'S';
} else {
return 'R';
}
}
},
{
strategy: 'crazy,min(x1,x2)6',
func: (X1, X2, T) => {
if(X1<X2){
return 'S';
} else {
return 'R';
}
}
},
{
strategy: 'alwaysSafe1',
func: (X1, X2, T) => {
return 'S';
}
},
{
strategy: 'alwaysSafe2',
func: (X1, X2, T) => {
return 'S';
}
},
{
strategy: 'alwaysSafe3',
func: (X1, X2, T) => {
return 'S';
}
},
{
strategy: 'alwaysSafe4',
func: (X1, X2, T) => {
return 'S';
}
},
{
strategy: 'alwaysSafe5',
func: (X1, X2, T) => {
return 'S';
}
},
{
strategy: 'alwaysRisk',
func: (X1, X2, T) => {
return 'R';
}
},
];
}
for(let round = 0; round<10000; round++){
log('details', 'ROUND', round);
let player = getPlayers();
while(player.length>1){
let X1 = U(0,150);
let X2 = U(0,150);
// log('details', 'X1', X1, ', X2', X2);
for(i=0; i<player.length; i++){
let decision = player[i].func(X1, X2, player.length);
if(decision == 'S'){
player[i].bet = X1;
log('details', 'Player ', player[i].strategy, ', decision:', decision, ', X1', X1, ', bet', player[i].bet);
}else{
player[i].bet = Math.round(N45(X2));
log('details', 'Player ', player[i].strategy, ', decision:', decision, ', X2', X2, ', bet', player[i].bet);
}
}
// find loser and remove him
player = removeSmallest(player);
if(player.length==1){
log('details', 'Winner is: ', player[0].strategy);
}
}
}
</script></body>
</html>
#summary, #detailsX {
height: 300px;
border: 1px solid blue;
border-radius: 6px;
}
//jshint esnext:true
const gaussian = window.gaussian; // require('gaussian');
const N45 = (mean, sd=45) => gaussian(mean, sd*sd).ppf(Math.random());
const U = (min, max) => Math.floor(Math.random()*(max - min + 1) + min)
const removeSmallest = (arr) => {
arr.sort((a, b) => Math.sign(a.bet - b.bet));
const numOfLosers = arr.reduce((acc, cur) => (cur.bet == arr[0].bet) ? acc+1 : acc, 0);
arr.splice(U(1, numOfLosers), 1); // remove one of the losers
return arr;
}
const log = (where, ...params) => {
for(p of params){ document.getElementById(where).innerHTML += p + ' '; }
document.getElementById(where).innerHTML += '<br>';
}
// for(let i=0; i<10; i++) log('summary', N45(45, 3));
// for(let i=0; i<10; i++) log('details', U(0, 150));
var data1 = [
[ 2, 10, 1.10, '=B1*C1'],
];
var table1 = jexcel(document.getElementById('summary'), {
data:data1,
columns: [
{ title: 'Round', type: 'text', width:'100px', },
{ title: 'X1', type: 'number', width:'30px', },
{ title: 'X2', type: 'number', width:'30px', },
{ title: 'Total', type: 'number', width:'100px', },
],
rowResize: true,
});
const getPlayers = () => {
return [
{
strategy: 'simple,max(x1,x2)',
func: (X1, X2, T) => {
if(X1>X2){
return 'S';
} else {
return 'R';
}
}
},
{
strategy: 'crazy,min(x1,x2)1',
func: (X1, X2, T) => {
if(X1<X2){
return 'S';
} else {
return 'R';
}
}
},
{
strategy: 'crazy,min(x1,x2)2',
func: (X1, X2, T) => {
if(X1<X2){
return 'S';
} else {
return 'R';
}
}
},
{
strategy: 'crazy,min(x1,x2)3',
func: (X1, X2, T) => {
if(X1<X2){
return 'S';
} else {
return 'R';
}
}
},
{
strategy: 'crazy,min(x1,x2)4',
func: (X1, X2, T) => {
if(X1<X2){
return 'S';
} else {
return 'R';
}
}
},
{
strategy: 'crazy,min(x1,x2)5',
func: (X1, X2, T) => {
if(X1<X2){
return 'S';
} else {
return 'R';
}
}
},
{
strategy: 'crazy,min(x1,x2)6',
func: (X1, X2, T) => {
if(X1<X2){
return 'S';
} else {
return 'R';
}
}
},
{
strategy: 'alwaysSafe1',
func: (X1, X2, T) => {
return 'S';
}
},
{
strategy: 'alwaysSafe2',
func: (X1, X2, T) => {
return 'S';
}
},
{
strategy: 'alwaysSafe3',
func: (X1, X2, T) => {
return 'S';
}
},
{
strategy: 'alwaysSafe4',
func: (X1, X2, T) => {
return 'S';
}
},
{
strategy: 'alwaysSafe5',
func: (X1, X2, T) => {
return 'S';
}
},
{
strategy: 'alwaysRisk',
func: (X1, X2, T) => {
return 'R';
}
},
];
}
for(let round = 0; round<10000; round++){
log('details', 'ROUND', round);
let player = getPlayers();
while(player.length>1){
let X1 = U(0,150);
let X2 = U(0,150);
// log('details', 'X1', X1, ', X2', X2);
for(i=0; i<player.length; i++){
let decision = player[i].func(X1, X2, player.length);
if(decision == 'S'){
player[i].bet = X1;
log('details', 'Player ', player[i].strategy, ', decision:', decision, ', X1', X1, ', bet', player[i].bet);
}else{
player[i].bet = Math.round(N45(X2));
log('details', 'Player ', player[i].strategy, ', decision:', decision, ', X2', X2, ', bet', player[i].bet);
}
}
// find loser and remove him
player = removeSmallest(player);
if(player.length==1){
log('details', 'Winner is: ', player[0].strategy);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment