Moved connections functions to a seperate file, in order to minimize clutter

This commit is contained in:
termite 2025-01-13 09:27:25 -08:00
parent 892623e387
commit 76dae333e6
6 changed files with 58 additions and 41 deletions

4
.gitignore vendored
View file

@ -1 +1,3 @@
.env
.env
tags
.ycm_extra_conf.py

45
bot.py
View file

@ -2,6 +2,7 @@
import os
import discord
from game_logic import connections as con
import re
from collections import Counter
from discord.ext import commands
@ -79,28 +80,19 @@ async def stats(interaction: discord.Interaction, game, user: discord.User = Non
async for message in channel.history(limit=1000): # Limit can be adjusted
if message.author == user:
message_content = message.content.strip()
if message_content.startswith("Connections") and "Puzzle #" in message_content:
# Extract the puzzle number
puzzle_number_start = message_content.find("Puzzle #") + len("Puzzle #")
puzzle_number_end = message_content.find("\n", puzzle_number_start)
puzzle_number = message_content[puzzle_number_start:puzzle_number_end].strip()
# Extract the grid (assume the grid starts after the first two lines)
grid_start = message_content.find("\n", message_content.find("Puzzle #")) + 1
grid_content = message_content[grid_start:].strip()
color_grid = con.extract_connections_grid( message.content)
# Split the grid into lines
color_grid = grid_content.split("\n")
if color_grid:
guesses = check_connections_win(color_grid)
guesses = con.check_connections_win(color_grid)
total_games += 1
if guesses > 0:
total_guesses += guesses
wins += 1
perfect_game = is_perfect_game(color_grid)
perfect_game = con.is_perfect_game(color_grid)
if perfect_game:
perfects += 1
@ -130,34 +122,7 @@ async def stats(interaction: discord.Interaction, game, user: discord.User = Non
"Not a game.",
ephemeral=True
)
def check_connections_win(color_grid):
"""
Check if the Connections game is a win and return the number of guesses.
A win is when there are exactly 4 groups of 4 colors each.
"""
# Flatten the color grid into a list of colors
uniform_rows = [row for row in color_grid if len(set(row)) == 1]
flattened_grid = ''.join(uniform_rows)
# Count the occurrences of each color in the grid
color_counts = Counter(flattened_grid)
# Check if there are exactly 4 different colors with 4 squares each
if len(color_counts) == 4 and all(count == 4 for count in color_counts.values()):
# A win: return the number of guesses (lines in the grid)
return len(color_grid)
return 0 # Not a win
def is_perfect_game(color_grid):
"""
Check if the Connections game is a perfect game (solved in 4 guesses, no mistakes).
"""
# A perfect game is one where the first 4 lines form perfect groups
if len(color_grid) == 4 and all(len(set(line)) == 1 for line in color_grid):
return True # It's a perfect game
return False
@bot.event
async def on_ready():

0
game_logic/__init__.py Normal file
View file

Binary file not shown.

Binary file not shown.

50
game_logic/connections.py Normal file
View file

@ -0,0 +1,50 @@
from collections import Counter
def extract_connections_grid(message):
message_content = message.strip()
if message_content.startswith("Connections") and "Puzzle #" in message_content:
# Extract the puzzle number
puzzle_number_start = message_content.find("Puzzle #") + len("Puzzle #")
puzzle_number_end = message_content.find("\n", puzzle_number_start)
puzzle_number = message_content[puzzle_number_start:puzzle_number_end].strip()
# Extract the grid (assume the grid starts after the first two lines)
grid_start = message_content.find("\n", message_content.find("Puzzle #")) + 1
grid_content = message_content[grid_start:].strip()
# Split the grid into lines
color_grid = grid_content.split("\n")
return color_grid
else:
return False
def check_connections_win(color_grid):
"""
Check if the Connections game is a win and return the number of guesses.
A win is when there are exactly 4 groups of 4 colors each.
"""
# Flatten the color grid into a list of colors
uniform_rows = [row for row in color_grid if len(set(row)) == 1]
flattened_grid = ''.join(uniform_rows)
# Count the occurrences of each color in the grid
color_counts = Counter(flattened_grid)
# Check if there are exactly 4 different colors with 4 squares each
if len(color_counts) == 4 and all(count == 4 for count in color_counts.values()):
# A win: return the number of guesses (lines in the grid)
return len(color_grid)
return 0 # Not a win
def is_perfect_game(color_grid):
"""
Check if the Connections game is a perfect game (solved in 4 guesses, no mistakes).
"""
# A perfect game is one where the first 4 lines form perfect groups
if len(color_grid) == 4 and all(len(set(line)) == 1 for line in color_grid):
return True # It's a perfect game
return False