Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion gleam.toml
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,9 @@ gleam_erlang = ">= 1.3.0 and < 2.0.0"
gleam_otp = ">= 1.2.0 and < 2.0.0"
glint = ">= 1.2.1 and < 2.0.0"
argv = ">= 1.0.2 and < 2.0.0"
glemplate = ">= 8.1.1 and < 9.0.0"
gleam_yielder = ">= 1.1.0 and < 2.0.0"
gleam_deque = ">= 1.0.0 and < 2.0.0"
handles = ">= 5.0.0 and < 6.0.0"

[dev-dependencies]
gleeunit = ">= 1.0.0 and < 2.0.0"
9 changes: 3 additions & 6 deletions manifest.toml
Original file line number Diff line number Diff line change
Expand Up @@ -11,15 +11,12 @@ packages = [
{ name = "gleam_json", version = "3.1.0", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "gleam_json", source = "hex", outer_checksum = "44FDAA8847BE8FC48CA7A1C089706BD54BADCC4C45B237A992EDDF9F2CDB2836" },
{ name = "gleam_otp", version = "1.2.0", build_tools = ["gleam"], requirements = ["gleam_erlang", "gleam_stdlib"], otp_app = "gleam_otp", source = "hex", outer_checksum = "BA6A294E295E428EC1562DC1C11EA7530DCB981E8359134BEABC8493B7B2258E" },
{ name = "gleam_regexp", version = "1.1.1", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "gleam_regexp", source = "hex", outer_checksum = "9C215C6CA84A5B35BB934A9B61A9A306EC743153BE2B0425A0D032E477B062A9" },
{ name = "gleam_stdlib", version = "0.67.0", build_tools = ["gleam"], requirements = [], otp_app = "gleam_stdlib", source = "hex", outer_checksum = "6368313DB35963DC02F677A513BB0D95D58A34ED0A9436C8116820BF94BE3511" },
{ name = "gleam_stdlib", version = "0.67.1", build_tools = ["gleam"], requirements = [], otp_app = "gleam_stdlib", source = "hex", outer_checksum = "6CE3E4189A8B8EC2F73AB61A2FBDE49F159D6C9C61C49E3B3082E439F260D3D0" },
{ name = "gleam_time", version = "1.6.0", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "gleam_time", source = "hex", outer_checksum = "0DF3834D20193F0A38D0EB21F0A78D48F2EC276C285969131B86DF8D4EF9E762" },
{ name = "gleam_yielder", version = "1.1.0", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "gleam_yielder", source = "hex", outer_checksum = "8E4E4ECFA7982859F430C57F549200C7749823C106759F4A19A78AEA6687717A" },
{ name = "gleeunit", version = "1.9.0", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "gleeunit", source = "hex", outer_checksum = "DA9553CE58B67924B3C631F96FE3370C49EB6D6DC6B384EC4862CC4AAA718F3C" },
{ name = "glemplate", version = "8.1.1", build_tools = ["gleam"], requirements = ["gleam_stdlib", "glentities", "nibble"], otp_app = "glemplate", source = "hex", outer_checksum = "060C160F6160809C27E2E41E73543BC998CB7C6B101F5669C394DEDC2EA2F12C" },
{ name = "glentities", version = "6.2.1", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "glentities", source = "hex", outer_checksum = "78A0B28789C1A7840468C683FC9588B0B59AA38BE8CF5DACD1AF2E60A91AE638" },
{ name = "glint", version = "1.2.1", build_tools = ["gleam"], requirements = ["gleam_community_ansi", "gleam_community_colour", "gleam_stdlib", "snag"], otp_app = "glint", source = "hex", outer_checksum = "2214C7CEFDE457CEE62140C3D4899B964E05236DA74E4243DFADF4AF29C382BB" },
{ name = "iv", version = "1.3.3", build_tools = ["gleam"], requirements = ["gleam_stdlib", "gleam_yielder"], otp_app = "iv", source = "hex", outer_checksum = "F5A65B2BAB2747DEFEB756F7F1DF63D776F4445EE9679AE0A2442F73CAE68B13" },
{ name = "nibble", version = "1.1.4", build_tools = ["gleam"], requirements = ["gleam_regexp", "gleam_stdlib", "iv"], otp_app = "nibble", source = "hex", outer_checksum = "06397501730FF486AE6F99299982A33F5EA9F8945B5A25920C82C8F924CEA481" },
{ name = "handles", version = "5.0.0", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "handles", source = "hex", outer_checksum = "99967BED02558973B5C55EF36264661F0E4BC4E672EB85D970D6FF7A774FAC7A" },
{ name = "simplifile", version = "2.3.1", build_tools = ["gleam"], requirements = ["filepath", "gleam_stdlib"], otp_app = "simplifile", source = "hex", outer_checksum = "957E0E5B75927659F1D2A1B7B75D7B9BA96FAA8D0C53EA71C4AD9CD0C6B848F6" },
{ name = "snag", version = "1.2.0", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "snag", source = "hex", outer_checksum = "274F41D6C3ECF99F7686FDCE54183333E41D2C1CA5A3A673F9A8B2C7A4401077" },
]
Expand All @@ -33,6 +30,6 @@ gleam_stdlib = { version = ">= 0.44.0 and < 2.0.0" }
gleam_time = { version = ">= 1.6.0 and < 2.0.0" }
gleam_yielder = { version = ">= 1.1.0 and < 2.0.0" }
gleeunit = { version = ">= 1.0.0 and < 2.0.0" }
glemplate = { version = ">= 8.1.1 and < 9.0.0" }
glint = { version = ">= 1.2.1 and < 2.0.0" }
handles = { version = ">= 5.0.0 and < 6.0.0" }
simplifile = { version = ">= 2.3.1 and < 3.0.0" }
63 changes: 46 additions & 17 deletions src/aoc2025.gleam
Original file line number Diff line number Diff line change
@@ -1,14 +1,13 @@
import argv
import gleam/dict
import gleam/int
import gleam/io
import gleam/result
import gleam/string
import gleam/string_tree
import glemplate/assigns
import glemplate/parser
import glemplate/text
import glint
import handles
import handles/ctx
import handles/format
import simplifile

pub fn main() -> Nil {
Expand Down Expand Up @@ -58,7 +57,6 @@ fn new_day() -> glint.Command(Nil) {
}

fn generate_template(day_number) -> Result(Nil, Nil) {
let p = parser.new()
use sol_input <- result.try(
simplifile.read(from: "templates/solution.gleam")
|> result.map_error(fn(e) {
Expand All @@ -80,36 +78,67 @@ fn generate_template(day_number) -> Result(Nil, Nil) {
)

use sol_template <- result.try(
parser.parse_to_template(sol_input, "solution.gleam", p)
handles.prepare(sol_input)
|> result.map_error(fn(e) {
io.println_error("Error parsing solution.gleam: " <> string.inspect(e))
case
format.format_tokenizer_error(
e,
"Error parsing solution.gleam: {{ . }}",
)
{
Error(_) -> io.println_error("Unknown error parsing solution.gleam")
Ok(v) -> io.println_error(v)
}
}),
)
use test_template <- result.try(
parser.parse_to_template(test_input, "dayXX_test.gleam", p)
handles.prepare(test_input)
|> result.map_error(fn(e) {
io.println_error("Error parsing dayXX_test.gleam: " <> string.inspect(e))
case
format.format_tokenizer_error(
e,
"Error parsing dayXX_test.gleam: {{ . }}",
)
{
Error(_) -> io.println_error("Unknown error parsing dayXX_test.gleam")
Ok(v) -> io.println_error(v)
}
}),
)

let day_value =
day_number |> int.to_string |> string.pad_start(to: 2, with: "0")

let vals = dict.from_list([#("day", assigns.String(day_value))])

use sol_tree <- result.try(
text.render(sol_template, vals, dict.new())
handles.run(sol_template, ctx.Str(day_value), [])
|> result.map_error(fn(e) {
io.println_error("Error rendering solution.gleam: " <> string.inspect(e))
case
format.format_runtime_error(
e,
"Error rendering solution.gleam: {{ . }}",
)
{
Error(_) -> io.println_error("Unknown error rendering solution.gleam")
Ok(v) -> io.println_error(v)
}
}),
)

use test_tree <- result.try(
text.render(test_template, vals, dict.new())
handles.run(test_template, ctx.Str(day_value), [])
|> result.map_error(fn(e) {
io.println_error(
"Error rendering dayXX_test.gleam: " <> string.inspect(e),
)
case
format.format_runtime_error(
e,
"Error rendering day" <> day_value <> "_test.gleam: {{ . }}",
)
{
Error(_) ->
io.println_error(
"Unknown error rendering day" <> day_value <> "_test.gleam",
)
Ok(v) -> io.println_error(v)
}
}),
)

Expand Down
2 changes: 1 addition & 1 deletion templates/dayXX_test.gleam
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import day<%= day %>/solution
import day{{ . }}/solution
import gleam/string

const testinput = ""
Expand Down
2 changes: 1 addition & 1 deletion templates/solution.gleam
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import gleam/io
import internal/aoc_utils

pub fn main() {
let filename = "inputs/day<%= day%>.txt"
let filename = "inputs/day{{ . }}.txt"

let lines_result = aoc_utils.read_lines(from: filename)
case lines_result {
Expand Down