diff --git a/10/SOLUTION.CBL b/10/SOLUTION.CBL new file mode 100644 index 0000000..85c9cda --- /dev/null +++ b/10/SOLUTION.CBL @@ -0,0 +1,81 @@ + IDENTIFICATION DIVISION. + PROGRAM-ID. AOC22D10. + + ENVIRONMENT DIVISION. + INPUT-OUTPUT SECTION. + FILE-CONTROL. + SELECT INPUT-FILE ASSIGN TO 'input' + ORGANIZATION IS LINE SEQUENTIAL + ACCESS IS SEQUENTIAL. + + DATA DIVISION. + FILE SECTION. + FD INPUT-FILE. + 01 INPUT-RECORD PIC A(16). + + WORKING-STORAGE SECTION. + 01 INSTRUCTION. + 05 INS PIC A(5). + 05 VAL PIC S9(10). + 01 CLOCK PIC 9(10) VALUE 1 USAGE IS COMP. + 01 BUSY PIC 9(10) USAGE IS COMP. + 01 X PIC S9(10) VALUE 1 USAGE IS COMP. + 01 RESULT PIC 9(10) USAGE IS COMP. + 01 RESULT-F PIC Z(10). + + PROCEDURE DIVISION. + START-ROUTINE. + OPEN INPUT INPUT-FILE. + + DISPLAY 'Gold:'. + DISPLAY ' ' WITH NO ADVANCING. + + READ-ROUTINE. + MOVE SPACES TO INPUT-RECORD. + MOVE SPACES TO INSTRUCTION. + READ INPUT-FILE AT END GO TO END-ROUTINE. + UNSTRING INPUT-RECORD DELIMITED BY SPACE + INTO INS, VAL. + + IF INS = 'addx' THEN + SET BUSY TO 2 + ELSE + SET BUSY TO 1 + END-IF. + PERFORM EXECUTION UNTIL BUSY = 0 + + IF INS = 'addx' THEN + ADD VAL TO X. + + GO TO READ-ROUTINE. + + EXECUTION. + IF FUNCTION REM(CLOCK - 20, 40) = 0 THEN + COMPUTE RESULT = RESULT + CLOCK * X + END-IF. + + IF FUNCTION REM(CLOCK - 1, 40) IS + GREATER THAN OR EQUAL TO X - 1 AND + FUNCTION REM(CLOCK - 1, 40) IS + LESS THAN OR EQUAL TO X + 1 THEN + DISPLAY '#' WITH NO ADVANCING + ELSE + DISPLAY '.' WITH NO ADVANCING + END-IF. + + IF FUNCTION REM(CLOCK, 40) EQUALS 0 THEN + DISPLAY ' ' + DISPLAY ' ' WITH NO ADVANCING + END-IF. + + SUBTRACT 1 FROM BUSY. + ADD 1 TO CLOCK. + + END-ROUTINE. + CLOSE INPUT-FILE. + MOVE RESULT TO RESULT-F. + DISPLAY ' '. + DISPLAY 'Silver: 'RESULT-F. + STOP RUN. + + END PROGRAM AOC22D10. diff --git a/10/input b/10/input new file mode 100644 index 0000000..199e50a --- /dev/null +++ b/10/input @@ -0,0 +1,144 @@ +noop +addx 33 +addx -30 +noop +noop +addx 7 +addx 1 +noop +noop +addx 3 +addx 3 +addx 3 +addx -4 +addx 5 +addx 2 +noop +addx 7 +noop +addx 1 +addx 4 +noop +addx 1 +addx -38 +noop +addx 16 +addx -13 +addx 2 +addx 7 +noop +addx -2 +addx -10 +addx 17 +addx -5 +addx 10 +noop +addx -15 +addx 16 +addx 2 +noop +noop +addx 7 +addx 3 +addx -2 +addx 2 +addx 5 +addx -38 +addx 7 +addx -6 +addx 2 +noop +addx 7 +noop +addx 1 +addx 4 +noop +noop +noop +noop +noop +addx 3 +noop +addx 3 +addx 2 +noop +addx 7 +noop +addx -20 +addx 21 +addx 3 +addx 1 +addx -35 +addx 1 +addx 4 +noop +addx 31 +noop +addx -26 +addx 5 +noop +noop +addx -2 +addx 25 +addx -18 +addx -13 +addx 14 +addx 2 +noop +noop +noop +addx 6 +addx 1 +addx 5 +addx 3 +addx -2 +addx -38 +addx 24 +addx -17 +addx 5 +noop +noop +addx -2 +addx 31 +addx -24 +addx 7 +addx -10 +addx 6 +noop +addx 3 +addx 2 +noop +noop +addx 7 +addx -2 +addx -26 +addx 31 +addx 5 +addx -40 +addx 5 +addx 33 +addx -31 +noop +addx 1 +addx 4 +addx 1 +addx 4 +addx 20 +noop +noop +addx -14 +addx -1 +addx 5 +noop +noop +addx 1 +addx 2 +noop +noop +addx 7 +noop +noop +noop +noop +noop +noop