Commit 87145de9 authored by Howl's avatar Howl
Browse files

add CalculateOverallAccuracy, use defer

parent 6652ca72
Loading
Loading
Loading
Loading
+2 −2
Changes for README.md: 2 added lines, 2 removed lines.
Original line number Diff line number Diff line
@@ -37,10 +37,10 @@ import (
)

func opTimeConsumingTask() {
	defer wg.Done()
	
	time.Sleep(time.Second)
	color.Green("> TimeConsumingTask: done!", count)

	wg.Done()
}
```

+1 −1
Changes for cache_data.go: 1 added line, 1 removed line.
Original line number Diff line number Diff line
@@ -15,6 +15,7 @@ type s struct {
}

func opCacheData() {
	defer wg.Done()
	// get data
	const fetchQuery = `
	SELECT
@@ -151,7 +152,6 @@ func opCacheData() {
		}
	}
	color.Green("> CacheData: done!")
	wg.Done()
}

var modes = [...]string{
+1 −1
Changes for calculate_accuracy.go: 1 added line, 1 removed line.
Original line number Diff line number Diff line
@@ -8,6 +8,7 @@ import (
)

func opCalculateAccuracy() {
	defer wg.Done()
	const initQuery = "SELECT id, 300_count, 100_count, 50_count, gekis_count, katus_count, misses_count, play_mode, accuracy FROM scores"
	rows, err := db.Query(initQuery)
	if err != nil {
@@ -47,7 +48,6 @@ func opCalculateAccuracy() {
	}
	rows.Close()
	color.Green("> CalculateAccuracy: done!")
	wg.Done()
}

func calculateAccuracy(count300, count100, count50, countgeki, countkatu, countmiss, playMode int) float64 {
+106 −0
Changes for calculate_overall_accuracy.go: 106 added lines, 0 removed lines.
Original line number Diff line number Diff line
package main

import (
	"fmt"
	"math"
	"sort"

	"github.com/fatih/color"
)

// CLUSTERFUCK AHEAD DO NOT TOUCH

type calculateOverallAccuracyElement struct {
	mode     int
	accuracy float64
	pp       float64
}

func (c calculateOverallAccuracyElement) g() float64 {
	if c.mode == 0 {
		return c.pp
	}
	return c.accuracy
}

type coaeCollection []calculateOverallAccuracyElement

func (c coaeCollection) Swap(i, j int) {
	c[i], c[j] = c[j], c[i]
}
func (c coaeCollection) Less(i, j int) bool {
	return c[i].g() > c[j].g()
}
func (c coaeCollection) Len() int {
	return len(c)
}

// https://git.zxq.co/ripple/old-frontend/src/70faf80910742c9418ed4e4a13a622a6d7cca9cb/inc/functions.php#L1293-L1319
func (c coaeCollection) Weighten() float64 {
	var total float64
	var divideTotal float64
	for i, el := range c {
		add := math.Pow(0.95, float64(i)) * 100
		total += el.accuracy * add
		divideTotal += add
	}
	if divideTotal == 0 {
		return 0
	}
	return total / divideTotal
}

type coaeCollectionCollection [4]coaeCollection

func (c *coaeCollectionCollection) Add(n calculateOverallAccuracyElement) error {
	if c == nil {
		return fmt.Errorf("fuck")
	}
	c[n.mode] = append(c[n.mode], n)
	return nil
}

func opCalculateOverallAccuracy() {
	defer wg.Done()
	data := make(map[int]*coaeCollectionCollection)
	const memeQuery = "SELECT users.id, scores.play_mode, scores.accuracy, scores.pp FROM scores LEFT JOIN users ON users.id = scores.userid WHERE completed = '3'"
	rows, err := db.Query(memeQuery)
	if err != nil {
		queryError(err, memeQuery)
		return
	}
	for rows.Next() {
		var (
			uid int
			el  calculateOverallAccuracyElement
		)
		err = rows.Scan(&uid, &el.mode, &el.accuracy, &el.pp)
		if err != nil {
			queryError(err, memeQuery)
			continue
		}
		// silently ignore invalid modes
		if el.mode < 0 || el.mode > 3 {
			continue
		}
		if data[uid] == nil {
			data[uid] = new(coaeCollectionCollection)
		}
		data[uid].Add(el)
	}

	for _, v := range data {
		// VARIABLE SHADOWING FTW
		for _, v := range v {
			sort.Sort(v)
		}
	}

	for userid, info := range data {
		for mode, scores := range info {
			op("UPDATE users_stats SET avg_accuracy_"+modes[mode]+" = ? WHERE id = ?", scores.Weighten(), userid)
		}
	}

	color.Green("> CalculateOverallAccuracy: done!")
}
+2 −2
Changes for calculate_pp.go: 2 added lines, 2 removed lines.
Original line number Diff line number Diff line
@@ -13,6 +13,8 @@ type ppUserMode struct {
}

func opCalculatePP() {
	defer wg.Done()

	const ppQuery = "SELECT scores.userid, pp, scores.play_mode FROM scores LEFT JOIN users ON users.id=scores.userid WHERE completed = '3' AND users.allowed = '1' ORDER BY pp DESC"
	rows, err := db.Query(ppQuery)
	if err != nil {
@@ -56,8 +58,6 @@ func opCalculatePP() {

	color.Green("> CalculatePP: done!")

	wg.Done()

	if c.BuildLeaderboards {
		fmt.Print("Starting building leaderboards...")
		go opBuildLeaderboard()
Loading