forked from KolibriOS/kolibrios
58 lines
1.3 KiB
Plaintext
58 lines
1.3 KiB
Plaintext
|
(*
|
||
|
adapted to Oberon-07 by 0CodErr, KolibriOS team
|
||
|
*)
|
||
|
(*
|
||
|
There are 100 doors in a row that are all initially closed.
|
||
|
You make 100 passes by the doors.
|
||
|
The first time through, visit every door and toggle the door (if the door is closed, open it; if it is open, close it).
|
||
|
The second time, only visit every 2nd door (door #2, #4, #6, ...), and toggle it.
|
||
|
The third time, visit every 3rd door (door #3, #6, #9, ...), etc, until you only visit the 100th door.
|
||
|
What state are the doors in after the last pass? Which are open, which are closed?
|
||
|
*)
|
||
|
MODULE Doors;
|
||
|
|
||
|
IMPORT In, Out, Console;
|
||
|
|
||
|
|
||
|
CONST
|
||
|
CLOSED = FALSE;
|
||
|
OPEN = TRUE;
|
||
|
|
||
|
|
||
|
TYPE
|
||
|
List = ARRAY 101 OF BOOLEAN;
|
||
|
|
||
|
|
||
|
VAR
|
||
|
Doors: List;
|
||
|
I, J: INTEGER;
|
||
|
|
||
|
|
||
|
BEGIN
|
||
|
Console.open;
|
||
|
|
||
|
FOR I := 1 TO 100 DO
|
||
|
FOR J := 1 TO 100 DO
|
||
|
IF J MOD I = 0 THEN
|
||
|
IF Doors[J] = CLOSED THEN
|
||
|
Doors[J] := OPEN
|
||
|
ELSE
|
||
|
Doors[J] := CLOSED
|
||
|
END
|
||
|
END
|
||
|
END
|
||
|
END;
|
||
|
FOR I := 1 TO 100 DO
|
||
|
Out.Int(I, 3);
|
||
|
Out.String(" is ");
|
||
|
IF Doors[I] = CLOSED THEN
|
||
|
Out.String("Closed.")
|
||
|
ELSE
|
||
|
Out.String("Open.")
|
||
|
END;
|
||
|
Out.Ln
|
||
|
END;
|
||
|
In.Ln;
|
||
|
|
||
|
Console.exit(TRUE)
|
||
|
END Doors.
|