IDENTIFICATION DIVISION.
PROGRAM-ID. AOC-2020-03-2.
AUTHOR. ANNA KOSIERADZKA.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT INPUTFILE ASSIGN TO "d3.input"
ORGANIZATION IS LINE SEQUENTIAL.
DATA DIVISION.
FILE SECTION.
FD INPUTFILE.
01 INPUTRECORD PIC X(31).
WORKING-STORAGE SECTION.
01 FILE-STATUS PIC 9 VALUE 0.
01 WS-ARR-LEN PIC 9(3) VALUE 323.
01 WS-ARRAY PIC X(31) OCCURS 1 to 500 DEPENDING ON WS-ARR-LEN.
01 WS-TREES-PRODUCT PIC 9(20) VALUE 1.
LOCAL-STORAGE SECTION.
01 TREES UNSIGNED-INT VALUE 0.
01 X UNSIGNED-INT VALUE 1.
01 Y UNSIGNED-INT VALUE 1.
01 DELTA-X UNSIGNED-INT VALUE 1.
01 DELTA-Y UNSIGNED-INT VALUE 1.
01 MAP-WIDTH UNSIGNED-INT VALUE 31.
PROCEDURE DIVISION.
001-MAIN.
OPEN INPUT INPUTFILE.
PERFORM 002-READ UNTIL FILE-STATUS = 1.
CLOSE INPUTFILE.
PERFORM 004-PROCESS-DELTAS.
DISPLAY WS-TREES-PRODUCT.
STOP RUN.
002-READ.
READ INPUTFILE
AT END MOVE 1 TO FILE-STATUS
NOT AT END PERFORM 003-WRITE-TO-ARRAY
END-READ.
003-WRITE-TO-ARRAY.
MOVE INPUTRECORD TO WS-ARRAY(X)
ADD 1 to X.
004-PROCESS-DELTAS.
PERFORM 005-PROCESS-DELTAS-PAIR.
MOVE 3 TO DELTA-Y.
PERFORM 005-PROCESS-DELTAS-PAIR.
MOVE 5 TO DELTA-Y.
PERFORM 005-PROCESS-DELTAS-PAIR.
MOVE 7 TO DELTA-Y.
PERFORM 005-PROCESS-DELTAS-PAIR.
MOVE 2 TO DELTA-X.
MOVE 1 TO DELTA-Y.
PERFORM 005-PROCESS-DELTAS-PAIR.
005-PROCESS-DELTAS-PAIR.
MOVE 1 TO X.
MOVE 1 TO Y.
MOVE 0 TO TREES.
PERFORM 006-LOOP UNTIL X >= WS-ARR-LEN.
COMPUTE WS-TREES-PRODUCT = WS-TREES-PRODUCT * TREES.
006-LOOP.
ADD DELTA-X TO X.
ADD DELTA-Y TO Y.
COMPUTE Y = FUNCTION MOD(Y, MAP-WIDTH).
IF Y = 0 THEN
MOVE MAP-WIDTH TO Y
END-IF.
IF WS-ARRAY(X)(Y:1) = '#' THEN
ADD 1 TO TREES
END-IF.
For further actions, you may consider blocking this person and/or reporting abuse
We're a place where coders share, stay up-to-date and grow their careers.
Still going strong with COBOL