Finished for 2025

This commit is contained in:
Connor Johnstone
2025-03-20 00:04:16 -04:00
parent 686706c1df
commit f6a4a828d2
3 changed files with 53 additions and 4 deletions

32
2025/Cargo.lock generated
View File

@@ -56,6 +56,7 @@ version = "0.1.0"
dependencies = [
"color-eyre",
"crossterm",
"fuzzy_match",
"ratatui",
]
@@ -234,6 +235,16 @@ version = "0.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2"
[[package]]
name = "fuzzy_match"
version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5f018ca9f4ec5fd881ecc3ec3970cbb2f68ce539aeef7ccdf528d2669a1c16e8"
dependencies = [
"rustc_version",
"sliding_windows",
]
[[package]]
name = "gimli"
version = "0.28.1"
@@ -483,6 +494,15 @@ version = "0.1.24"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f"
[[package]]
name = "rustc_version"
version = "0.1.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c5f5376ea5e30ce23c03eb77cbe4962b988deead10910c372b226388b594c084"
dependencies = [
"semver",
]
[[package]]
name = "rustix"
version = "0.38.44"
@@ -514,6 +534,12 @@ version = "1.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
[[package]]
name = "semver"
version = "0.1.20"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d4f410fedcf71af0345d7607d246e7ad15faaadd49d240ee3b24e5dc21a820ac"
[[package]]
name = "sharded-slab"
version = "0.1.7"
@@ -559,6 +585,12 @@ dependencies = [
"libc",
]
[[package]]
name = "sliding_windows"
version = "3.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a830e5d74dce35884bac85ecdc68c1ae96b9451918cc484f39340049c7a55f5e"
[[package]]
name = "smallvec"
version = "1.14.0"

View File

@@ -9,3 +9,4 @@ edition = "2024"
crossterm = "0.28.1"
ratatui = "0.29.0"
color-eyre = "0.6.3"
fuzzy_match = "0.2.1"

View File

@@ -8,6 +8,9 @@ use ratatui::{
widgets::{Block, Paragraph, Widget},
};
use std::fs;
use fuzzy_match::fuzzy_match;
const DATA_FILE: &str = "data/kenpom.csv";
fn main() -> Result<()> {
color_eyre::install()?;
@@ -75,7 +78,7 @@ impl BracketApp {
/// Handles the key events and updates the state of [`BracketApp`].
fn on_key_event(&mut self, key: KeyEvent) {
match (key.modifiers, key.code) {
(_, KeyCode::Esc | KeyCode::Char('q'))
(KeyModifiers::CONTROL, KeyCode::Char('d'))
| (KeyModifiers::CONTROL, KeyCode::Char('c') | KeyCode::Char('C')) => self.quit(),
(_, KeyCode::Tab) => {
self.selected_input = match self.selected_input {
@@ -83,7 +86,12 @@ impl BracketApp {
Input::Team2 => Input::Team1,
}
}
(_, KeyCode::Esc) => {
self.team1.clear();
self.team2.clear();
},
(_, KeyCode::Enter) => {
self.fuzzy_match_teams();
self.calculate_differential();
}
(_, KeyCode::Backspace) => match self.selected_input {
@@ -103,10 +111,18 @@ impl BracketApp {
}
}
fn fuzzy_match_teams(&mut self) {
// Fuzzy match the teams from the input
let file = fs::read_to_string(DATA_FILE).expect("Should have been able to read the file");
let teams = file.lines().map(|line| (line.split(',').nth(1).unwrap(), line.split(',').nth(1).unwrap())).collect::<Vec<_>>();
self.team1 = fuzzy_match(&self.team1, teams.clone()).unwrap_or_default().to_string();
self.team2 = fuzzy_match(&self.team2, teams).unwrap_or_default().to_string();
}
fn calculate_differential(&mut self) {
// Calculate the differential based on the teams
let rankings_file =
fs::read_to_string("data/kenpom.csv").expect("Should have been able to read the file");
fs::read_to_string(DATA_FILE).expect("Should have been able to read the file");
let team1_line: Vec<&str> = rankings_file
.lines()
.find(|line| line.contains(&self.team1))
@@ -142,7 +158,7 @@ impl Widget for &BracketApp {
.blue()
.centered();
let text = "Choose two teams \n\
Press `Esc`, `Ctrl-C` or `q` to stop running.";
Press `Ctrl-C` or `Ctrl-D` to stop running.";
Paragraph::new(text)
.block(Block::bordered().title(title))
.centered()
@@ -178,6 +194,6 @@ impl Widget for &BracketApp {
Paragraph::new(results)
.block(Block::bordered())
.centered()
.render(Rect::new(0, 8, area.width, 10), buf);
.render(Rect::new(0, 8, area.width, 9), buf);
}
}