My yearly advent-of-code solutions
1 IDENTIFICATION DIVISION.
2 PROGRAM-ID. day_01_part2.
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.
13 02 direction PIC X.
14 02 move-text PIC XXX.
15 WORKING-STORAGE SECTION.
16 01 dial-position PIC 9(2) VALUE 50.
17 01 new-position PIC 9(2).
18 01 move-num PIC S9(3).
19 01 zero-count PIC 9(4) VALUE ZEROS.
20 01 eof PIC X.
21 88 eof-y VALUE "Y".
22 88 eof-n VALUE "N".
23
24
25 PROCEDURE DIVISION.
26 OPEN INPUT input-file.
27 SET eof-n to TRUE.
28 PERFORM UNTIL eof-y
29 READ input-file AT END
30 SET eof-y to TRUE
31 NOT AT END
32 MOVE FUNCTION NUMVAL(move-text) TO move-num
33 IF move-num > 99
34 COMPUTE zero-count = zero-count + (move-num / 100)
35 END-IF
36
37 IF direction = "L"
38 COMPUTE move-num = 0 - move-num
39 END-IF
40
41 COMPUTE new-position = FUNCTION MOD(dial-position +
42 move-num, 100)
43
44 if new-position < 0
45 ADD 100 to new-position
46 END-IF
47
48 EVALUATE new-position
49 WHEN 0
50 ADD 1 to zero-count
51 WHEN < dial-position AND direction = "R" AND
52 dial-position <> 0
53 ADD 1 to zero-count
54 WHEN > dial-position AND direction = "L" AND
55 dial-position <> 0
56 ADD 1 to zero-count
57 END-EVALUATE
58
59
60 MOVE new-position TO dial-position
61
62 END-READ
63 END-PERFORM.
64 CLOSE input-file.
65 DISPLAY zero-count.
66 STOP-RUN.
67