~repos /plum
git clone https://pyrossh.dev/repos/plum.git
A statically typed, imperative programming language inspired by rust, python
test/aoc_2020_3.plum
module aoc_2020_3
import cliimport fs
Tile = | TREE = True | EMPTY = False
slopeI() = 1slopeJ() = 3
main() -> Unit = let input = fs::read_file!("./examples/test/demos/aoc2020/3.txt"); defer input.free(); let map = Map::parse(input); defer map.free(); let tree_count = 0; let i = 0; let j = 0; loop { i += slopeI(); j += slopeJ(); if i == map.rows.size { break; }; if map.get(i, j) == Tile::TREE { tree_count += 1; }; }; print_u32(tree_count); puts("\n");
Map = ( rows: List(List(Tile)))
Map\parse(input: String) -> Map = rows = listOf(List<Tile>()) current_row = listOf<Tile>() for i in 0..input.len() c = input.char_at(i); if c == '#' current_row.push!(TREE) if c == '.' current_row.push!(EMPTY) if c == '\n' rows.push!(current_row) current_row = listOf<Tile>() Map( rows: rows, )
Map\get(i: u32, j: u32) -> Tile = row = rows.get!(i); *(row.at(j % row.size));
Map\free() -> Unit = for i in 0..rows.size row = rows.get!(i); row.free(); rows.free();