uniform function call syntax

This commit is contained in:
2026-06-06 22:29:25 +02:00
parent 3a53cd4f32
commit 3098d0abf9
34 changed files with 488 additions and 398 deletions

View File

@@ -1,39 +1,39 @@
func part1_is_invalid_id[s: str] : bool
len := str.len(s)
len := s->len()
if len % 2 != 0
return false
first := str.substr(s, 0, len / 2)
second := str.substr(s, len / 2, len / 2)
first := s->substr(0, len / 2)
second := s->substr(len / 2, len / 2)
return str.equal(first, second)
return first->equal(second)
func part1[ranges: Array] : void
sum := 0
for i in 0..ranges->size
parts := str.split(array.nth(ranges, i), "-")
start := str.parse_i64(array.nth(parts, 0))
end := str.parse_i64(array.nth(parts, 1))
parts := (ranges->nth(i) as str)->split("-")
start := (parts->nth(0) as str)->parse_i64()
end := (parts->nth(1) as str)->parse_i64()
for n in (start)..end+1
if part1_is_invalid_id(str.from_i64(n))
if part1_is_invalid_id(n->to_str())
sum += n
io.println_i64(sum)
// had to cheat this one
func part2_is_invalid_id[s: str] : bool
len := str.len(s)
len := s->len()
if len < 2
return false
for div in 1..(len / 2 + 1)
if len % div == 0
u := str.substr(s, 0, div)
u := s->substr(0, div)
is_repeat := true
for k in 1..(len / div)
segment := str.substr(s, k * div, div)
if !str.equal(segment, u)
segment := s->substr(k * div, div)
if !segment->equal(u)
is_repeat = false
if is_repeat
return true
@@ -43,12 +43,12 @@ func part2[ranges: Array] : void
sum := 0
for i in 0..ranges->size
parts := str.split(array.nth(ranges, i), "-")
start := str.parse_i64(array.nth(parts, 0))
end := str.parse_i64(array.nth(parts, 1))
parts := (ranges->nth(i) as str)->split("-")
start := (parts->nth(0) as str)->parse_i64()
end := (parts->nth(1) as str)->parse_i64()
for n in (start)..end+1
if part2_is_invalid_id(str.from_i64(n))
if part2_is_invalid_id(n->to_str())
sum += n
io.println_i64(sum)
@@ -58,7 +58,7 @@ func main[] : i64
if !ok
panic("failed to open input.txt")
ranges := str.split(input, ",")
ranges := input->split(",")
part1(ranges)
part2(ranges)