I came across the following puzzle yesterday (edited for relevancy):
There is a bar with 25 seats in a line. People are social-distancing so when they walk into the bar, they always try to find a seat farthest away from others. To comply with government restrictions, no two people can sit next to each other. If a person walks in and there are no available seats, they will leave. Where should the owner tell his first customer to sit in order to maximize the number of people in the bar?
In order to solve this problem, we can utilize some wishful thinking. The best-case scenario is when every person is seated exactly two away from everyone else:
1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25.
How can we produce such a sequence? Well, if we had every fourth person, then the other people can sit in-between them (while still maintaining a distance of 2):
1, 5, 9, 13, 17, 21, 25.
To obtain this configuration, we take every eighth person, so the remaining people can sit a distance of four away from everyone else:
1, 9, 17, 25.
Finally, to obtain this configuration, we either need to put the first person on seat 9 or 17. We used backtracking in order to determine the best starting seat.
For a visual solution, I created a MatLab program that would test out each starting location of the first customer and then generates how the other customers would fill out the bar. For the original puzzle, this creates the following graph:
The y-axis is the location of the first customer seated, while the x-axis shows the seating configuration according to the bars’ rules. The starred values indicate the optimal configuration, which occurs exactly when the first person is seated at 9. The relative size of each Polkadot is the order the customer is seated in the configuration, which is why the line has the largest dots.
In this case, we were able to seat people effectively. Can we always obtain this bound for a bar with seats?
Unfortunately, the answer is no, but this isn’t obvious to see. Plotting the number of seats against the maximum number of people seated gives the following graph:
The stars indicate when the maximum number of people seated equals . It’s interesting to note the outliers here are when .
Let’s take one of these specific values and see what goes wrong in our backtracking approach. For , the best possible scenario would be:
1, 3, 5, 7, 9, 11, 13, 15.
In order to obtain this, we take every fourth person as we did before:
1, 5, 9, 13.
To obtain this, we suspect we should seat the first customer at 9. However, plotting this shows this generates a different graph:
The sequence starting at 9 is 1, 3, 5, 7, 9, 12, 15. Why did we skip over 13? This is because our backtracking approach didn’t account for the selection mechanism.
Starting with 9, the second person selected will sit at 1. After this, the next person will sit at 15, then 5 to create the current configuration: 1, 5, 9, 15. The next person entering the bar will want to sit as far away from the other people as possible. Scanning all the seats, they’ll choose seat 12 since it’s 3 away from both 9 and 15. Therefore, 15 is a suboptimal starting value.
We noticed every value before this was optimal, which leads us to wonder if we can characterize all of the values of that give an optimal configuration.
Expanding the search up to gives the following values that are optimal:
n=1 2 3 4 5 6 7 8 9 10 11 12 13 14 16 17 18 19 20 21 22 24 25 26 32 33 34 35 36 37 38 40 41 42 48 49 50 64 65 66 67 68 69 70 72 73 74 80 81 82 96 97 98.
I found that every number in the list above is of one of the forms
where and are non-negative integers. This leads me to conjecture that these forms contain all the initial values of that produce an optimal configuration, however, this may be a case of The Strong Law of Small Numbers at work.
If how closely everyone is seated together makes you a bit uneasy in the graphs, we can expand the gap between people. For a fixed number of people in the bar, , we vary the gap size, to produce the following seating configurations:
The starred values indicate the best seat configuration. Compare these with the graph of gap size 2 earlier. Notice the best first seat varies between 1 and 9.
We can now plot the number of people seated compared to gap size:
A value is starred if the maximum number of people seated equals . In this case, not only is length 25 optimal for a gap size of 2, but it’s optimal for every gap!
We wonder when this pattern will remain. Of the values of n above that were found to be optimal for a gap size of 2, the following are optimal for every gap size:
n=1 2 3 4 5 6 7 8 9 10 11 12 13 14 16 17 18 19 20 21 24 25 26 32 33 48 49.
An example of a value of n which gives suboptimal gap sizes is n=68:
The gap sizes of 3, 6, 7, and 9 are all suboptimal. This is the same for n=69 and 70. Similarly, for n=80, 81, and 82, we have suboptimal gap sizes of 3, 6, 7, and 11.
Since the gap size of 3 seems to produce suboptimal behaviour for several values, we plot the number of seats compared to the maximum number of seats for :
The starred values indicate when the max number of people seated equals . We see the initial part is a step function in threes, similar to .
There is also a long valley around n=70 and n=80, as predicted above.
The full list of values of that are optimal for are given below:
n=1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 24 25 26 27 28 29 30 31 32 33 36 37 38 39 48 49 50 51 52 53 54 55 56 57 60 61 62 63 72 73 74 75 96 97 98 99 100.
A few closing thoughts to the reader:
- Can we characterize the values of above similar to what we did for ?
- Are any of these sequences on the Online Encyclopedia of Integer Sequences?
- Has a full mathematical analysis been conducted? I’ve seen the XKCD Urinal Protocol Vulnerability, but this assumes the first person sits on the end.
- Stay safe, and continue to practice social distancing everywhere you go!