My yearly advent-of-code solutions
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