| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- (*
- 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.
|