#include_file "core/std/wasi"
use package core
-use package core_file
main :: proc (args: [] cstring) {
- contents := file_get_contents("input/day1.txt");
+ contents := file.get_contents("input/day1.txt");
contents_orig := contents;
defer cfree(contents_orig.data);
nums: [..] u32;
- array_init(^nums, 128);
- defer array_free(^nums);
+ array.init(^nums, 128);
+ defer array.free(^nums);
while num := 1; num > 0 {
// This sets num to be 0 if there is no number
- string_read_u32(^contents, ^num);
- if num != 0 do array_push(^nums, num);
+ str.read_u32(^contents, ^num);
+ if num != 0 do array.push(^nums, num);
}
for i: nums do for j: nums do for k: nums {
- if j + i + k == 2020 do printf("Answer: %i\n", i * j * k);
+ if j + i + k == 2020 {
+ printf("Answer: %i\n", i * j * k);
+
+ // Break out of all of the loops
+ break break break;
+ }
}
}
#include_file "core/std/wasi"
use package core
-use package core_file
main :: proc (args: [] cstring) {
- contents := file_get_contents("input/day2.txt");
+ contents := file.get_contents("input/day2.txt");
contents_orig := contents;
defer cfree(contents_orig.data);
pw : string = "";
while true {
- string_read_u32(^contents, ^lo);
+ str.read_u32(^contents, ^lo);
if lo == 0 do break;
- string_discard_chars(^contents);
- string_read_u32(^contents, ^hi);
- string_discard_chars(^contents);
- string_read_char(^contents, ^ch);
- string_discard_chars(^contents, 2);
- string_read_line(^contents, ^pw);
+ str.discard_chars(^contents);
+ str.read_u32(^contents, ^hi);
+ str.discard_chars(^contents);
+ str.read_char(^contents, ^ch);
+ str.discard_chars(^contents, 2);
+ str.read_line(^contents, ^pw);
// Part 1
// count := 0;
#include_file "core/std/wasi"
use package core
-use package core_file
Point :: struct {
x : i32;
}
main :: proc (args: [] cstring) {
- contents := file_get_contents("input/day3.txt");
+ contents := file.get_contents("input/day3.txt");
contents_orig := contents;
defer cfree(contents_orig.data);
forest: [..] u8;
- array_init(^forest, 1024);
- defer array_free(^forest);
+ array.init(^forest, 1024);
+ defer array.free(^forest);
width := 0;
height := 0;
while true {
line: string = "";
- string_read_line(^contents, ^line);
+ str.read_line(^contents, ^line);
if line.count == 0 do break;
width = line.count;
height = height + 1;
- for ch: line do array_push(^forest, ch);
+ for ch: line do array.push(^forest, ch);
}
lis : [5] LineInterp;
#include_file "core/std/wasi"
use package core
-use package core_file
// Returns the number of fields
process_passport :: proc (contents: ^string) -> u32 {
while true {
line: string;
- string_read_line(contents, ^line);
+ str.read_line(contents, ^line);
if line.count == 0 do break;
- fields := string_split(line, #char " ");
+ fields := str.split(line, #char " ");
defer cfree(fields.data);
for field: fields {
- data := string_split(field, #char ":");
+ data := str.split(field, #char ":");
defer cfree(data.data);
- printf("Field: %s\n", data[0]);
- if !string_equal(data[0], "cid") {
+ if !str.equal(data[0], "cid") {
field_count += 1;
}
}
// This does not include part 2 because it is gross and
// not worth the effort to implement it.
main :: proc (args: [] cstring) {
- contents := file_get_contents("input/day4.txt");
+ contents := file.get_contents("input/day4.txt");
contents_data := contents.data;
defer cfree(contents_data);
#include_file "core/std/wasi"
use package core
-use package core_file
main :: proc (args: [] cstring) {
- contents := file_get_contents("input/day5.txt");
+ contents := file.get_contents("input/day5.txt");
contents_data := contents.data;
defer cfree(contents_data);
vals: [..] u32;
- array_init(^vals);
- defer array_free(^vals);
+ array.init(^vals);
+ defer array.free(^vals);
max_val := 0;
while true {
line: string;
- string_read_line(^contents, ^line);
+ str.read_line(^contents, ^line);
if line.count == 0 do break;
val := 0;
if ch == #char "B" || ch == #char "R" do val += 1;
}
- max_val = max_poly(max_val, val);
- array_push(^vals, val);
+ max_val = math.max(max_val, val);
+ array.push(^vals, val);
}
missing := 0;
- array_sort(^vals, cmp_asc);
+ array.sort(^vals, cmp_asc);
for i: 0 .. vals.count - 1 {
if vals[i + 1] - vals[i] != 1 do missing = vals[i] + 1;
}
#include_file "core/std/wasi"
use package core
-use package core_file
part_1 :: proc (contents: ^string) -> u32 {
chars : [26] u8;
while true {
line: string;
- string_read_line(contents, ^line);
+ str.read_line(contents, ^line);
if line.count == 0 do break;
for ch: line do chars[~~ch - cast(u32) #char "a"] = ~~1;
person_count := 0;
while true {
line: string;
- string_read_line(contents, ^line);
+ str.read_line(contents, ^line);
if line.count == 0 do break;
person_count += 1;
}
main :: proc (args: [] cstring) {
- contents := file_get_contents("input/day6.txt");
+ contents := file.get_contents("input/day6.txt");
contents_data := contents.data;
defer cfree(contents_data);
while true {
if contents.count == 0 do break;
- unique := part_2(^contents);
+ unique := part_1(^contents);
unique_sum += unique;
}