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
Empty file removed 2025/01/.gitkeep
Empty file.
50 changes: 50 additions & 0 deletions 2025/01/dy-tea.v
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
import os
import math

// part 1
lines := os.read_lines('rotations.input')!
mut dial := 50
mut count := 0
for line in lines {
dir := line[0]
turns := line[1..].int()
dial += turns * if dir == `L` { -1 } else { 1 }
for dial > 99 {
dial -= 100
}
for dial < 0 {
dial += 100
}
if dial == 0 {
count++
}
}
println(count)

// part 2
dial = 50
count = 0
for line in lines {
dir := line[0]
turns := line[1..].int()
delta := turns * if dir == `L` { -1 } else { 1 }
dial += delta
if delta < 0 {
if dial >= 0 {
if dial == 0 {
count++
}
continue
}
if dial - delta != 0 {
count++
}
dial = math.abs(dial)
count += dial / 100
dial = (100 - dial % 100) % 100
} else {
count += dial / 100
dial %= 100
}
}
println(count)
10 changes: 10 additions & 0 deletions 2025/01/rotations.input
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
L68
L30
R48
L5
R60
L55
L1
L99
R14
L82
Empty file removed 2025/02/.gitkeep
Empty file.
41 changes: 41 additions & 0 deletions 2025/02/dy-tea.v
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
import os

line := os.read_lines('ids.input')![0]
items := line.split(',')

// part 1
mut sum := u64(0)
for item in items {
left, right := item.split_once('-') or { panic('invalid input') }
start := left.u64()
end := right.u64()
for i in start .. end + 1 {
s := i.str()
if s.len % 2 == 0 {
if s[0..s.len / 2] == s[s.len / 2..s.len] {
sum += i
}
}
}
}
println(sum)

// part 2
sum = 0
for item in items {
left, right := item.split_once('-') or { panic('invalid input') }
start := left.u64()
end := right.u64()
for i in start .. end + 1 {
s := i.str()
for x in 1 .. s.len / 2 + 1 {
if s.len % x == 0 {
if s[0..x].repeat(s.len / x) == s {
sum += i
break
}
}
}
}
}
println(sum)
1 change: 1 addition & 0 deletions 2025/02/ids.input
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
11-22,95-115,998-1012,1188511880-1188511890,222220-222224,1698522-1698528,446443-446449,38593856-38593862,565653-565659,824824821-824824827,2121212118-2121212124
Empty file removed 2025/03/.gitkeep
Empty file.
4 changes: 4 additions & 0 deletions 2025/03/banks.input
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
987654321111111
811111111111119
234234234234278
818181911112111
45 changes: 45 additions & 0 deletions 2025/03/dy-tea.v
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
import os

lines := os.read_lines('banks.input')!

// part 1
mut sum := u64(0)
for line in lines {
mut max := 0
l := line.runes()
for i, x in l {
for y in l[i + 1..] {
dig := '${x}${y}'.int()
if dig > max {
max = dig
}
}
}
sum += u64(max)
}
println(sum)

// part 2
sum = 0
for line in lines {
mut max := u64(0)
mut prev := 0
l := line.runes()
for i in 0 .. 12 {
mut dig := 0
for j in prev .. (l.len - 11 + i) {
c := l[j].str().int()
if dig >= c {
continue
}
dig = c
prev = j + 1
if dig == 9 {
break
}
}
max = max * u64(10) + u64(dig)
}
sum += max
}
println(sum)
Empty file removed 2025/04/.gitkeep
Empty file.
10 changes: 10 additions & 0 deletions 2025/04/department.input
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
..@@.@@@@.
@@@.@.@.@@
@@@@@.@.@@
@.@@@@..@.
@@.@@@@.@@
.@@@@@@@.@
.@.@.@.@@@
@.@@@.@@@@
.@@@@@@@@.
@.@.@@@.@.
64 changes: 64 additions & 0 deletions 2025/04/dy-tea.v
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
import os

lines := os.read_lines('department.input')!
offsets := [[-1, -1], [0, -1], [-1, 0], [1, 1], [1, 0], [0, 1],
[1, -1], [-1, 1]]

// part 1
mut sum := 0
for x, line in lines {
iter: for y, ch in line {
if ch == `.` {
continue
}
mut count := 0
for pos in offsets {
nx := x + pos[0]
ny := y + pos[1]
if nx < 0 || nx >= line.len || ny < 0 || ny >= lines.len {
continue
}
if lines[nx][ny] == `@` {
count++
}
if count > 3 {
continue iter
}
}
sum++
}
}
println(sum)

// part 2
sum = 0
mut grid := lines.map(|l| l.runes())
mut removed := 1
for removed != 0 {
removed = 0
for x, row in grid {
loop: for y, ch in row {
if ch == `.` {
continue
}
mut count := 0
for pos in offsets {
nx := x + pos[0]
ny := y + pos[1]
if nx < 0 || nx >= row.len || ny < 0 || ny >= grid.len {
continue
}
if grid[nx][ny] == `@` {
count++
}
if count > 3 {
continue loop
}
}
grid[x][y] = `.`
removed++
sum++
}
}
}
println(sum)
2 changes: 2 additions & 0 deletions known/2025/01/dy-tea.out
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
3
6
2 changes: 2 additions & 0 deletions known/2025/02/dy-tea.out
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
1227775554
4174379265
2 changes: 2 additions & 0 deletions known/2025/03/dy-tea.out
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
357
3121910778619
2 changes: 2 additions & 0 deletions known/2025/04/dy-tea.out
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
13
43