Skip to content

Instantly share code, notes, and snippets.

@greenlikeorange
Created February 24, 2020 14:25
Show Gist options
  • Save greenlikeorange/82b399e78811606355128d99251d9266 to your computer and use it in GitHub Desktop.
Save greenlikeorange/82b399e78811606355128d99251d9266 to your computer and use it in GitHub Desktop.
JS Bin // source https://jsbin.com/necires
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<title>JS Bin</title>
<style id="jsbin-css">
body {
padding: 25px;
}
textarea {
width: 100%;
height: 300px;
font-size: 14px;
font-family: monospace
}
#resetData {
float: right;
}
</style>
</head>
<body>
<textarea name="data" id="dataTable" cols="30" rows="10"></textarea>
<script src="https://cdn.jsdelivr.net/lodash/4/lodash.min.js"></script>
<table id="dataRefTable"></table>
<button id="addSampleData">Add Sample data</button>
<button id="confirmData">Confirm Data</button>
<button id="resetData">Reset Data</button>
<hr>
<p id="info"></p>
<!-- <label for="prizeCount">Prize Count</label> -->
<!-- <input type="number" min="1" max="10" id="prizeCount"> -->
<button id="start">SELECT RANDOM 100</button>
<textarea disabled="disabled" id="resultTable"></textarea>
<script id="jsbin-javascript">
'use strict';
var _slicedToArray = (function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i['return']) _i['return'](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError('Invalid attempt to destructure non-iterable instance'); } }; })();
(function () {
var stage = {
data: {},
totalTicket: 0,
dataConfrimed: false,
lastResult: {}
};
var elemIds = 'dataTable dataRefTable addSampleData resetData confirmData prizeCount start resultTable'.split(' ');
var elems = elemIds.reduce(function (a, b) {
a[b] = document.getElementById(b);
return a;
}, {});
var fns = {};
fns.addSampleData = function addSampleData() {
if (stage.dataConfrimed) return;
_.range(250).map(function (i) {
return elems.dataTable.value += '#1' + (i + 1 + '').padStart(3, '0') + ', ' + _.random(1, 22) + '\n';
});
};
fns.resetData = function resetData() {
elems.dataTable.disabled = false;
stage.dataConfrimed = false;
stage.data = {};
stage.totalTicket = 0;
stage.lastResult = {};
elems.dataTable.value = '';
elems.resultTable.value = '';
};
function _pend(t, n) {
var p = arguments.length <= 2 || arguments[2] === undefined ? ' ' : arguments[2];
return (t + '').padEnd(n, p);
}
function _mtr(data) {
var head = arguments.length <= 1 || arguments[1] === undefined ? [11, 6, 5, 7] : arguments[1];
return data.map(function (d, i) {
return _pend(d, head[i], ' ');
}).join('| ') + '\n';
}
function writeRefData() {
elems.dataTable.value = '';
elems.dataTable.value += ' | Ticket \n';
elems.dataTable.value += 'Voucher No | Total | Left | Served\n';
elems.dataTable.value += '----------------------------------\n';
var totalLeft = 0;
var totalServed = 0;
Object.keys(stage.data).sort().forEach(function (vn) {
var _stage$data$vn = _slicedToArray(stage.data[vn], 2);
var left = _stage$data$vn[0];
var served = _stage$data$vn[1];
var row = _mtr([vn, left.length + served.length, left.length, served.length]);
totalLeft += left.length;
totalServed += served.length;
elems.dataTable.value += row;
});
elems.dataTable.value += '----------------------------------\n';
elems.dataTable.value += _mtr(['Total ' + Object.keys(stage.data).length, totalLeft + totalServed, totalLeft, totalServed]);
elems.resultTable.value = 'Voucher No | Selected Ticket\n';
Object.keys(stage.lastResult).forEach(function (vn) {
elems.resultTable.value += _mtr([vn, stage.lastResult[vn].length], [11]);
});
}
fns.confirmData = function confirmData() {
if (stage.dataConfrimed) return;
elems.dataTable.value.split('\n').map(function (row) {
return row.trim();
}).filter(function (d) {
return !!d;
}).map(function (row) {
return row.split(',');
}).filter(function (row) {
return row.length;
}).filter(function (_ref) {
var _ref2 = _slicedToArray(_ref, 2);
var vn = _ref2[0];
var tc = _ref2[1];
return !isNaN(+tc);
}).map(function (_ref3) {
var _ref32 = _slicedToArray(_ref3, 2);
var vn = _ref32[0];
var tc = _ref32[1];
var tcn = +tc;
var newTotal = stage.totalTicket + tcn;
stage.data[vn] = [_.range(stage.totalTicket, newTotal), []];
stage.totalTicket = newTotal;
});
stage.dataConfrimed = true;
stage.lastResult = {};
elems.dataTable.disabled = true;
elems.dataTable.value = "";
writeRefData();
};
fns.start = function start() {
if (!stage.dataConfrimed) {
alert('Confirm data first!');
return;
}
if (!Object.keys(stage.data).length) {
alert('Please enter correct data first');
return;
}
if (stage.totalTicket < 100) {
alert('No enough tickets.');
return;
}
var validTickets = _.values(stage.data).reduce(function (a, _ref4) {
var _ref42 = _slicedToArray(_ref4, 1);
var left = _ref42[0];
return a.concat(left);
}, []);
if (validTickets.length < 100) {
return alert('No more ticket left');
}
var r = _.random(0, validTickets.length - 100);
var win = _.shuffle(validTickets).slice(r, r + 100);
stage.lastResult = win.map(function (wt) {
return [Object.keys(stage.data).filter(function (vn) {
return stage.data[vn][0].indexOf(wt) !== -1;
}), wt];
}).reduce(function (a, _ref5) {
var _ref52 = _slicedToArray(_ref5, 2);
var vn = _ref52[0];
var wt = _ref52[1];
if (!a[vn]) {
a[vn] = [wt];
} else {
a[vn].push(wt);
}
return a;
}, {});
Object.keys(stage.lastResult).forEach(function (vn) {
var wts = stage.lastResult[vn];
stage.data[vn][0] = _.pullAll(stage.data[vn][0], wts);
stage.data[vn][1] = stage.data[vn][1].concat(wts);
// stage.data[vn][0].push(wt);
// stage.data[vn][1].push(wt)
});
writeRefData();
};
Object.keys(fns).forEach(function (fname) {
elems[fname].addEventListener('click', fns[fname], false);
});
})();
</script>
<script id="jsbin-source-css" type="text/css">body {
padding: 25px;
}
textarea {
width: 100%;
height: 300px;
font-size: 14px;
font-family: monospace
}
#resetData {
float: right;
}</script>
<script id="jsbin-source-javascript" type="text/javascript">(function () {
const stage = {
data: {},
totalTicket: 0,
dataConfrimed: false,
lastResult: {},
};
const elemIds = 'dataTable dataRefTable addSampleData resetData confirmData prizeCount start resultTable'.split(' ');
const elems = elemIds.reduce((a, b) => {
a[b] = document.getElementById(b);
return a;
}, {});
const fns = {};
fns.addSampleData = function addSampleData() {
if (stage.dataConfrimed) return;
_.range(250).map((i) => {
return elems.dataTable.value += `#1${(i+1+'').padStart(3, '0')}, ${_.random(1,22)}\n`;
});
}
fns.resetData = function resetData() {
elems.dataTable.disabled = false;
stage.dataConfrimed = false;
stage.data = {};
stage.totalTicket = 0;
stage.lastResult = {};
elems.dataTable.value = '';
elems.resultTable.value = '';
}
function _pend(t, n, p = ' ') {
return (t + '').padEnd(n, p);
}
function _mtr(data, head = [11,6,5,7]) {
return data.map((d, i) => _pend(d, head[i], ' ')).join('| ') + '\n';
}
function writeRefData() {
elems.dataTable.value = '';
elems.dataTable.value += ' | Ticket \n'
elems.dataTable.value += 'Voucher No | Total | Left | Served\n';
elems.dataTable.value += '----------------------------------\n';
let totalLeft = 0;
let totalServed = 0;
Object.keys(stage.data).sort().forEach((vn) => {
const [left, served] = stage.data[vn];
const row = _mtr([
vn,
left.length + served.length,
left.length,
served.length
])
totalLeft += left.length;
totalServed += served.length;
elems.dataTable.value += row;
});
elems.dataTable.value += '----------------------------------\n';
elems.dataTable.value += _mtr([
`Total ${Object.keys(stage.data).length}`,
totalLeft + totalServed,
totalLeft,
totalServed,
]);
elems.resultTable.value = 'Voucher No | Selected Ticket\n'
Object.keys(stage.lastResult).forEach((vn) => {
elems.resultTable.value += _mtr([vn, stage.lastResult[vn].length], [11])
})
}
fns.confirmData = function confirmData() {
if (stage.dataConfrimed) return;
elems.dataTable.value.split('\n')
.map(row => row.trim())
.filter(d => !!d)
.map((row) => row.split(','))
.filter((row) => row.length)
.filter(([vn, tc]) => !isNaN(+tc))
.map(([vn, tc]) => {
const tcn = +tc;
const newTotal = stage.totalTicket + tcn;
stage.data[vn] = [
_.range(stage.totalTicket, newTotal), []
]
stage.totalTicket = newTotal;
})
stage.dataConfrimed = true;
stage.lastResult = {};
elems.dataTable.disabled = true;
elems.dataTable.value = "";
writeRefData()
}
fns.start = function start() {
if (!stage.dataConfrimed) {
alert('Confirm data first!');
return;
}
if (!Object.keys(stage.data).length) {
alert('Please enter correct data first');
return;
}
if (stage.totalTicket < 100) {
alert('No enough tickets.');
return;
}
const validTickets = _.values(stage.data)
.reduce((a, [left]) => a.concat(left), []);
if (validTickets.length < 100) {
return alert('No more ticket left');
}
const r = _.random(0, validTickets.length -100);
const win = _.shuffle(validTickets).slice(
r,
r+100,
);
stage.lastResult = win.map((wt) => {
return [Object.keys(stage.data).filter((vn) => {
return stage.data[vn][0].indexOf(wt) !== -1;
}), wt];
}).reduce((a, [vn, wt]) => {
if (!a[vn]) {
a[vn] = [wt]
} else {
a[vn].push(wt);
}
return a;
}, {});
Object.keys(stage.lastResult).forEach((vn) => {
const wts = stage.lastResult[vn];
stage.data[vn][0] = _.pullAll(stage.data[vn][0], wts);
stage.data[vn][1] = stage.data[vn][1].concat(wts);
// stage.data[vn][0].push(wt);
// stage.data[vn][1].push(wt)
})
writeRefData();
}
Object.keys(fns).forEach((fname) => {
elems[fname].addEventListener('click', fns[fname], false);
});
}());</script></body>
</html>
body {
padding: 25px;
}
textarea {
width: 100%;
height: 300px;
font-size: 14px;
font-family: monospace
}
#resetData {
float: right;
}
'use strict';
var _slicedToArray = (function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i['return']) _i['return'](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError('Invalid attempt to destructure non-iterable instance'); } }; })();
(function () {
var stage = {
data: {},
totalTicket: 0,
dataConfrimed: false,
lastResult: {}
};
var elemIds = 'dataTable dataRefTable addSampleData resetData confirmData prizeCount start resultTable'.split(' ');
var elems = elemIds.reduce(function (a, b) {
a[b] = document.getElementById(b);
return a;
}, {});
var fns = {};
fns.addSampleData = function addSampleData() {
if (stage.dataConfrimed) return;
_.range(250).map(function (i) {
return elems.dataTable.value += '#1' + (i + 1 + '').padStart(3, '0') + ', ' + _.random(1, 22) + '\n';
});
};
fns.resetData = function resetData() {
elems.dataTable.disabled = false;
stage.dataConfrimed = false;
stage.data = {};
stage.totalTicket = 0;
stage.lastResult = {};
elems.dataTable.value = '';
elems.resultTable.value = '';
};
function _pend(t, n) {
var p = arguments.length <= 2 || arguments[2] === undefined ? ' ' : arguments[2];
return (t + '').padEnd(n, p);
}
function _mtr(data) {
var head = arguments.length <= 1 || arguments[1] === undefined ? [11, 6, 5, 7] : arguments[1];
return data.map(function (d, i) {
return _pend(d, head[i], ' ');
}).join('| ') + '\n';
}
function writeRefData() {
elems.dataTable.value = '';
elems.dataTable.value += ' | Ticket \n';
elems.dataTable.value += 'Voucher No | Total | Left | Served\n';
elems.dataTable.value += '----------------------------------\n';
var totalLeft = 0;
var totalServed = 0;
Object.keys(stage.data).sort().forEach(function (vn) {
var _stage$data$vn = _slicedToArray(stage.data[vn], 2);
var left = _stage$data$vn[0];
var served = _stage$data$vn[1];
var row = _mtr([vn, left.length + served.length, left.length, served.length]);
totalLeft += left.length;
totalServed += served.length;
elems.dataTable.value += row;
});
elems.dataTable.value += '----------------------------------\n';
elems.dataTable.value += _mtr(['Total ' + Object.keys(stage.data).length, totalLeft + totalServed, totalLeft, totalServed]);
elems.resultTable.value = 'Voucher No | Selected Ticket\n';
Object.keys(stage.lastResult).forEach(function (vn) {
elems.resultTable.value += _mtr([vn, stage.lastResult[vn].length], [11]);
});
}
fns.confirmData = function confirmData() {
if (stage.dataConfrimed) return;
elems.dataTable.value.split('\n').map(function (row) {
return row.trim();
}).filter(function (d) {
return !!d;
}).map(function (row) {
return row.split(',');
}).filter(function (row) {
return row.length;
}).filter(function (_ref) {
var _ref2 = _slicedToArray(_ref, 2);
var vn = _ref2[0];
var tc = _ref2[1];
return !isNaN(+tc);
}).map(function (_ref3) {
var _ref32 = _slicedToArray(_ref3, 2);
var vn = _ref32[0];
var tc = _ref32[1];
var tcn = +tc;
var newTotal = stage.totalTicket + tcn;
stage.data[vn] = [_.range(stage.totalTicket, newTotal), []];
stage.totalTicket = newTotal;
});
stage.dataConfrimed = true;
stage.lastResult = {};
elems.dataTable.disabled = true;
elems.dataTable.value = "";
writeRefData();
};
fns.start = function start() {
if (!stage.dataConfrimed) {
alert('Confirm data first!');
return;
}
if (!Object.keys(stage.data).length) {
alert('Please enter correct data first');
return;
}
if (stage.totalTicket < 100) {
alert('No enough tickets.');
return;
}
var validTickets = _.values(stage.data).reduce(function (a, _ref4) {
var _ref42 = _slicedToArray(_ref4, 1);
var left = _ref42[0];
return a.concat(left);
}, []);
if (validTickets.length < 100) {
return alert('No more ticket left');
}
var r = _.random(0, validTickets.length - 100);
var win = _.shuffle(validTickets).slice(r, r + 100);
stage.lastResult = win.map(function (wt) {
return [Object.keys(stage.data).filter(function (vn) {
return stage.data[vn][0].indexOf(wt) !== -1;
}), wt];
}).reduce(function (a, _ref5) {
var _ref52 = _slicedToArray(_ref5, 2);
var vn = _ref52[0];
var wt = _ref52[1];
if (!a[vn]) {
a[vn] = [wt];
} else {
a[vn].push(wt);
}
return a;
}, {});
Object.keys(stage.lastResult).forEach(function (vn) {
var wts = stage.lastResult[vn];
stage.data[vn][0] = _.pullAll(stage.data[vn][0], wts);
stage.data[vn][1] = stage.data[vn][1].concat(wts);
// stage.data[vn][0].push(wt);
// stage.data[vn][1].push(wt)
});
writeRefData();
};
Object.keys(fns).forEach(function (fname) {
elems[fname].addEventListener('click', fns[fname], false);
});
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment