|
'use strict' |
|
|
|
const fs = require('fs') |
|
const path = require('path') |
|
const _ = require('lodash') |
|
const { Converter } = require('csvtojson'); |
|
|
|
const args = process.argv.slice(2) |
|
const FILE = args[0] || '2016-CHC' |
|
const chunk = parseInt(args[1] || 10, 10) |
|
|
|
const converter = new Converter({}) |
|
|
|
const win = (g) => g['W/L'].charAt(0) === 'W' |
|
const record = (results) => results.reduce((memo, game) => { return memo[win(game) ? 0 : 1]++, memo }, [0, 0]) |
|
const most = (obj, index) => _.max(_.values(_.mapValues(obj, (i) => i[index] || 0))) || 0 |
|
|
|
const pretty = (obj) => JSON.stringify(obj, (key, value) => { |
|
return Array.isArray(value) ? value.join('-') : value |
|
}, 2).replace(/"/g, '').replace(/[\{\}]/gm, '').replace(/,/g, '') |
|
|
|
converter.fromFile(`./${FILE}.csv`, (err, games) => { |
|
let best = {} |
|
let all = {} |
|
let worst = {} |
|
const perfect = {} |
|
const below500 = {} |
|
|
|
games.filter((g) => parseInt(g['Gm#'], 10)).forEach((g, index, gs) => { |
|
const start = index |
|
const end = start + chunk |
|
const result = record(gs.slice(start, end)) |
|
const wins = result[0] |
|
const losses = result[1] |
|
const length = wins + losses |
|
const key = `${start + 1}-${start + length}` |
|
|
|
if (length < chunk) return |
|
|
|
if (wins < length / 2) { |
|
below500[key] = result |
|
} |
|
|
|
if (losses === 0) { |
|
perfect[key] = result |
|
} |
|
|
|
const mostWins = most(best, 0) |
|
if (wins >= mostWins) { |
|
if (wins > mostWins) best = {} |
|
best[key] = result |
|
} |
|
|
|
const mostLosses = most(worst, 1) |
|
if (losses >= mostLosses) { |
|
if (losses > mostLosses) worst = {} |
|
worst[key] = result |
|
} |
|
|
|
all[key] = result |
|
}) |
|
|
|
all = _.map(all, (record, key) => ({ |
|
record, |
|
key, |
|
pct: record[0] / (record[0] + record[1]), |
|
wins: record[0], |
|
start: parseInt(key.split('-')[0]) |
|
})) |
|
|
|
all = _.orderBy(all, ['pct', 'wins', 'start'], ['desc', 'desc', 'asc']) |
|
all = all.reduce((res, d) => (res[d.key] = d.record, res), {}) |
|
|
|
console.log('-------------------------') |
|
console.log('WORST') |
|
console.log(pretty(worst)) |
|
console.log('-------------------------') |
|
console.log('BELOW 500') |
|
console.log(pretty(below500)) |
|
console.log('-------------------------') |
|
console.log('BEST') |
|
console.log(pretty(best)) |
|
console.log('-------------------------') |
|
console.log('ALL (SORTED)') |
|
console.log(pretty(all)) |
|
console.log('-------------------------') |
|
}); |