aboutsummaryrefslogtreecommitdiff
path: root/2025
diff options
context:
space:
mode:
Diffstat (limited to '2025')
-rw-r--r--2025/day_03.cbl63
-rw-r--r--2025/day_03_part2.cbl64
2 files changed, 127 insertions, 0 deletions
diff --git a/2025/day_03.cbl b/2025/day_03.cbl
new file mode 100644
index 0000000..f294d1d
--- /dev/null
+++ b/2025/day_03.cbl
@@ -0,0 +1,63 @@
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. day_03.
+ AUTHOR. Trey Bastian.
+ ENVIRONMENT DIVISION.
+ INPUT-OUTPUT SECTION.
+ FILE-CONTROL.
+ SELECT input-file ASSIGN TO "./input.txt"
+ ORGANIZATION IS LINE SEQUENTIAL.
+ DATA DIVISION.
+ FILE SECTION.
+ FD input-file.
+ 01 input-line PIC Z(4096).
+ WORKING-STORAGE SECTION.
+ 01 idx PIC 9(4).
+ 01 idx-2 PIC 9(4).
+ 01 len PIC 9(4).
+
+ 01 maxim PIC 9 VALUE 0.
+ 01 digit PIC 9 VALUE 0.
+
+ 01 joltage PIC XX.
+ 01 result PIC 9(10) VALUE 0.
+
+
+ 01 eof PIC X.
+ 88 eof-y VALUE "Y".
+ 88 eof-n VALUE "N".
+
+ PROCEDURE DIVISION.
+ OPEN INPUT input-file.
+ SET eof-n to TRUE.
+ PERFORM UNTIL eof-y
+ READ input-file AT END
+ SET eof-y to TRUE
+ NOT AT END
+ MOVE FUNCTION LENGTH(FUNCTION TRIM(input-line)) TO len
+ MOVE 0 TO maxim
+ *first pass leave something on the right
+ PERFORM VARYING idx FROM 1 UNTIL idx > len - 1
+ MOVE FUNCTION NUMVAL(input-line(idx:1)) TO digit
+ IF maxim < digit
+ MOVE digit TO maxim
+ MOVE idx TO idx-2
+ END-IF
+ END-PERFORM
+ * need the next index
+ MOVE maxim TO joltage(1:1)
+ MOVE 0 TO maxim
+ ADD 1 TO idx-2
+ PERFORM VARYING idx-2 FROM idx-2 UNTIL idx-2 > len
+ MOVE FUNCTION NUMVAL(input-line(idx-2:1)) TO digit
+ IF maxim < digit
+ MOVE digit TO maxim
+ END-IF
+ END-PERFORM
+ MOVE maxim TO joltage(2:1)
+ ADD FUNCTION NUMVAL(joltage) TO result
+ END-READ
+ END-PERFORM.
+ CLOSE input-file.
+ DISPLAY result.
+ STOP-RUN.
+
diff --git a/2025/day_03_part2.cbl b/2025/day_03_part2.cbl
new file mode 100644
index 0000000..a4d71d5
--- /dev/null
+++ b/2025/day_03_part2.cbl
@@ -0,0 +1,64 @@
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. day_03_part2.
+ AUTHOR. Trey Bastian.
+ ENVIRONMENT DIVISION.
+ INPUT-OUTPUT SECTION.
+ FILE-CONTROL.
+ SELECT input-file ASSIGN TO "./input.txt"
+ ORGANIZATION IS LINE SEQUENTIAL.
+ DATA DIVISION.
+ FILE SECTION.
+ FD input-file.
+ 01 input-line PIC Z(4096).
+ WORKING-STORAGE SECTION.
+ 01 idx PIC 9(4) VALUE 1.
+ 01 idx-2 PIC 9(4).
+ 01 len PIC 9(4).
+
+ 01 maxim PIC 9 VALUE 0.
+ 01 digit PIC 9 VALUE 0.
+ 01 remaining PIC 99 VALUE 12.
+ 01 rem-idx PIC 99 VALUE 1.
+
+ 01 joltage PIC X(12).
+ 01 result PIC 9(32) VALUE 0.
+
+
+ 01 eof PIC X.
+ 88 eof-y VALUE "Y".
+ 88 eof-n VALUE "N".
+
+ PROCEDURE DIVISION.
+ OPEN INPUT input-file.
+ SET eof-n to TRUE.
+ PERFORM UNTIL eof-y
+ READ input-file AT END
+ SET eof-y to TRUE
+ NOT AT END
+ MOVE FUNCTION LENGTH(FUNCTION TRIM(input-line)) TO len
+ MOVE 1 TO idx
+ MOVE 12 TO remaining
+ MOVE 1 TO rem-idx
+ PERFORM UNTIL remaining < 1
+ MOVE 0 TO maxim
+ PERFORM VARYING idx FROM idx UNTIL idx >
+ (len - remaining + 1)
+ MOVE FUNCTION NUMVAL(input-line(idx:1)) to digit
+ IF maxim < digit
+ MOVE digit TO maxim
+ MOVE idx TO idx-2
+ END-IF
+ END-PERFORM
+ MOVE maxim TO joltage(rem-idx:1)
+ ADD 1 TO rem-idx
+ SUBTRACT 1 FROM remaining
+ MOVE idx-2 TO idx
+ ADD 1 TO idx
+ END-PERFORM
+ ADD FUNCTION NUMVAL(joltage) TO result
+ END-READ
+ END-PERFORM.
+ CLOSE input-file.
+ DISPLAY result.
+ STOP-RUN.
+