woo new tidy version

This commit is contained in:
Martin Donnelly 2017-09-08 10:45:53 +01:00
parent c816f8c4c8
commit 5f73c46b74
11 changed files with 1104 additions and 416 deletions

53
.eslintrc.json Normal file
View File

@ -0,0 +1,53 @@
{
"parserOptions": {
"ecmaVersion": 6,
"sourceType": "module",
"ecmaFeatures": {
"jsx": false
}
},
"env": {
"browser": true,
"node": true,
"es6": true
},
"rules": {
"arrow-spacing": "error",
"block-scoped-var": "error",
"block-spacing": "error",
"brace-style": ["error", "stroustrup", {}],
"camelcase": "error",
"comma-dangle": ["error", "never"],
"comma-spacing": ["error", { "before": false, "after": true }],
"comma-style": [1, "last"],
"consistent-this": [1, "_this"],
"curly": [1, "multi"],
"eol-last": 1,
"eqeqeq": 1,
"func-names": 1,
"indent": ["error", 2, { "SwitchCase": 1 }],
"lines-around-comment": ["error", { "beforeBlockComment": true, "allowArrayStart": true }],
"max-len": [1, 120, 2], // 2 spaces per tab, max 80 chars per line
"new-cap": 1,
"newline-before-return": "error",
"no-array-constructor": 1,
"no-inner-declarations": [1, "both"],
"no-mixed-spaces-and-tabs": 1,
"no-multi-spaces": 2,
"no-new-object": 1,
"no-shadow-restricted-names": 1,
"object-curly-spacing": ["error", "always"],
"padded-blocks": ["error", { "blocks": "never", "switches": "always" }],
"prefer-const": "error",
"prefer-template": "error",
"one-var": 0,
"quote-props": ["error", "always"],
"quotes": [1, "single"],
"radix": 1,
"semi": [1, "always"],
"space-before-blocks": [1, "always"],
"space-infix-ops": 1,
"vars-on-top": 1
}
}

33
app.js Normal file
View File

@ -0,0 +1,33 @@
const loader = require('./libs/loader');
const lot = require('./libs/lot');
const lotv2 = require('./libs/lotV2');
const pusher = require('./libs/pusher');
function run(data) {
const v1 = lot.calculate(data);
const v2 = lotv2.calculate(data);
const msg =
`V2: ${v2} stars: ${v1.mainstars}
V1: ${v1.mainline} stars: ${v1.mainstars}
Other: ${v1.otherLine} stars: ${v1.otherStars}
`;
pusher.push(msg);
console.log(msg);
loader.save(data);
}
function go() {
loader.load(run);
}
cron.schedule('10 13 * * 2,5', function() {
go();
// console.log('tick');
return -1;
});

File diff suppressed because one or more lines are too long

84
libs/loader.js Normal file
View File

@ -0,0 +1,84 @@
const jsonfile = require('jsonfile');
const https = require('https');
const Sugar = require('sugar-date');
const file = 'data/data.json';
function resultsQuery(callback) {
const options = {
'host': 'euromillions.p.mashape.com',
'path': '/ResultsService/FindLast',
'headers': {
'accept': 'text/plain',
'X-Mashape-Key': '5A0H980jK6mshSFL24ZmfiRrNHV2p1d1fhQjsngtx8QWuO9oe4'
},
'method': 'GET'
};
https.request(options).on('response', function (response) {
let data = '';
response.on('data', function (chunk) {
data += chunk;
});
response.on('end', function () {
//console.log(data);
callback(JSON.parse(data));
});
}).end();
}
function processDataV2(data) {
const newArray = [];
const date = /(\/Date\()([0-9]+)([\s\S]+)/.exec(data.Date);
// console.log(data);
//date = /(\/Date\()([0-9]+)([\s\S]+)/.exec(data.Date);
const newdate = Sugar.Date.format(new Date(parseInt(date[2])), '%Y-%m-%d');
newArray.push(newdate);
newArray.push(data.Num1);
newArray.push(data.Num2);
newArray.push(data.Num3);
newArray.push(data.Num4);
newArray.push(data.Num5);
newArray.push(data.Star1);
newArray.push(data.Star2);
return newArray;
}
function load(cb) {
jsonfile.readFile(file, (err, obj) => {
if (err) console.error(err);
const lotData = obj;
resultsQuery( (a) => {
const latest = processDataV2(a);
const dateExists = lotData.filter((item) => {
if (item[0] === latest[0]) return item;
});
if (dateExists.length === 0)
lotData.unshift(latest);
// return the data
cb(lotData);
});
});
}
function save(data) {
jsonfile.writeFileSync(file, data);
}
module.exports.load = load;
module.exports.save = save;

294
libs/lot.js Normal file
View File

@ -0,0 +1,294 @@
#!/usr/bin/env node
const m = [],
prev = [],
mo = [],
star = [],
trip = [],
results = [];
const line = [];
let re = [];
const resultsObj = {};
function sortNumber(a, b) {
return a - b;
}
function dynamicSort(property) {
let sortOrder = 1;
if (property[0] === '-') {
sortOrder = -1;
property = property.substr(1);
}
return function (a, b) {
const result = (a[property] < b[property]) ? -1 : (a[property] > b[property]) ? 1 : 0;
return result * sortOrder;
};
}
function buildArray() {
for (let x = 0; x < 51; x++) {
const l = [];
for (let y = 0; y < 51; y++)
l.push(0);
m[x] = l;
}
}
function othercalc() {
let i = 0;
// var p = 1 / ((-1)*re.length);
const p = 1.0 / (re.length);
// console.log('P', p);
for (i = 0; i < re.length - 1; i++)
// console.log((p * i));
// console.log(re[i]);
for (let s = 1; s < 6; s++) {
const cv = re[i][s];
// console.log("row: " + cv);
for (let n = 1; n < 6; n++)
if (n !== s) {
workVal = re[i][n];
// console.log(workVal);
// m[cv-1][workVal-1]++;
let flag = false;
for (var t = 0; t < mo.length; t++)
if (mo[t].a === cv && mo[t].b === workVal) {
if (typeof mo[t].c === 'undefined' || mo[t].c === null)
mo[t].c = 0;
mo[t].c++;
flag = true;
// mo[t].v++;
/*
if (i < (re.length/2))
mo[t].v = mo[t].v - (p * i)
else
*/
// original weighting
//mo[t].v = mo[t].v + (p * i);
//reverse weighting..
mo[t].v = mo[t].v + (1 - (p * i));
// console.log(mo[t], 1 - (p * i));
//;
//mo[t].v = mo[t].v + 1;
// ;
}
if (!flag)
mo.push({
'a': cv,
'b': workVal,
'v': 1
});
}
}
console.log('******************************************');
mo.sort(dynamicSort('v'));
//for (var t = (mo.length - 20); t < mo.length; t++) {
var t = mo.length - 1;
while (line.length < 5) {
if (line.indexOf(mo[t].a) == -1 && line.length < 5)
line.push(mo[t].a);
if (line.indexOf(mo[t].b) == -1 && line.length < 5)
line.push(mo[t].b);
t = t - 1;
}
// console.log(line);
console.log(line.sort());
resultsObj.mainline = line.sort();
resultsObj.otherLine = [];
resultsObj.otherLine.push(mo[mo.length - 1].a);
resultsObj.otherLine.push(mo[mo.length - 1].b);
for (var t = mo.length - 1; t > (mo.length - 3); t--)
// if (mo[t].v >= 3) {
if (mo[t].v > 1)
console.log(`${mo[t].a }, ${ mo[t].b }, ${ mo[t].v}`);
// buildTable();
}
function tripCalc() {
const blist = [[0, 1, 2], [0, 1, 3], [0, 1, 4], [0, 2, 3], [0, 2, 4], [0, 3, 4], [1, 2, 3], [1, 2, 4], [1, 3, 4], [2, 3, 4]];
const p = 1.0 / (re.length);
let a, b, c, cur;
//var trip = [];
//console.log
for (i = 0; i < re.length - 1; i++)
for (let t = 0; t < blist.length; t++) {
cur = blist[t];
a = re[i][cur[0] + 1];
b = re[i][cur[1] + 1];
c = re[i][cur[2] + 1];
// console.log(a + ", " + b + "," + c);
let found = false;
for (y = 0; y < trip.length; y++) {
const nums = trip[y].nums;
if (!found)
if ((nums.indexOf(a) !== -1) && (nums.indexOf(b) !== -1) && (nums.indexOf(c) !== -1)) {
/* console.log("nums:" + nums);
console.log("want: " + a + ", " + b + "," + c);
console.log("A:" + nums.indexOf(a));
console.log("B:" + nums.indexOf(b));
console.log("C:" + nums.indexOf(c));
*/
trip[y].cnt = trip[y].cnt + (p * i);
// trip[y].cnt = trip[y].cnt + 1;
// console.log(">>>" + trip[y].cnt);
found = true;
}
}
if (!found)
//trip.push({nums:[a,b,c],cnt:(p * i)});
trip.push({
'nums': [a, b, c],
'cnt': 1
});
}
let max = 0;
for (y = 0; y < trip.length; y++)
if (trip[y].cnt > max) max = trip[y].cnt;
//console.log(`Max: ${ max}`);
for (y = 0; y < trip.length; y++)
if (trip[y].cnt === max) {
// console.log(`${trip[y].cnt }, ${ trip[y].nums}`);
resultsObj.otherLine = resultsObj.otherLine.concat(trip[y].nums).sort();
}
// console.log(JSON.stringify(trip));
}
function starcalc() {
let i = 0;
const p = 1 / re.length;
for (i = 0; i < re.length - 1; i++)
// console.log(re[i]);
for (let s = 6; s < 8; s++) {
const cv = re[i][s];
// console.log("row: " + cv);
for (let n = 6; n < 8; n++)
if (n !== s) {
workVal = re[i][n];
// console.log(workVal);
// m[cv-1][workVal-1]++;
let flag = false;
for (var t = 0; t < mo.length; t++)
if (mo[t].a === cv && mo[t].b === workVal) {
flag = true;
mo[t].v++;
mo[t].v = mo[t].v + (p * i);
}
if (!flag)
mo.push({
'a': cv,
'b': workVal,
'v': 1
});
}
}
// console.log('******************************************');
mo.sort(dynamicSort('v'));
var t = mo.length - 1;
const starOutput = [];
starOutput.push(mo[t].a);
starOutput.push(mo[t].b);
resultsObj.mainstars = [];
resultsObj.mainstars.push(starOutput.sort()[0]);
resultsObj.mainstars.push(starOutput.sort()[1]);
resultsObj.otherStars = [];
resultsObj.otherStars.push(mo[mo.length - 3].a);
resultsObj.otherStars.push(mo[mo.length - 3].b);
//console.log('Stars: ' + mo[t].a + ', ' + mo[t].b);
/* console.log(`Stars: ${ starOutput.sort()[0] }, ${ starOutput.sort()[1]}`);
for (var t = mo.length - 6; t < mo.length; t++)
if (mo[t].v >= 3)
console.log(`${mo[t].a }, ${ mo[t].b }, ${ mo[t].v}`);
*/
// buildTable();
}
function performCalcs() {
buildArray();
//buildTable();
othercalc();
console.log('---------------------------------------');
starcalc();
tripCalc();
}
function prepareResults() {
resultsObj.mainline = resultsObj.mainline.sort(sortNumber);
resultsObj.otherLine = resultsObj.otherLine.sort(sortNumber);
resultsObj.mainstars = resultsObj.mainstars.sort(sortNumber);
resultsObj.otherStars = resultsObj.otherStars.sort(sortNumber);
return resultsObj;
}
function calculate(data) {
re = data;
performCalcs();
prepareResults();
console.log(resultsObj);
return resultsObj;
}
module.exports.calculate = calculate;

114
libs/lotV2.js Normal file
View File

@ -0,0 +1,114 @@
const m = [];
const newNumberContainer = {};
let numberStore = [];
function buildArray() {
for (let x = 0; x < 51; x++) {
const l = [];
for (let y = 0; y < 51; y++)
l.push(0);
m[x] = l;
}
}
function othercalcV2() {
// Var p = 1 / ((-1)*numberStore.length);
const p = 1.0 / (numberStore.length);
for (let i = 0; i < numberStore.length - 1; i++) {
const thisRow = [];
for (let s = 1; s < 6; s++) {
const cv = numberStore[i][s];
for (let n = 1; n < 6; n++)
if (n !== s) {
const workVal = numberStore[i][n];
// Console.log(workVal);
// m[cv-1][workVal-1]++;
// Console.log('mo', mo);
const tempArray = [cv, workVal].sort((a, b) => {
if (a < b)
return -1;
return a > b ? 1 : 0;
});
const id = tempArray.join('-');
if (thisRow.indexOf(id) === -1) {
const record = newNumberContainer[id] || { 'c': 0, 'v': 0, 'id': id };
record.c++;
record.v += (p * i);
newNumberContainer[id] = record;
thisRow.push(id);
}
}
}
}
let flatArray = Object.keys(newNumberContainer).map((key) => newNumberContainer[key]);
flatArray = flatArray.sort((a, b) => {
if (a.c < b.c)
return 1;
return a.c > b.c ? -1 : 0;
});
let line = [];
let lineI = 0;
while (line.length < 5) {
const pair = flatArray[lineI];
pairS = pair.id.split('-');
if (line.indexOf(pairS[0]) === -1 && line.length < 5)
line.push(pairS[0]);
if (line.indexOf(pairS[1]) === -1 && line.length < 5)
line.push(pairS[1]);
// console.log(line);
lineI++;
}
line = line.sort((a, b) => {
if (~~a < ~~b)
return -1;
return ~~a > ~~b ? 1 : 0;
});
//console.log(line);
return line;
}
function performCalcs() {
buildArray();
//BuildTable();
const line = othercalcV2();
console.log('---------------------------------------');
console.log(`line: ${line}`);
// Starcalc();
// tripCalc();
return line;
}
function calculate(data) {
numberStore = data;
return performCalcs();
}
module.exports.calculate = calculate;

26
libs/pusher.js Normal file
View File

@ -0,0 +1,26 @@
/**
*
* User: Martin Donnelly
* Date: 2016-04-08
* Time: 16:35
*
*/
var Pushover = require('node-pushover'), dateFormat = require('dateformat');
var push = new Pushover({
'token': 'aqnos2j4v4pjpry3hvnxq9646eup23',
'user': 'BE2vgFxdHJw91lVGMRYvZDDmVa5cCM'
});
var logger = require('log4js').getLogger();
const prefix = process.env.NODE_ENV === 'production' ? 'Production' : 'Dev';
const title = `mdLot ${ prefix } Alert`;
module.exports = {
'push' : function(contents) {
var now = new Date();
var msg = `Updated at ${ dateFormat(now, 'dddd, mmmm dS, yyyy, HH:MM:ss') }\n\n${ contents }`;
push.send(title, msg);
}
};

781
lot.js
View File

@ -1,44 +1,42 @@
#!/usr/bin/env node #!/usr/bin/env node
var jsonfile = require('jsonfile'), const jsonfile = require('jsonfile'),
https = require('https'), https = require('https'),
UltraSES = require('ultrases'),cron = require('node-cron'); UltraSES = require('ultrases'), cron = require('node-cron');
var Sugar = require('sugar-date'); const Sugar = require('sugar-date');
var file = 'data/data.json'; const file = 'data/data.json';
var m = [], const m = [],
prev = [], prev = [],
mo = [], mo = [],
star = [], star = [],
trip = [], trip = [],
results = [], results = [];
line = []; let line = [];
var re = []; let re = [];
var resultsObj = {}; let resultsObj = {};
const mailer = new UltraSES({
var mailer = new UltraSES({ 'aws': {
aws: { 'accessKeyId': 'AKIAJWJS75F7WNCGK64A',
accessKeyId: 'AKIAJWJS75F7WNCGK64A', 'secretAccessKey': '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',
secretAccessKey: '8irYxThCp4xxyrbr00HzWcODe2qdNrR7X7S5BKup', 'region': 'eu-west-1'
"region": "eu-west-1" },
}, 'defaults': {
defaults: { 'from': 'Martin Donnelly <martind2000@gmail.com>'
from: 'Martin Donnelly <martind2000@gmail.com>' }
}
}); });
function $(elm) { function $(elm) {
return document.getElementById(elm); return document.getElementById(elm);
} }
function resultsQuery(callback) { function resultsQuery(callback) {
/* var options = { /* var options = {
host: 'nunofcguerreiro.com', host: 'nunofcguerreiro.com',
path: '/api-euromillions-json', path: '/api-euromillions-json',
port: 443, port: 443,
@ -51,424 +49,409 @@ function resultsQuery(callback) {
method: 'GET' method: 'GET'
};*/ };*/
var options = { const options = {
host: 'euromillions.p.mashape.com', 'host': 'euromillions.p.mashape.com',
path: '/ResultsService/FindLast', 'path': '/ResultsService/FindLast',
//port: 443, //port: 443,
headers: { 'headers': {
accept: "text/plain", 'accept': 'text/plain',
"X-Mashape-Key": "5A0H980jK6mshSFL24ZmfiRrNHV2p1d1fhQjsngtx8QWuO9oe4" 'X-Mashape-Key': '5A0H980jK6mshSFL24ZmfiRrNHV2p1d1fhQjsngtx8QWuO9oe4'
/* 'Content-Type': 'application/json',
/* 'Content-Type': 'application/json',
'Content-Length': Buffer.byteLength(data)*/ 'Content-Length': Buffer.byteLength(data)*/
}, },
method: 'GET' 'method': 'GET'
}; };
/* /*
unirest.get("https://euromillions.p.mashape.com/ResultsService/FindLast") unirest.get("https://euromillions.p.mashape.com/ResultsService/FindLast")
.header("X-Mashape-Key", "5A0H980jK6mshSFL24ZmfiRrNHV2p1d1fhQjsngtx8QWuO9oe4") .header("X-Mashape-Key", "5A0H980jK6mshSFL24ZmfiRrNHV2p1d1fhQjsngtx8QWuO9oe4")
.header("Accept", "text/plain") .header("Accept", "text/plain")
.end(function (result) { .end(function (result) {
console.log(result.status, result.headers, result.body); console.log(result.status, result.headers, result.body);
});
*/
https.request(options).on('response', function (response) {
let data = '';
response.on('data', function (chunk) {
data += chunk;
}); });
*/ response.on('end', function () {
//console.log(data);
https.request(options).on('response', function (response) { callback(JSON.parse(data));
var data = ''; });
response.on("data", function (chunk) { }).end();
data += chunk;
});
response.on('end', function () {
//console.log(data);
callback(JSON.parse(data));
});
}).end();
} }
function sortNumber(a, b) { function sortNumber(a, b) {
return a - b; return a - b;
} }
function dynamicSort(property) { function dynamicSort(property) {
var sortOrder = 1; let sortOrder = 1;
if (property[0] === "-") { if (property[0] === '-') {
sortOrder = -1; sortOrder = -1;
property = property.substr(1); property = property.substr(1);
} }
return function (a, b) {
var result = (a[property] < b[property]) ? -1 : (a[property] > b[property]) ? 1 : 0; return function (a, b) {
return result * sortOrder; const result = (a[property] < b[property]) ? -1 : (a[property] > b[property]) ? 1 : 0;
}
return result * sortOrder;
};
} }
function buildArray() { function buildArray() {
for (var x = 0; x < 51; x++) { for (let x = 0; x < 51; x++) {
var l = []; const l = [];
for (var y = 0; y < 51; y++) { for (let y = 0; y < 51; y++)
l.push(0); l.push(0);
}
m[x] = l; m[x] = l;
} }
} }
function buildTable() { function buildTable() {
var area = $('area'); const area = $('area');
// clean area. // clean area.
/* while (area.lastChild) { /* while (area.lastChild) {
area.removeChild(area.lastChild); area.removeChild(area.lastChild);
} }
*/ */
var table = document.createElement('table'); const table = document.createElement('table');
var row = document.createElement('tr'); var row = document.createElement('tr');
var cell = document.createElement('td');
var p = document.createTextNode('---');
cell.appendChild(p);
row.appendChild(cell);
for (var x = 1; x < 50; x++) {
var cell = document.createElement('td'); var cell = document.createElement('td');
var p = document.createTextNode('---') var p = document.createTextNode(x);
cell.appendChild(p); cell.appendChild(p);
row.appendChild(cell); row.appendChild(cell);
for (var x = 1; x < 50; x++) { }
var cell = document.createElement('td'); table.appendChild(row);
var p = document.createTextNode(x)
cell.appendChild(p); /**
row.appendChild(cell);
}
table.appendChild(row);
/**
* *
*/ */
for (var y = 0; y < 51; y++) { for (let y = 0; y < 51; y++) {
var row = document.createElement('tr'); var row = document.createElement('tr');
var cell = document.createElement('td'); var cell = document.createElement('td');
var p = document.createTextNode('[' + parseInt(y + 1) + ']') var p = document.createTextNode(`[${ parseInt(y + 1) }]`);
cell.appendChild(p); cell.appendChild(p);
row.appendChild(cell); row.appendChild(cell);
for (var x = 1; x < 51; x++) { for (var x = 1; x < 51; x++) {
var cell = document.createElement('td'); var cell = document.createElement('td');
var p = document.createTextNode(m[y][x - 1]) var p = document.createTextNode(m[y][x - 1]);
cell.appendChild(p); cell.appendChild(p);
row.appendChild(cell); row.appendChild(cell);
}
table.appendChild(row);
} }
area.appendChild(table); table.appendChild(row);
}
area.appendChild(table);
} }
function calc() { function calc() {
var i = 0; let i = 0;
for (i = 0; i < re.length - 1; i++) { for (i = 0; i < re.length - 1; i++) {
console.log(re[i]); console.log(re[i]);
for (var s = 1; s < 6; s++) { for (let s = 1; s < 6; s++) {
var cv = re[i][s]; const cv = re[i][s];
console.log("row: " + cv); console.log(`row: ${ cv}`);
for (var n = 1; n < 6; n++) { for (let n = 1; n < 6; n++)
if (n != s) { if (n != s) {
workVal = re[i][n]; workVal = re[i][n];
console.log(workVal); console.log(workVal);
m[cv - 1][workVal - 1]++; m[cv - 1][workVal - 1]++;
}
}
} }
} }
buildTable(); }
buildTable();
} }
function othercalc() { function othercalc() {
var i = 0; let i = 0;
// var p = 1 / ((-1)*re.length); // var p = 1 / ((-1)*re.length);
var p = 1.0 / (re.length); const p = 1.0 / (re.length);
console.log('P', p); console.log('P', p);
for (i = 0; i < re.length - 1; i++) { for (i = 0; i < re.length - 1; i++) {
console.log((p * i)); console.log((p * i));
// console.log(re[i]); // console.log(re[i]);
for (var s = 1; s < 6; s++) { for (let s = 1; s < 6; s++) {
var cv = re[i][s]; const cv = re[i][s];
// console.log("row: " + cv); // console.log("row: " + cv);
for (var n = 1; n < 6; n++) { for (let n = 1; n < 6; n++)
if (n != s) { if (n != s) {
workVal = re[i][n]; workVal = re[i][n];
// console.log(workVal); // console.log(workVal);
// m[cv-1][workVal-1]++; // m[cv-1][workVal-1]++;
var flag = false; let flag = false;
for (var t = 0; t < mo.length; t++) { for (var t = 0; t < mo.length; t++)
if (mo[t].a == cv && mo[t].b == workVal) { if (mo[t].a == cv && mo[t].b == workVal) {
if (typeof mo[t].c == 'undefined' || mo[t].c == null) if (typeof mo[t].c === 'undefined' || mo[t].c == null)
{ mo[t].c = 0;
mo[t].c = 0;
} mo[t].c++;
mo[t].c++; flag = true;
flag = true; // mo[t].v++;
// mo[t].v++; /*
/*
if (i < (re.length/2)) if (i < (re.length/2))
mo[t].v = mo[t].v - (p * i) mo[t].v = mo[t].v - (p * i)
else else
*/ */
// original weighting // original weighting
//mo[t].v = mo[t].v + (p * i); //mo[t].v = mo[t].v + (p * i);
//reverse weighting.. //reverse weighting..
mo[t].v = mo[t].v + (1-(p * i)); mo[t].v = mo[t].v + (1 - (p * i));
console.log(mo[t], 1-(p*i)); console.log(mo[t], 1 - (p * i));
//; //;
//mo[t].v = mo[t].v + 1; //mo[t].v = mo[t].v + 1;
// ; // ;
}
}
if (!flag) {
mo.push({
a: cv,
b: workVal,
v: 1
});
}
}
} }
if (!flag)
mo.push({
'a': cv,
'b': workVal,
'v': 1
});
} }
} }
}
console.log("******************************************"); console.log('******************************************');
mo.sort(dynamicSort("v")); mo.sort(dynamicSort('v'));
//for (var t = (mo.length - 20); t < mo.length; t++) { //for (var t = (mo.length - 20); t < mo.length; t++) {
var t = mo.length - 1; var t = mo.length - 1;
while (line.length < 5) { while (line.length < 5) {
if (line.indexOf(mo[t].a) == -1 && line.length < 5) { if (line.indexOf(mo[t].a) == -1 && line.length < 5)
line.push(mo[t].a); line.push(mo[t].a);
}
if (line.indexOf(mo[t].b) == -1 && line.length < 5) {
line.push(mo[t].b);
}
t = t - 1;
}
// console.log(line); if (line.indexOf(mo[t].b) == -1 && line.length < 5)
line.push(mo[t].b);
console.log(line.sort()); t = t - 1;
}
resultsObj.mainline = line.sort(); // console.log(line);
resultsObj.otherLine = [];
resultsObj.otherLine.push(mo[mo.length - 1].a);
resultsObj.otherLine.push(mo[mo.length - 1].b);
for (var t = mo.length - 1; t > (mo.length - 3); t--) { console.log(line.sort());
// if (mo[t].v >= 3) {
if (mo[t].v > 1) { resultsObj.mainline = line.sort();
console.log(mo[t].a + ', ' + mo[t].b + ", " + mo[t].v) resultsObj.otherLine = [];
} resultsObj.otherLine.push(mo[mo.length - 1].a);
} resultsObj.otherLine.push(mo[mo.length - 1].b);
// buildTable();
for (var t = mo.length - 1; t > (mo.length - 3); t--)
// if (mo[t].v >= 3) {
if (mo[t].v > 1)
console.log(`${mo[t].a }, ${ mo[t].b }, ${ mo[t].v}`);
// buildTable();
} }
function tripCalc() { function tripCalc() {
var blist = [[0, 1, 2], [0, 1, 3], [0, 1, 4], [0, 2, 3], [0, 2, 4], [0, 3, 4], [1, 2, 3], [1, 2, 4], [1, 3, 4], [2, 3, 4]]; const blist = [[0, 1, 2], [0, 1, 3], [0, 1, 4], [0, 2, 3], [0, 2, 4], [0, 3, 4], [1, 2, 3], [1, 2, 4], [1, 3, 4], [2, 3, 4]];
var p = 1.0 / (re.length); const p = 1.0 / (re.length);
var a, b, c, cur; let a, b, c, cur;
//var trip = []; //var trip = [];
//console.log //console.log
for (i = 0; i < re.length - 1; i++) { for (i = 0; i < re.length - 1; i++)
for (var t = 0; t < blist.length; t++) { for (let t = 0; t < blist.length; t++) {
cur = blist[t]; cur = blist[t];
a = re[i][cur[0] + 1]; a = re[i][cur[0] + 1];
b = re[i][cur[1] + 1]; b = re[i][cur[1] + 1];
c = re[i][cur[2] + 1]; c = re[i][cur[2] + 1];
// console.log(a + ", " + b + "," + c); // console.log(a + ", " + b + "," + c);
var found = false; let found = false;
for (y = 0; y < trip.length; y++) { for (y = 0; y < trip.length; y++) {
var nums = trip[y].nums; const nums = trip[y].nums;
if (!found) { if (!found)
if ((nums.indexOf(a) != -1) && (nums.indexOf(b) != -1) && (nums.indexOf(c) != -1)) { if ((nums.indexOf(a) != -1) && (nums.indexOf(b) != -1) && (nums.indexOf(c) != -1)) {
/* console.log("nums:" + nums); /* console.log("nums:" + nums);
console.log("want: " + a + ", " + b + "," + c); console.log("want: " + a + ", " + b + "," + c);
console.log("A:" + nums.indexOf(a)); console.log("A:" + nums.indexOf(a));
console.log("B:" + nums.indexOf(b)); console.log("B:" + nums.indexOf(b));
console.log("C:" + nums.indexOf(c)); console.log("C:" + nums.indexOf(c));
*/ */
trip[y].cnt = trip[y].cnt + (p * i); trip[y].cnt = trip[y].cnt + (p * i);
// trip[y].cnt = trip[y].cnt + 1; // trip[y].cnt = trip[y].cnt + 1;
// console.log(">>>" + trip[y].cnt); // console.log(">>>" + trip[y].cnt);
found = true; found = true;
} }
} }
} if (!found)
if (!found) { //trip.push({nums:[a,b,c],cnt:(p * i)});
trip.push({
//trip.push({nums:[a,b,c],cnt:(p * i)}); 'nums': [a, b, c],
trip.push({ 'cnt': 1
nums: [a, b, c], });
cnt: 1
});
}
}
}
var max = 0;
for (y = 0; y < trip.length; y++) {
if (trip[y].cnt > max) max = trip[y].cnt;
}
console.log("Max: " + max);
for (y = 0; y < trip.length; y++) {
if (trip[y].cnt == max) {
console.log(trip[y].cnt + ", " + trip[y].nums);
resultsObj.otherLine = resultsObj.otherLine.concat(trip[y].nums).sort();
}
} }
// console.log(JSON.stringify(trip)); let max = 0;
for (y = 0; y < trip.length; y++)
if (trip[y].cnt > max) max = trip[y].cnt;
console.log(`Max: ${ max}`);
for (y = 0; y < trip.length; y++)
if (trip[y].cnt == max) {
console.log(`${trip[y].cnt }, ${ trip[y].nums}`);
resultsObj.otherLine = resultsObj.otherLine.concat(trip[y].nums).sort();
}
// console.log(JSON.stringify(trip));
} }
function starcalc() { function starcalc() {
var i = 0; let i = 0;
var p = 1 / re.length; const p = 1 / re.length;
for (i = 0; i < re.length - 1; i++) { for (i = 0; i < re.length - 1; i++)
// console.log(re[i]); // console.log(re[i]);
for (var s = 6; s < 8; s++) { for (let s = 6; s < 8; s++) {
var cv = re[i][s]; const cv = re[i][s];
// console.log("row: " + cv); // console.log("row: " + cv);
for (var n = 6; n < 8; n++) { for (let n = 6; n < 8; n++)
if (n != s) { if (n != s) {
workVal = re[i][n]; workVal = re[i][n];
// console.log(workVal); // console.log(workVal);
// m[cv-1][workVal-1]++; // m[cv-1][workVal-1]++;
var flag = false; let flag = false;
for (var t = 0; t < mo.length; t++) { for (var t = 0; t < mo.length; t++)
if (mo[t].a == cv && mo[t].b == workVal) { if (mo[t].a == cv && mo[t].b == workVal) {
flag = true; flag = true;
mo[t].v++; mo[t].v++;
mo[t].v = mo[t].v + (p * i); mo[t].v = mo[t].v + (p * i);
}
}
if (!flag) {
mo.push({
a: cv,
b: workVal,
v: 1
});
}
}
} }
if (!flag)
mo.push({
'a': cv,
'b': workVal,
'v': 1
});
} }
} }
console.log("******************************************");
mo.sort(dynamicSort("v"));
var t = mo.length - 1; console.log('******************************************');
mo.sort(dynamicSort('v'));
var starOutput = []; var t = mo.length - 1;
starOutput.push(mo[t].a);
starOutput.push(mo[t].b); const starOutput = [];
starOutput.push(mo[t].a);
starOutput.push(mo[t].b);
resultsObj.mainstars = []; resultsObj.mainstars = [];
resultsObj.mainstars.push(starOutput.sort()[0]); resultsObj.mainstars.push(starOutput.sort()[0]);
resultsObj.mainstars.push(starOutput.sort()[1]); resultsObj.mainstars.push(starOutput.sort()[1]);
resultsObj.otherStars = []; resultsObj.otherStars = [];
resultsObj.otherStars.push(mo[mo.length - 3].a); resultsObj.otherStars.push(mo[mo.length - 3].a);
resultsObj.otherStars.push(mo[mo.length - 3].b); resultsObj.otherStars.push(mo[mo.length - 3].b);
//console.log('Stars: ' + mo[t].a + ', ' + mo[t].b); //console.log('Stars: ' + mo[t].a + ', ' + mo[t].b);
console.log('Stars: ' + starOutput.sort()[0] + ', ' + starOutput.sort()[1]); console.log(`Stars: ${ starOutput.sort()[0] }, ${ starOutput.sort()[1]}`);
for (var t = mo.length - 6; t < mo.length; t++) { for (var t = mo.length - 6; t < mo.length; t++)
if (mo[t].v >= 3) { if (mo[t].v >= 3)
console.log(mo[t].a + ', ' + mo[t].b + ", " + mo[t].v) console.log(`${mo[t].a }, ${ mo[t].b }, ${ mo[t].v}`);
}
}
// buildTable();
// buildTable();
} }
function performCalcs() { function performCalcs() {
buildArray(); buildArray();
//buildTable(); //buildTable();
othercalc(); othercalc();
console.log("---------------------------------------"); console.log('---------------------------------------');
starcalc(); starcalc();
tripCalc(); tripCalc();
} }
function prepareResults() { function prepareResults() {
resultsObj.mainline = resultsObj.mainline.sort(sortNumber); resultsObj.mainline = resultsObj.mainline.sort(sortNumber);
resultsObj.otherLine = resultsObj.otherLine.sort(sortNumber); resultsObj.otherLine = resultsObj.otherLine.sort(sortNumber);
resultsObj.mainstars = resultsObj.mainstars.sort(sortNumber); resultsObj.mainstars = resultsObj.mainstars.sort(sortNumber);
resultsObj.otherStars = resultsObj.otherStars.sort(sortNumber); resultsObj.otherStars = resultsObj.otherStars.sort(sortNumber);
} }
function saveData() { function saveData() {
jsonfile.writeFileSync(file, re); jsonfile.writeFileSync(file, re);
} }
function sendEmail() { function sendEmail() {
var email = { const email = {
to: 'martind2000@gmail.com', 'to': 'martind2000@gmail.com',
subject: 'Todays numbers' 'subject': 'Todays numbers'
}; };
var template = { file: './jade/output.jade', locals: resultsObj }; const template = {'file': './jade/output.jade', 'locals': resultsObj};
mailer.sendTemplate(email, template, function(err){ mailer.sendTemplate(email, template, function(err) {
if(err) throw err; if(err) throw err;
console.log('compiled template email sent'); console.log('compiled template email sent');
}); });
} }
function processData(data) { function processData(data) {
newArray.push(data.drawns[0].date); newArray.push(data.drawns[0].date);
numbers = data.drawns[0].numbers.split(' '); numbers = data.drawns[0].numbers.split(' ');
for (var i = 0; i < numbers.length; ++i) { for (var i = 0; i < numbers.length; ++i)
numbers[i] = parseInt(numbers[i]); numbers[i] = parseInt(numbers[i]);
}
stars = data.drawns[0].stars.split(' ');
for (var i = 0; i < stars.length; ++i) {
stars[i] = parseInt(stars[i]);
}
newArray = newArray.concat(numbers);
newArray = newArray.concat(stars);
re.unshift(newArray); stars = data.drawns[0].stars.split(' ');
for (var i = 0; i < stars.length; ++i)
stars[i] = parseInt(stars[i]);
newArray = newArray.concat(numbers);
newArray = newArray.concat(stars);
re.unshift(newArray);
} }
function processDataV2(data) { function processDataV2(data) {
var newArray = []; const newArray = [];
var numbers, stars, date ; let numbers, stars, date;
console.log(data); console.log(data);
date = /(\/Date\()([0-9]+)([\s\S]+)/.exec(data.Date); date = /(\/Date\()([0-9]+)([\s\S]+)/.exec(data.Date);
var newdate = Sugar.Date.format(new Date(parseInt(date[2])), '%Y-%m-%d'); const newdate = Sugar.Date.format(new Date(parseInt(date[2])), '%Y-%m-%d');
newArray.push(newdate); newArray.push(newdate);
@ -483,58 +466,135 @@ function processDataV2(data) {
re.unshift(newArray); re.unshift(newArray);
console.log(newArray); console.log(newArray);
} }
function processDataV2B(data) { function processDataV2B(data) {
var newArray = []; let newArray = [];
var numbers=[], stars=[], date ; const numbers = [], stars = [];
let date;
console.log(data); console.log(data);
date = /(\/Date\()([0-9]+)([\s\S]+)/.exec(data.Date); date = /(\/Date\()([0-9]+)([\s\S]+)/.exec(data.Date);
date = date[2]; date = date[2];
date = parseInt(date); date = parseInt(date);
date = new Date(date); date = new Date(date);
console.log(dateFormat(date)); console.log(dateFormat(date));
date = dateFormat(date,"yyyy-dd-mm" ); date = dateFormat(date, 'yyyy-dd-mm' );
numbers.push(parseInt(data.Num1)); numbers.push(parseInt(data.Num1));
numbers.push(parseInt(data.Num2)); numbers.push(parseInt(data.Num2));
numbers.push(parseInt(data.Num3)); numbers.push(parseInt(data.Num3));
numbers.push(parseInt(data.Num4)); numbers.push(parseInt(data.Num4));
numbers.push(parseInt(data.Num5)); numbers.push(parseInt(data.Num5));
stars.push(parseInt(data.Star1)); stars.push(parseInt(data.Star1));
stars.push(parseInt(data.Star2)); stars.push(parseInt(data.Star2));
newArray.push(date); newArray.push(date);
newArray = newArray.concat(numbers); newArray = newArray.concat(numbers);
newArray = newArray.concat(stars); newArray = newArray.concat(stars);
re.unshift(newArray); re.unshift(newArray);
console.log(newArray); console.log(newArray);
return newArray;
} }
function othercalcV2() {
// Var p = 1 / ((-1)*numberStore.length);
const p = 1.0 / (numberStore.length);
for (let i = 0; i < numberStore.length - 1; i++) {
const thisRow = [];
for (let s = 1; s < 6; s++) {
const cv = numberStore[i][s];
for (let n = 1; n < 6; n++)
if (n !== s) {
const workVal = numberStore[i][n];
// Console.log(workVal);
// m[cv-1][workVal-1]++;
// Console.log('mo', mo);
const tempArray = [cv, workVal].sort((a, b) => {
if (a < b)
return -1;
return a > b ? 1 : 0;
});
const id = tempArray.join('-');
if (thisRow.indexOf(id) === -1) {
const record = newNumberContainer[id] || { 'c': 0, 'v': 0, 'id': id };
record.c++;
record.v += (p * i);
newNumberContainer[id] = record;
thisRow.push(id);
}
}
}
}
let flatArray = Object.keys(newNumberContainer).map((key) => newNumberContainer[key]);
flatArray = flatArray.sort((a, b) => {
if (a.c < b.c)
return 1;
return a.c > b.c ? -1 : 0;
});
let line = [];
let lineI = 0;
while (line.length < 5) {
const pair = flatArray[lineI];
pairS = pair.id.split('-');
if (line.indexOf(pairS[0]) === -1 && line.length < 5)
line.push(pairS[0]);
if (line.indexOf(pairS[1]) === -1 && line.length < 5)
line.push(pairS[1]);
// console.log(line);
lineI++;
}
line = line.sort((a, b) => {
if (~~a < ~~b)
return -1;
return ~~a > ~~b ? 1 : 0;
});
//console.log(line);
return line;
}
function GO() { function GO() {
re = []; re = [];
resultsObj = {}; resultsObj = {};
jsonfile.readFile(file, function (err, obj) { jsonfile.readFile(file, function (err, obj) {
console.log(err); console.log(err);
re = obj; re = obj;
/* performCalcs(); /* performCalcs();
prepareResults(); prepareResults();
@ -542,22 +602,21 @@ function GO() {
*/ */
resultsQuery(function (a) { resultsQuery(function (a) {
//processData(a); //processData(a);
processDataV2(a); processDataV2(a);
performCalcs(); performCalcs();
prepareResults(); prepareResults();
console.log(resultsObj); console.log(resultsObj);
sendEmail(); // sendEmail();
saveData();
});
saveData();
}); });
});
} }
@ -567,8 +626,8 @@ function GO() {
//sendEmail(); //sendEmail();
cron.schedule('10 13 * * 2,5', function(){ cron.schedule('10 13 * * 2,5', function() {
GO(); GO();
// console.log('tick'); // console.log('tick');
return -1; return -1;
}); });

104
lotV2.js
View File

@ -4,16 +4,12 @@ const jsonfile = require('jsonfile'),
const Sugar = require('sugar-date'); const Sugar = require('sugar-date');
const file = 'data/data.json'; const pusher = require('./pusher');
const m = [],
prev = [],
mo = [],
star = [],
trip = [],
results = [],
line = [];
let newNumberContainer = {}; const file = 'data/data.json';
const m = [];
const newNumberContainer = {};
let numberStore = []; let numberStore = [];
let resultsObj = {}; let resultsObj = {};
@ -21,9 +17,9 @@ let resultsObj = {};
function buildArray() { function buildArray() {
for (let x = 0; x < 51; x++) { for (let x = 0; x < 51; x++) {
const l = []; const l = [];
for (let y = 0; y < 51; y++) { for (let y = 0; y < 51; y++)
l.push(0); l.push(0);
}
m[x] = l; m[x] = l;
} }
} }
@ -38,14 +34,16 @@ function dynamicSort(property) {
sortOrder = -1; sortOrder = -1;
property = property.substr(1); property = property.substr(1);
} }
return function(a, b) { return function(a, b) {
const result = (a[property] < b[property]) ? -1 : (a[property] > b[property]) ? 1 : 0; const result = (a[property] < b[property]) ? -1 : (a[property] > b[property]) ? 1 : 0;
return result * sortOrder;
} return result * sortOrder;
};
} }
function othercalcV2() { function othercalcV2() {
// Var p = 1 / ((-1)*numberStore.length); // Var p = 1 / ((-1)*numberStore.length);
const p = 1.0 / (numberStore.length); const p = 1.0 / (numberStore.length);
for (let i = 0; i < numberStore.length - 1; i++) { for (let i = 0; i < numberStore.length - 1; i++) {
@ -54,25 +52,24 @@ function othercalcV2() {
for (let s = 1; s < 6; s++) { for (let s = 1; s < 6; s++) {
const cv = numberStore[i][s]; const cv = numberStore[i][s];
for (let n = 1; n < 6; n++) { for (let n = 1; n < 6; n++)
if (n !== s) { if (n !== s) {
let workVal = numberStore[i][n]; const workVal = numberStore[i][n];
// Console.log(workVal); // Console.log(workVal);
// m[cv-1][workVal-1]++; // m[cv-1][workVal-1]++;
// Console.log('mo', mo); // Console.log('mo', mo);
const tempArray = [cv, workVal].sort((a, b) => { const tempArray = [cv, workVal].sort((a, b) => {
if (a < b) { if (a < b)
return -1; return -1;
}
return a > b ? 1 : 0; return a > b ? 1 : 0;
}); });
const id = tempArray.join('-'); const id = tempArray.join('-');
if (thisRow.indexOf(id) === -1) { if (thisRow.indexOf(id) === -1) {
const record = newNumberContainer[id] || { 'c': 0, 'v': 0, 'id': id };
const record = newNumberContainer[id] || {c: 0, v: 0, id: id};
record.c++; record.c++;
record.v += (p * i); record.v += (p * i);
newNumberContainer[id] = record; newNumberContainer[id] = record;
@ -80,52 +77,55 @@ function othercalcV2() {
thisRow.push(id); thisRow.push(id);
} }
} }
}
} }
} }
let flatArray = Object.keys(newNumberContainer).map((key) => newNumberContainer[key]); let flatArray = Object.keys(newNumberContainer).map((key) => newNumberContainer[key]);
flatArray = flatArray.sort((a, b) => { flatArray = flatArray.sort((a, b) => {
if (a.c < b.c) { if (a.c < b.c)
return 1; return 1;
}
return a.c > b.c ? -1 : 0; return a.c > b.c ? -1 : 0;
}); });
let line = []; let line = [];
let lineI = 0; let lineI = 0;
while (line.length < 5) { while (line.length < 5) {
let pair = flatArray[lineI]; const pair = flatArray[lineI];
pairS = pair.id.split('-'); pairS = pair.id.split('-');
if (line.indexOf(pairS[0]) === -1 && line.length < 5) { if (line.indexOf(pairS[0]) === -1 && line.length < 5)
line.push(pairS[0]); line.push(pairS[0]);
}
if (line.indexOf(pairS[1]) === -1 && line.length < 5) { if (line.indexOf(pairS[1]) === -1 && line.length < 5)
line.push(pairS[1]); line.push(pairS[1]);
}
// console.log(line); // console.log(line);
lineI++; lineI++;
} }
line = line.sort((a, b) => { line = line.sort((a, b) => {
if (~~a < ~~b) { if (~~a < ~~b)
return -1; return -1;
}
return ~~a > ~~b ? 1 : 0;
});
console.log(line); return ~~a > ~~b ? 1 : 0;
});
//console.log(line);
return line;
} }
function performCalcs() { function performCalcs() {
buildArray(); buildArray();
//BuildTable(); //BuildTable();
othercalcV2(); let line = othercalcV2();
console.log('---------------------------------------'); console.log('---------------------------------------');
console.log(`line: ${line}`);
pusher.push(`line: ${line}`);
// Starcalc(); // Starcalc();
// tripCalc(); // tripCalc();
@ -137,20 +137,16 @@ function GO() {
resultsObj = {}; resultsObj = {};
jsonfile.readFile(file, function(err, obj) { jsonfile.readFile(file, function(err, obj) {
console.log(err); console.log(err);
numberStore = obj; numberStore = obj;
// Console.log(numberStore); // Console.log(numberStore);
performCalcs(); performCalcs();
//PrepareResults(); //PrepareResults();
// console.log(resultsObj); // console.log(resultsObj);
});
});
} }
GO(); GO();

View File

@ -18,7 +18,10 @@
"lot": "./lot.js" "lot": "./lot.js"
}, },
"dependencies": { "dependencies": {
"dateformat": "^2.0.0",
"jsonfile": "^2.4.0", "jsonfile": "^2.4.0",
"log4js": "^2.3.3",
"node-pushover": "^0.2.2",
"sugar": "^2.0.1", "sugar": "^2.0.1",
"sugar-date": "^2.0.0" "sugar-date": "^2.0.0"
} }

26
pusher.js Normal file
View File

@ -0,0 +1,26 @@
/**
*
* User: Martin Donnelly
* Date: 2016-04-08
* Time: 16:35
*
*/
var Pushover = require('node-pushover'), dateFormat = require('dateformat');
var push = new Pushover({
'token': 'aqnos2j4v4pjpry3hvnxq9646eup23',
'user': 'BE2vgFxdHJw91lVGMRYvZDDmVa5cCM'
});
var logger = require('log4js').getLogger();
const prefix = process.env.NODE_ENV === 'production' ? 'Production' : 'Dev';
const title = `mdLot ${ prefix } Alert`;
module.exports = {
'push' : function(contents) {
var now = new Date();
var msg = `Updated at ${ dateFormat(now, 'dddd, mmmm dS, yyyy, HH:MM:ss') }\n\n${ contents }`;
push.send(title, msg);
}
};