aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--2025/day_02.cbl76
-rw-r--r--2025/day_02_part2.cbl103
2 files changed, 179 insertions, 0 deletions
diff --git a/2025/day_02.cbl b/2025/day_02.cbl
new file mode 100644
index 0000000..1225b41
--- /dev/null
+++ b/2025/day_02.cbl
@@ -0,0 +1,76 @@
+ 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.
+
diff --git a/2025/day_02_part2.cbl b/2025/day_02_part2.cbl
new file mode 100644
index 0000000..46d0c8d
--- /dev/null
+++ b/2025/day_02_part2.cbl
@@ -0,0 +1,103 @@
+ 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.
+