100 doors: Difference between revisions
Content added Content deleted
(New page: {{task}} Problem: You have 100 doors in a row that are all initially closed. You make 100 passes by the doors, starting with the first door every time. The first time through, you visit e...) |
No edit summary |
||
Line 4: | Line 4: | ||
Question: What state are the doors in after the last pass? Which are open, which are closed? [http://www.techinterview.org/Puzzles/fog0000000079.html] |
Question: What state are the doors in after the last pass? Which are open, which are closed? [http://www.techinterview.org/Puzzles/fog0000000079.html] |
||
=={{header|Ada}}== |
|||
with Ada.Text_Io; use Ada.Text_Io; |
|||
procedure Doors is |
|||
type Door_State is (Closed, Open); |
|||
type Door_List is array(Positive range 1..100) of Door_State; |
|||
The_Doors : Door_List := (others => Closed); |
|||
begin |
|||
for I in 1..100 loop |
|||
for J in The_Doors'range loop |
|||
if J mod I = 0 then |
|||
if The_Doors(J) = Closed then |
|||
The_Doors(J) := Open; |
|||
else |
|||
The_Doors(J) := Closed; |
|||
end if; |
|||
end if; |
|||
end loop; |
|||
end loop; |
|||
for I in The_Doors'range loop |
|||
Put_Line(Integer'Image(I) & " is " & Door_State'Image(The_Doors(I))); |
|||
end loop; |
|||
end Doors; |
|||
=={{header|Perl}}== |
=={{header|Perl}}== |
Revision as of 04:26, 7 October 2007
100 doors
You are encouraged to solve this task according to the task description, using any language you may know.
You are encouraged to solve this task according to the task description, using any language you may know.
Problem: You have 100 doors in a row that are all initially closed. You make 100 passes by the doors, starting with the first door every time. The first time through, you visit every door and toggle the door (if the door is closed, you open it; if it is open, you close it). The second time you only visit every 2nd door (door #2, #4, #6, …). The third time, every 3rd door (door #3, #6, #9, …), etc, until you only visit the 100th door.
Question: What state are the doors in after the last pass? Which are open, which are closed? [1]
Ada
with Ada.Text_Io; use Ada.Text_Io; procedure Doors is type Door_State is (Closed, Open); type Door_List is array(Positive range 1..100) of Door_State; The_Doors : Door_List := (others => Closed); begin for I in 1..100 loop for J in The_Doors'range loop if J mod I = 0 then if The_Doors(J) = Closed then The_Doors(J) := Open; else The_Doors(J) := Closed; end if; end if; end loop; end loop; for I in The_Doors'range loop Put_Line(Integer'Image(I) & " is " & Door_State'Image(The_Doors(I))); end loop; end Doors;
Perl
my @doors; for my $pass (1..100) { for (1..100) { if (0 == $_ % $pass) { if (1 == $doors[$_]) { $doors[$_] = 0; } else { $doors[$_] = 1; }; }; }; }; print "$_\t$doors[$_]\n" for 1..100;