My yearly advent-of-code solutions

Compare changes

Choose any two refs to compare.

+2
.gitignore
···
···
+
input.txt
+
input_test.txt
+51
2025/day_01.cbl
···
···
+
IDENTIFICATION DIVISION.
+
PROGRAM-ID. day_01.
+
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.
+
02 direction PIC X.
+
02 move-text PIC XXX.
+
WORKING-STORAGE SECTION.
+
01 dial-position PIC 9(2) VALUE 50.
+
01 move-num PIC S9(3).
+
01 zero-count PIC 9(4) VALUE ZEROS.
+
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 NUMVAL(move-text) TO move-num
+
IF direction = "L"
+
COMPUTE move-num = 0 - move-num
+
END-IF
+
+
COMPUTE dial-position = FUNCTION MOD(dial-position +
+
move-num, 100)
+
+
if dial-position < 0
+
ADD 100 to dial-position
+
END-IF
+
+
if dial-position = 0
+
ADD 1 to zero-count
+
END-IF
+
END-READ
+
END-PERFORM.
+
CLOSE input-file.
+
DISPLAY zero-count.
+
STOP-RUN.
+
+67
2025/day_01_part2.cbl
···
···
+
IDENTIFICATION DIVISION.
+
PROGRAM-ID. day_01_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.
+
02 direction PIC X.
+
02 move-text PIC XXX.
+
WORKING-STORAGE SECTION.
+
01 dial-position PIC 9(2) VALUE 50.
+
01 new-position PIC 9(2).
+
01 move-num PIC S9(3).
+
01 zero-count PIC 9(4) VALUE ZEROS.
+
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 NUMVAL(move-text) TO move-num
+
IF move-num > 99
+
COMPUTE zero-count = zero-count + (move-num / 100)
+
END-IF
+
+
IF direction = "L"
+
COMPUTE move-num = 0 - move-num
+
END-IF
+
+
COMPUTE new-position = FUNCTION MOD(dial-position +
+
move-num, 100)
+
+
if new-position < 0
+
ADD 100 to new-position
+
END-IF
+
+
EVALUATE new-position
+
WHEN 0
+
ADD 1 to zero-count
+
WHEN < dial-position AND direction = "R" AND
+
dial-position <> 0
+
ADD 1 to zero-count
+
WHEN > dial-position AND direction = "L" AND
+
dial-position <> 0
+
ADD 1 to zero-count
+
END-EVALUATE
+
+
+
MOVE new-position TO dial-position
+
+
END-READ
+
END-PERFORM.
+
CLOSE input-file.
+
DISPLAY zero-count.
+
STOP-RUN.
+
+76
2025/day_02.cbl
···
···
+
IDENTIFICATION DIVISION.
+
PROGRAM-ID. day_02.
+
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 X(4096).
+
WORKING-STORAGE SECTION.
+
01 ptr PIC 9(4) Value 1.
+
01 len PIC 9(4).
+
01 left-val PIC 9(32).
+
01 right-val PIC 9(32).
+
01 grouping PIC X(65).
+
+
01 val-string PIC Z(32).
+
01 val-string-len PIC 9(2).
+
01 val-string-start-idx PIC 9(2).
+
01 val-string-half PIC 9(2).
+
01 result PIC 9(32) VALUE ZEROS.
+
+
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
+
INSPECT input-line TALLYING len FOR CHARACTERS BEFORE
+
SPACE
+
+
PERFORM UNTIL ptr > len
+
UNSTRING input-line DELIMITED BY "," INTO grouping WITH
+
POINTER ptr
+
END-UNSTRING
+
+
UNSTRING grouping DELIMITED BY "-" INTO left-val,
+
right-val
+
END-UNSTRING
+
+
PERFORM VARYING left-val FROM left-val BY 1 UNTIL
+
left-val > right-val
+
MOVE left-val TO val-string
+
+
COMPUTE val-string-len = FUNCTION LENGTH(FUNCTION
+
TRIM(val-string))
+
IF FUNCTION MOD(val-string-len, 2) = 0
+
+
COMPUTE val-string-start-idx =
+
(FUNCTION LENGTH(val-string) - val-string-len ) + 1
+
COMPUTE val-string-half = val-string-len / 2
+
+
IF val-string(val-string-start-idx:val-string-half)
+
= val-string(val-string-start-idx +
+
val-string-half:val-string-half)
+
+
ADD left-val TO result
+
END-IF
+
END-IF
+
END-PERFORM
+
+
END-PERFORM
+
+
END-READ
+
END-PERFORM.
+
CLOSE input-file.
+
DISPLAY result.
+
STOP-RUN.
+
+103
2025/day_02_part2.cbl
···
···
+
IDENTIFICATION DIVISION.
+
PROGRAM-ID. day_02_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 X(4096).
+
WORKING-STORAGE SECTION.
+
01 ptr PIC 9(4) Value 1.
+
01 len PIC 9(4).
+
01 left-val PIC 9(32).
+
01 right-val PIC 9(32).
+
01 grouping PIC X(65).
+
+
01 val-string PIC Z(32).
+
01 val-string-len PIC 9(2).
+
01 val-string-start-idx PIC 9(2).
+
01 val-string-half PIC 9(2).
+
01 val-window PIC 9(2) VALUE 1.
+
01 c-idx PIC 9(2).
+
01 s-left PIC Z(16).
+
01 s-right PIC Z(16).
+
01 no-match PIC X VALUE "N".
+
01 result PIC 9(32) VALUE ZEROS.
+
+
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
+
INSPECT input-line TALLYING len FOR CHARACTERS BEFORE
+
SPACE
+
+
PERFORM UNTIL ptr > len
+
UNSTRING input-line DELIMITED BY "," INTO grouping WITH
+
POINTER ptr
+
END-UNSTRING
+
+
UNSTRING grouping DELIMITED BY "-" INTO left-val,
+
right-val
+
END-UNSTRING
+
+
PERFORM VARYING left-val FROM left-val BY 1 UNTIL
+
left-val > right-val
+
MOVE left-val TO val-string
+
+
COMPUTE val-string-len = FUNCTION LENGTH(FUNCTION
+
TRIM(val-string))
+
+
COMPUTE val-string-start-idx =
+
(FUNCTION LENGTH(val-string) - val-string-len ) + 1
+
+
COMPUTE val-string-half = val-string-len / 2
+
+
PERFORM VARYING val-window FROM 1 BY 1
+
UNTIL val-window > val-string-half
+
COMPUTE c-idx = val-string-start-idx + val-window
+
MOVE "N" to no-match
+
PERFORM VARYING c-idx
+
FROM c-idx
+
BY val-window
+
UNTIL c-idx
+
> FUNCTION LENGTH(val-string)
+
+
MOVE val-string(val-string-start-idx:val-window)
+
TO s-left
+
+
IF (c-idx + val-window
+
> FUNCTION LENGTH(val-string))
+
MOVE val-string(c-idx:) TO s-right
+
ELSE
+
MOVE val-string(c-idx:val-window) TO s-right
+
END-IF
+
+
IF NOT s-left = s-right
+
MOVE "Y" to no-match
+
EXIT PERFORM
+
END-IF
+
END-PERFORM
+
IF no-match = "N"
+
ADD left-val to result
+
EXIT PERFORM
+
END-IF
+
END-PERFORM
+
END-PERFORM
+
END-PERFORM
+
+
END-READ
+
END-PERFORM.
+
CLOSE input-file.
+
DISPLAY result.
+
STOP-RUN.
+
+63
2025/day_03.cbl
···
···
+
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.
+
+64
2025/day_03_part2.cbl
···
···
+
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.
+
+5 -2
README.md
···
# Advent of Code Repo
This repository contains my solutions to the Advent of Code challenges.
-
I stream all my solutions live on Twitch at [twitch.tv/treybastian](https://twitch.tv/treybastian).
## 2024 - Fortran
You'll need GNUFortran to run these solutions.
-
On MacOS, you can install it with Homebrew with `brew install gcc`.
···
# Advent of Code Repo
This repository contains my solutions to the Advent of Code challenges.
+
## 2025 - COBOL
+
You'll need to install GNUCobol to run these solutions.
+
+
On MacOS you can install it with Homebrew: `brew install gnucobol`
## 2024 - Fortran
You'll need GNUFortran to run these solutions.
+
On MacOS, you can install it with Homebrew: `brew install gcc`.