Sha256: 9c6ccb45011adcdb7d4f425f0cd1b098fbd7b5f3e445ecfd7e4a738b07d4ebed

Contents?: true

Size: 1.39 KB

Versions: 180

Compression:

Stored size: 1.39 KB

Contents

struct Board {
    pieces: Vec<Vec<char>>,
    num_rows: usize,
    num_cols: usize
}

impl Board {
    fn annotated(&self) -> Vec<String> {
        (0..self.num_rows).map(|y| self.annotated_row(y)).collect()
    }

    fn annotated_row(&self, y: usize) -> String {
        self.pieces[y]
                  .iter()
                  .enumerate()
                  .map(|(x,&c)| if c == ' ' {self.count_neighbouring_mines_char(x, y)} else {c})
                  .collect::<String>()
    }

    fn count_neighbouring_mines_char(&self, x: usize, y: usize) -> char {
        let mut count = 0;
        for x1 in neighbouring_points(x, self.num_cols) {
            for y1 in neighbouring_points(y, self.num_rows) {
                let piece = self.pieces[y1][x1];
                if piece == '*' {
                    count += 1;
                }
            }
        }
        if count == 0 {
            ' '
        } else {
            (('0' as u8) + count) as char
        }
    }
}

pub fn annotate(pieces: &[&str]) -> Vec<String> {
    let pieces_vec = pieces.iter().map(|&r| r.chars().collect()).collect();
    Board {pieces: pieces_vec, num_rows: pieces.len(), num_cols: pieces[0].len()}.annotated()
}

fn neighbouring_points(x: usize, limit: usize) -> Vec<usize> {
    let mut offsets = vec![x];
    if x >= 1 {
        offsets.push(x-1);
    }
    if x+2 <= limit {
        offsets.push(x+1);
    }
    offsets
}

Version data entries

180 entries across 180 versions & 1 rubygems

Version Path
trackler-2.1.0.24 tracks/rust/exercises/minesweeper/example.rs
trackler-2.1.0.23 tracks/rust/exercises/minesweeper/example.rs
trackler-2.1.0.22 tracks/rust/exercises/minesweeper/example.rs
trackler-2.1.0.21 tracks/rust/exercises/minesweeper/example.rs
trackler-2.1.0.20 tracks/rust/exercises/minesweeper/example.rs
trackler-2.1.0.19 tracks/rust/exercises/minesweeper/example.rs
trackler-2.1.0.18 tracks/rust/exercises/minesweeper/example.rs
trackler-2.1.0.17 tracks/rust/exercises/minesweeper/example.rs
trackler-2.1.0.16 tracks/rust/exercises/minesweeper/example.rs
trackler-2.1.0.15 tracks/rust/exercises/minesweeper/example.rs
trackler-2.1.0.14 tracks/rust/exercises/minesweeper/example.rs
trackler-2.1.0.13 tracks/rust/exercises/minesweeper/example.rs
trackler-2.1.0.12 tracks/rust/exercises/minesweeper/example.rs
trackler-2.1.0.11 tracks/rust/exercises/minesweeper/example.rs
trackler-2.1.0.10 tracks/rust/exercises/minesweeper/example.rs
trackler-2.1.0.9 tracks/rust/exercises/minesweeper/example.rs
trackler-2.1.0.8 tracks/rust/exercises/minesweeper/example.rs
trackler-2.1.0.7 tracks/rust/exercises/minesweeper/example.rs
trackler-2.1.0.6 tracks/rust/exercises/minesweeper/example.rs
trackler-2.1.0.5 tracks/rust/exercises/minesweeper/example.rs