Merge branch 'main' of https://repos.hackathon.bz.it/2025-summer/team-1
This commit is contained in:
commit
e9b9193acf
1 changed files with 30 additions and 13 deletions
|
@ -3,15 +3,14 @@ from dataclasses import dataclass
|
|||
from .song import Song
|
||||
|
||||
USER_SCORE_WEIGHT = 0.7
|
||||
GENRE_WEIGHT = 0.1
|
||||
ARTIST_WEIGHT = 0.1
|
||||
TAG_WEIGHT = 0.1
|
||||
RANDOM_WEIGHT = 0.1
|
||||
RECENT_PENALTY = 0.5
|
||||
RECENT_COUNT = 10
|
||||
|
||||
|
||||
@dataclass
|
||||
class UserScoredSong(Song):
|
||||
user_score: int
|
||||
type UserScoredSong = tuple[Song, int]
|
||||
|
||||
|
||||
@dataclass
|
||||
|
@ -21,24 +20,42 @@ class Room:
|
|||
name: str
|
||||
pin: int | None
|
||||
tags: set[str]
|
||||
creative: bool
|
||||
|
||||
songs: dict[str, UserScoredSong]
|
||||
history: list[Song]
|
||||
|
||||
def rank_song(
|
||||
self,
|
||||
song: UserScoredSong,
|
||||
) -> float:
|
||||
def rank_song(self, song: Song, user_score: int) -> float:
|
||||
rank = 0.0
|
||||
song_items = self.songs.items()
|
||||
|
||||
lowest_score = min(song_items, key=lambda item: item[1].user_score)[1].user_score
|
||||
highest_score = min(song_items, key=lambda item: item[1].user_score)[1].user_score
|
||||
lowest_score = min(song_items, key=lambda item: item[1][1])[1][1]
|
||||
highest_score = min(song_items, key=lambda item: item[1][1])[1][1]
|
||||
|
||||
rank += translate(song.user_score, lowest_score, highest_score, 0.0, USER_SCORE_WEIGHT)
|
||||
rank += translate(user_score, lowest_score, highest_score, 0.0, USER_SCORE_WEIGHT)
|
||||
|
||||
# last10items = self.history[-10:]
|
||||
recent_songs = self.history[-RECENT_COUNT:]
|
||||
|
||||
tag_counts = {}
|
||||
artist_counts = {}
|
||||
for song in recent_songs:
|
||||
for tag in song.tags:
|
||||
if tag not in tag_counts:
|
||||
tag_counts[tag] = 0
|
||||
tag_counts[tag] += 1
|
||||
if song.artist not in artist_counts:
|
||||
artist_counts[song.artist] = 0
|
||||
artist_counts[song.artist] += 1
|
||||
|
||||
tag_total = 0
|
||||
for tag in song.tags:
|
||||
if tag in tag_counts:
|
||||
tag_total += tag_counts[tag]
|
||||
|
||||
rank += translate(tag_total, 0, RECENT_COUNT, 0, TAG_WEIGHT)
|
||||
rank += translate(artist_counts[song.artist], 0, RECENT_COUNT, 0, ARTIST_WEIGHT)
|
||||
|
||||
if song in recent_songs:
|
||||
rank -= RECENT_PENALTY
|
||||
|
||||
return rank
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue