UNPKG

scrabble-solver

Version:

Scrabble Solver 2 - Free, open-source, cross-platform, multi-language analysis tool for Scrabble, Scrabble Duel, Super Scrabble, Letter League, Literaki, and Kelimelik. Quickly find the top-scoring words using the given board and tiles.

53 lines (42 loc) 1.63 kB
const fs = require('fs'); const os = require('os'); const path = require('path'); const { argv } = require('process'); const DAY = 24 * 60 * 60 * 1000; const getStats = (event, lines, since) => { const daysCount = Math.ceil((Date.now() - Number(new Date(since))) / DAY); const days = {}; let nextIndex = 0; while (nextIndex !== -1) { nextIndex = lines.indexOf(event, nextIndex + 1); if (nextIndex) { const timestampLine = lines[nextIndex + 1]; const day = timestampLine.substr(` timestamp: '`.length, 'YYYY-MM-DD'.length); days[day] = days[day] || 0; days[day]++; } } const filteredDays = Object.fromEntries( Object.entries(days).filter(([key]) => { return key.localeCompare(since) >= 0; }), ); const sum = Object.entries(filteredDays).reduce((result, [, value]) => result + value, 0); return { daysCount, event, filteredDays, sum }; }; const printStats = ({ daysCount, event, filteredDays, sum }) => { console.log('--------------------------------------'); console.log(event); console.log('--------------------------------------'); console.log(`Sum: ${sum}`); console.log(`Avg: ${sum / daysCount}`); console.table(filteredDays); }; const filepath = path.resolve(os.homedir(), '.scrabble-solver', 'logs', 'all.log'); const file = fs.readFileSync(filepath, 'utf-8'); const lines = file.split('\n'); const since = argv[2] || '2021-06-01'; const events = [` message: 'visit - request',`, ` message: 'solve - request',`, ` message: 'dictionary - request',`]; for (const event of events) { printStats(getStats(event, lines, since)); }