~repos /plum

#treesitter#compiler#wasm

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 cli
import fs
Tile =
| TREE = True
| EMPTY = False
slopeI() = 1
slopeJ() = 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();