Header Ads Widget

Responsive Advertisement

100 door puzzle program

The classic "100 Doors" puzzle, where you toggle doors between open and closed based on certain conditions. However, there are a few logic errors and areas of improvement. Let's go through the current code and then discuss how to improve it.

Current Code Summary:

  1. Toggling Logic: The way you're toggling doors is not clear, especially with k * (k + 2). It should follow a pattern where each door is toggled based on the number of passes. For example:

Ø  On the 1st pass, every door is toggled (i.e., all doors are opened).

Ø  On the 2nd pass, every 2nd door is toggled (i.e., doors 2, 4, 6, etc.).

Ø  On the 3rd pass, every 3rd door is toggled (i.e., doors 3, 6, 9, etc.).

Ø  This continues until the 100th pass.

  1. Number of Passes: You need to simulate toggling the doors for each "pass," not just 10 times as your loop currently does.
  2. Efficiency: The list of open doors is printed for each iteration, which is not necessary. You could instead toggle the doors and print the result at the end.

Code:

java

package com.kartik.puzzle.door;

 

import java.util.ArrayList;

import java.util.List;

 

public class Doors {

 

    public static void main(String[] args) {

        int numberOfDoors = 100;

        boolean[] doors = new boolean[numberOfDoors];

 

        // Simulating 100 passes

        for (int pass = 1; pass <= numberOfDoors; pass++) {

            for (int door = pass - 1; door < numberOfDoors; door += pass) {

                // Toggle the door state

                doors[door] = !doors[door];

            }

        }

 

        // List to hold open door information

        List<String> openDoorInfoList = new ArrayList<>();

 

        // Check which doors are open

        for (int i = 0; i < numberOfDoors; i++) {

            if (doors[i]) {

                String openDoorInfo = "Door #" + (i + 1) + " is open.";

                openDoorInfoList.add(openDoorInfo);

            }

        }

 

        // Print all open doors

        System.out.println("<---- Open Doors ---->");

        for (String openDoor : openDoorInfoList) {

            System.out.println(openDoor);

        }

    }

}

 

Explanation of Changes:

  1. Toggling Logic: The inner loop now correctly toggles the doors based on the current pass. For example, on the 1st pass, every door is toggled. On the 2nd pass, every 2nd door is toggled, and so on.

Ø  door += pass: This ensures that for each pass, only doors that are multiples of the pass number are toggled.

  1. Single Loop for Output: Instead of printing the open doors at every pass, the code now stores the information and prints it once, after all passes are completed.

Output:

The output will display the doors that are open after 100 passes. For the "100 Doors" puzzle, the doors that remain open are those whose door numbers are perfect squares (because they have an odd number of factors, leading them to be toggled an odd number of times).

<----Only open door--->
Door #1 isopen.
Door #4 isopen.
Door #9 isopen.
Door #16 isopen.
Door #25 isopen.
Door #36 isopen.
Door #49 isopen.
Door #64 isopen.
Door #81 isopen.
Door #100 isopen.

 

100 door puzzle  program
100 door puzzle  program



 

Post a Comment

0 Comments