feat: 3484_design_spread_sheet

This commit is contained in:
SquidSpirit 2025-09-19 20:10:17 +08:00
parent e557afc877
commit 68cc571f02
3 changed files with 54 additions and 0 deletions

7
3484_design_spread_sheet/Cargo.lock generated Normal file
View File

@ -0,0 +1,7 @@
# This file is automatically @generated by Cargo.
# It is not intended for manual editing.
version = 4
[[package]]
name = "design_spread_sheet"
version = "0.1.0"

View File

@ -0,0 +1,6 @@
[package]
name = "design_spread_sheet"
version = "0.1.0"
edition = "2024"
[dependencies]

View File

@ -0,0 +1,41 @@
pub struct Spreadsheet {
cells: Vec<i32>,
}
impl Spreadsheet {
pub fn new(rows: i32) -> Self {
Self {
cells: vec![0; rows as usize * 26],
}
}
pub fn set_cell(&mut self, cell: String, value: i32) {
let index = Spreadsheet::count_index(&cell);
self.cells[index] = value;
}
pub fn reset_cell(&mut self, cell: String) {
self.set_cell(cell, 0);
}
pub fn get_value(&self, formula: String) -> i32 {
let mut result = 0;
for cell in formula[1..].split('+') {
if let Ok(val) = cell.parse::<i32>() {
result += val
} else {
let index = Spreadsheet::count_index(cell);
result += self.cells[index];
}
}
result
}
fn count_index(cell: &str) -> usize {
let col = (cell[..1].as_bytes()[0] - b'A') as usize;
let row = cell[1..].parse::<usize>().unwrap() - 1;
row * 26 + col
}
}