diff options
| author | Trey Bastian <hello@treybastian.com> | 2025-12-03 12:10:51 +0000 |
|---|---|---|
| committer | Trey Bastian <hello@treybastian.com> | 2025-12-03 12:10:51 +0000 |
| commit | b8038908764e7ff9c9f5449b0753a05f9fb1dcef (patch) | |
| tree | 621185ae9d183995956bec45292cbdc7bca0909c /2025/day_02_part2.cbl | |
| parent | 8bedb78899f872f151f2f36dbd97f3194acb64ec (diff) | |
day 2 2025
Diffstat (limited to '2025/day_02_part2.cbl')
| -rw-r--r-- | 2025/day_02_part2.cbl | 103 |
1 files changed, 103 insertions, 0 deletions
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. + |
