My yearly advent-of-code solutions
at main 2.4 kB view raw
1 IDENTIFICATION DIVISION. 2 PROGRAM-ID. day_02. 3 AUTHOR. Trey Bastian. 4 ENVIRONMENT DIVISION. 5 INPUT-OUTPUT SECTION. 6 FILE-CONTROL. 7 SELECT input-file ASSIGN TO "./input.txt" 8 ORGANIZATION IS LINE SEQUENTIAL. 9 DATA DIVISION. 10 FILE SECTION. 11 FD input-file. 12 01 input-line PIC X(4096). 13 WORKING-STORAGE SECTION. 14 01 ptr PIC 9(4) Value 1. 15 01 len PIC 9(4). 16 01 left-val PIC 9(32). 17 01 right-val PIC 9(32). 18 01 grouping PIC X(65). 19 20 01 val-string PIC Z(32). 21 01 val-string-len PIC 9(2). 22 01 val-string-start-idx PIC 9(2). 23 01 val-string-half PIC 9(2). 24 01 result PIC 9(32) VALUE ZEROS. 25 26 01 eof PIC X. 27 88 eof-y VALUE "Y". 28 88 eof-n VALUE "N". 29 PROCEDURE DIVISION. 30 OPEN INPUT input-file. 31 SET eof-n to TRUE. 32 PERFORM UNTIL eof-y 33 READ input-file AT END 34 SET eof-y to TRUE 35 NOT AT END 36 INSPECT input-line TALLYING len FOR CHARACTERS BEFORE 37 SPACE 38 39 PERFORM UNTIL ptr > len 40 UNSTRING input-line DELIMITED BY "," INTO grouping WITH 41 POINTER ptr 42 END-UNSTRING 43 44 UNSTRING grouping DELIMITED BY "-" INTO left-val, 45 right-val 46 END-UNSTRING 47 48 PERFORM VARYING left-val FROM left-val BY 1 UNTIL 49 left-val > right-val 50 MOVE left-val TO val-string 51 52 COMPUTE val-string-len = FUNCTION LENGTH(FUNCTION 53 TRIM(val-string)) 54 IF FUNCTION MOD(val-string-len, 2) = 0 55 56 COMPUTE val-string-start-idx = 57 (FUNCTION LENGTH(val-string) - val-string-len ) + 1 58 COMPUTE val-string-half = val-string-len / 2 59 60 IF val-string(val-string-start-idx:val-string-half) 61 = val-string(val-string-start-idx + 62 val-string-half:val-string-half) 63 64 ADD left-val TO result 65 END-IF 66 END-IF 67 END-PERFORM 68 69 END-PERFORM 70 71 END-READ 72 END-PERFORM. 73 CLOSE input-file. 74 DISPLAY result. 75 STOP-RUN. 76