From b8038908764e7ff9c9f5449b0753a05f9fb1dcef Mon Sep 17 00:00:00 2001 From: Trey Bastian Date: Wed, 3 Dec 2025 12:10:51 +0000 Subject: day 2 2025 --- 2025/day_02_part2.cbl | 103 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 103 insertions(+) create mode 100644 2025/day_02_part2.cbl (limited to '2025/day_02_part2.cbl') 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. + -- cgit v1.2.3