84 lines
2.3 KiB
COBOL
84 lines
2.3 KiB
COBOL
|
identification division.
|
||
|
program-id. day06.
|
||
|
|
||
|
data division.
|
||
|
working-storage section.
|
||
|
01 input-line pic x(100).
|
||
|
|
||
|
01 action pic x(10).
|
||
|
01 coords pic x(100).
|
||
|
01 start-coords pic x(100).
|
||
|
01 end-coords pic x(100).
|
||
|
|
||
|
01 start-x pic 9(10).
|
||
|
01 end-x pic 9(10).
|
||
|
01 start-y pic 9(10).
|
||
|
01 end-y pic 9(10).
|
||
|
|
||
|
01 x pic 9(10).
|
||
|
01 y pic 9(10).
|
||
|
|
||
|
01 temp pic 9.
|
||
|
01 matrix-table.
|
||
|
05 occurs 1000 times.
|
||
|
10 occurs 1000 times.
|
||
|
15 matrix pic 9 value 0.
|
||
|
|
||
|
procedure division.
|
||
|
accept input-line.
|
||
|
perform input-loop-para until input-line = SPACE.
|
||
|
|
||
|
* Count the lit lights
|
||
|
move 0 to x.
|
||
|
inspect matrix-table tallying x for all '1'.
|
||
|
display x.
|
||
|
|
||
|
stop run.
|
||
|
|
||
|
input-loop-para.
|
||
|
display input-line.
|
||
|
|
||
|
if input-line(1:7) = "turn on" then
|
||
|
move "turn on" to action
|
||
|
move input-line(9:) to coords
|
||
|
end-if.
|
||
|
if input-line(1:8) = "turn off" then
|
||
|
move "turn off" to action
|
||
|
move input-line(10:) to coords
|
||
|
end-if.
|
||
|
if input-line(1:7) = "toggle" then
|
||
|
move "toggle" to action
|
||
|
move input-line(8:) to coords
|
||
|
end-if.
|
||
|
|
||
|
unstring coords delimited by " through "
|
||
|
into start-coords, end-coords.
|
||
|
|
||
|
unstring start-coords delimited by "," into start-x, start-y
|
||
|
unstring end-coords delimited by "," into end-x, end-y
|
||
|
|
||
|
move start-y to y.
|
||
|
perform outer-loop-para until y > end-y.
|
||
|
|
||
|
accept input-line.
|
||
|
|
||
|
outer-loop-para.
|
||
|
move start-x to x.
|
||
|
perform inner-loop-para until x > end-x.
|
||
|
add 1 to y.
|
||
|
|
||
|
inner-loop-para.
|
||
|
if action = "turn on" then
|
||
|
move 1 to matrix(y + 1, x + 1).
|
||
|
|
||
|
if action = "turn off" then
|
||
|
move 0 to matrix(y + 1, x + 1).
|
||
|
|
||
|
if action = "toggle" then
|
||
|
move 1 to temp
|
||
|
subtract matrix(y + 1, x + 1) from temp
|
||
|
move temp to matrix(y + 1, x + 1)
|
||
|
end-if.
|
||
|
|
||
|
add 1 to x.
|