Commit Diff


commit - 064dc676cdacd69e7b3668623f33d25967a1f79e
commit + b6f0b50ca217ec15a6a77de6bd4907e960880dfb
blob - a72f56b94509de8f45a277358af48730ef3bf176
blob + 5307f2972e784145c543f1f3bbef4e18fc09c03e
--- 2024/02.odin
+++ 2024/02.odin
@@ -1,14 +1,65 @@
 package aoc
 
 import "core:fmt"
-import "core:log"
-import "core:os"
+import "core:math"
+import "core:strconv"
+import "core:strings"
 
 day02 :: proc() {
-    input := slurp_lines("input/02")
+	input := slurp_lines("input/02")
 	defer delete(input)
-	
+
+	p1: int
+	p2: int
 	for line in input {
-	    
+		sp := strings.split(line, " ")
+		report := make([dynamic]int, 0, len(sp))
+		for s in sp {
+			i, _ := strconv.parse_int(s)
+			append(&report, i)
+		}
+		if validate(report) {
+			p1 += 1
+		}
+
+		p2_valid := true
+		for i := 0; i < len(report); i += 1 {
+			cpy := make([dynamic]int, 0, len(report))
+			copy(cpy[:], report[:])
+			ordered_remove(&cpy, i)
+			if !validate(cpy) {
+				p2_valid = false
+				delete(cpy)
+				break
+			}
+			delete(cpy)
+		}
+		if p2_valid {
+			p2 += 1
+		}
+		delete(report)
 	}
+	fmt.println(p1)
+	fmt.println(p2)
 }
+
+validate :: proc(report: [dynamic]int) -> bool {
+	increasing := false
+	if report[0] < report[1] {
+		increasing = true
+	}
+
+	for i := 1; i < len(report); i += 1 {
+		if increasing && report[i - 1] > report[i] {
+			return false
+		}
+		if !increasing && report[i - 1] < report[i] {
+			return false
+		}
+		diff := math.abs(report[i - 1] - report[i])
+		if diff < 1 || diff > 3 {
+			return false
+		}
+	}
+	return true
+}
blob - /dev/null
blob + 166b551d8ceec5f006c7eb827b6b3bc448bf8e25 (mode 755)
Binary files /dev/null and 2024/2024 differ
blob - /dev/null
blob + 15d8bd1f8429e2684709a08b619c6d30f555ece9 (mode 644)
--- /dev/null
+++ 2025/02.rb
@@ -0,0 +1,30 @@
+def valid(str, p2)
+  (1..str.size / 2).each do |i|
+    sub = str[0, i]
+    return false if str[i..] == sub
+
+    if p2 && str.size > 2
+      chunks = str[i..].chars.each_slice(sub.size).map(&:join)
+      puts chunks
+    end
+  end
+  true
+end
+
+input = File.read('input/test').split(',')
+p1 = 0
+p2 = 0
+
+input.each do |line|
+  sp = line.split('-')
+  a = sp[0].to_i
+  b = sp[1].to_i
+
+  (a..b).each do |i|
+    p1 += i unless valid(i.to_s, false)
+    p2 += i unless valid(i.to_s, true)
+  end
+end
+
+puts p1
+puts p2
blob - /dev/null
blob + 76ef783cfe48f753a0000a4413408e5cb9eed2ab (mode 644)
--- /dev/null
+++ 2025/input/02
@@ -0,0 +1 @@
+9191896883-9191940271,457499-518693,4952-6512,960-1219,882220-1039699,2694-3465,3818-4790,166124487-166225167,759713819-759869448,4821434-4881387,7271-9983,1182154-1266413,810784-881078,802-958,1288-1491,45169-59445,25035-29864,379542-433637,287-398,75872077-75913335,653953-689335,168872-217692,91-113,475-590,592-770,310876-346156,2214325-2229214,85977-112721,51466993-51620441,8838997-8982991,534003-610353,32397-42770,17-27,68666227-68701396,1826294188-1826476065,1649-2195,141065204-141208529,7437352-7611438,10216-13989,33-44,1-16,49-74,60646-73921,701379-808878
\ No newline at end of file