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.
|