My yearly advent-of-code solutions
at main 2.0 kB view raw
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