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

104
lotV2.js
View File

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

View File

@ -18,7 +18,10 @@
"lot": "./lot.js"
},
"dependencies": {
"dateformat": "^2.0.0",
"jsonfile": "^2.4.0",
"log4js": "^2.3.3",
"node-pushover": "^0.2.2",
"sugar": "^2.0.1",
"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);
}
};