Finished for 2025
This commit is contained in:
32
2025/Cargo.lock
generated
32
2025/Cargo.lock
generated
@@ -56,6 +56,7 @@ version = "0.1.0"
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
"color-eyre",
|
"color-eyre",
|
||||||
"crossterm",
|
"crossterm",
|
||||||
|
"fuzzy_match",
|
||||||
"ratatui",
|
"ratatui",
|
||||||
]
|
]
|
||||||
|
|
||||||
@@ -234,6 +235,16 @@ version = "0.1.5"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2"
|
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]]
|
[[package]]
|
||||||
name = "gimli"
|
name = "gimli"
|
||||||
version = "0.28.1"
|
version = "0.28.1"
|
||||||
@@ -483,6 +494,15 @@ version = "0.1.24"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f"
|
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]]
|
[[package]]
|
||||||
name = "rustix"
|
name = "rustix"
|
||||||
version = "0.38.44"
|
version = "0.38.44"
|
||||||
@@ -514,6 +534,12 @@ version = "1.2.0"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
|
checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "semver"
|
||||||
|
version = "0.1.20"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "d4f410fedcf71af0345d7607d246e7ad15faaadd49d240ee3b24e5dc21a820ac"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "sharded-slab"
|
name = "sharded-slab"
|
||||||
version = "0.1.7"
|
version = "0.1.7"
|
||||||
@@ -559,6 +585,12 @@ dependencies = [
|
|||||||
"libc",
|
"libc",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "sliding_windows"
|
||||||
|
version = "3.0.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "a830e5d74dce35884bac85ecdc68c1ae96b9451918cc484f39340049c7a55f5e"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "smallvec"
|
name = "smallvec"
|
||||||
version = "1.14.0"
|
version = "1.14.0"
|
||||||
|
|||||||
@@ -9,3 +9,4 @@ edition = "2024"
|
|||||||
crossterm = "0.28.1"
|
crossterm = "0.28.1"
|
||||||
ratatui = "0.29.0"
|
ratatui = "0.29.0"
|
||||||
color-eyre = "0.6.3"
|
color-eyre = "0.6.3"
|
||||||
|
fuzzy_match = "0.2.1"
|
||||||
|
|||||||
@@ -8,6 +8,9 @@ use ratatui::{
|
|||||||
widgets::{Block, Paragraph, Widget},
|
widgets::{Block, Paragraph, Widget},
|
||||||
};
|
};
|
||||||
use std::fs;
|
use std::fs;
|
||||||
|
use fuzzy_match::fuzzy_match;
|
||||||
|
|
||||||
|
const DATA_FILE: &str = "data/kenpom.csv";
|
||||||
|
|
||||||
fn main() -> Result<()> {
|
fn main() -> Result<()> {
|
||||||
color_eyre::install()?;
|
color_eyre::install()?;
|
||||||
@@ -75,7 +78,7 @@ impl BracketApp {
|
|||||||
/// Handles the key events and updates the state of [`BracketApp`].
|
/// Handles the key events and updates the state of [`BracketApp`].
|
||||||
fn on_key_event(&mut self, key: KeyEvent) {
|
fn on_key_event(&mut self, key: KeyEvent) {
|
||||||
match (key.modifiers, key.code) {
|
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(),
|
| (KeyModifiers::CONTROL, KeyCode::Char('c') | KeyCode::Char('C')) => self.quit(),
|
||||||
(_, KeyCode::Tab) => {
|
(_, KeyCode::Tab) => {
|
||||||
self.selected_input = match self.selected_input {
|
self.selected_input = match self.selected_input {
|
||||||
@@ -83,7 +86,12 @@ impl BracketApp {
|
|||||||
Input::Team2 => Input::Team1,
|
Input::Team2 => Input::Team1,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
(_, KeyCode::Esc) => {
|
||||||
|
self.team1.clear();
|
||||||
|
self.team2.clear();
|
||||||
|
},
|
||||||
(_, KeyCode::Enter) => {
|
(_, KeyCode::Enter) => {
|
||||||
|
self.fuzzy_match_teams();
|
||||||
self.calculate_differential();
|
self.calculate_differential();
|
||||||
}
|
}
|
||||||
(_, KeyCode::Backspace) => match self.selected_input {
|
(_, 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) {
|
fn calculate_differential(&mut self) {
|
||||||
// Calculate the differential based on the teams
|
// Calculate the differential based on the teams
|
||||||
let rankings_file =
|
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
|
let team1_line: Vec<&str> = rankings_file
|
||||||
.lines()
|
.lines()
|
||||||
.find(|line| line.contains(&self.team1))
|
.find(|line| line.contains(&self.team1))
|
||||||
@@ -142,7 +158,7 @@ impl Widget for &BracketApp {
|
|||||||
.blue()
|
.blue()
|
||||||
.centered();
|
.centered();
|
||||||
let text = "Choose two teams \n\
|
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)
|
Paragraph::new(text)
|
||||||
.block(Block::bordered().title(title))
|
.block(Block::bordered().title(title))
|
||||||
.centered()
|
.centered()
|
||||||
@@ -178,6 +194,6 @@ impl Widget for &BracketApp {
|
|||||||
Paragraph::new(results)
|
Paragraph::new(results)
|
||||||
.block(Block::bordered())
|
.block(Block::bordered())
|
||||||
.centered()
|
.centered()
|
||||||
.render(Rect::new(0, 8, area.width, 10), buf);
|
.render(Rect::new(0, 8, area.width, 9), buf);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user