mahjong rating

node v8.17.0
version: 1.1.0
endpointsharetweet
var parse = require('csv-parse/lib/sync') require('request') var request = require('request-promise') var average = require('average') var sum = require('math-sum') exports.endpoint = async function(req, res) { var csvData = await request('https://docs.google.com/spreadsheets/d/1ulixrlBK9SsPhhTZKR35fwKutLaZMYMFrWqtMFlZLvU/pub?gid=0&single=true&output=csv') var data = parse(csvData) const places = data.slice(2).reduce((acc, line) => { if (line[1] && line[3] && line[5] && line[7]) { acc[line[1]] = [...acc[line[1]] || [], 1] acc[line[3]] = [...acc[line[3]] || [], 2] acc[line[5]] = [...acc[line[5]] || [], 3] acc[line[7]] = [...acc[line[7]] || [], 4] } return acc }, {}) const lastGame = data.map(x => x[0]).filter(Boolean).pop() const result = Object .entries(places) .map(([name, places]) => ({ name, average: average(places).toFixed(2), games: places.length, naiveRate: 1500 + sum(places.map(x => [30, 10, -10, -30][x - 1])) })) .sort((a,b) => b.naiveRate - a.naiveRate) .map(({name, games, average, naiveRate}) => `${naiveRate} ${name} ${average} (${games})`) .join('\n') res.setHeader('Content-Type', 'text/html; charset=utf-8') res.end(`<html><pre>${result}\n\nLast game: ${lastGame}</pre></html>`); }
Loading…

no comments

    sign in to comment