aboutsummaryrefslogtreecommitdiff
path: root/2025/day_02.cbl
blob: 1225b4150470f5d62f9c0388feb9ca49a7b05110 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
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.