forked from KolibriOS/kolibrios
2f54c7de00
git-svn-id: svn://kolibrios.org@8097 a494cfbc-eb01-0410-851d-a64ba20cac60
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. |