Advertisement
Guest User

Untitled

a guest
Nov 22nd, 2014
134
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.28 KB | None | 0 0
  1. I made many off-by-one errors on the way to this proposed solution, but I think I have it.
  2.  
  3. Assign each knight a position number, starting with 1 and going counterclockwise.
  4.  
  5. At any given time, let N be the number of remaining knights. Let P be the lowest position of the remaining knights. For example, we might start with 13 knights. After the initial sit-down, before Arthur has dismissed anyone, the list of knights will look like this, where horizontal position indicates each knight's position number:
  6.  
  7. x x x x x x x x x x x x x (N = 13, P = 1)
  8.  
  9. We want to calculate in the general case what P will be when N reaches 1.
  10.  
  11. I'll use the N = 13 example, and transform the list in three iterations to arrive at N = 1.
  12.  
  13. For the first iteration, remove the even-numbered knights -- and ALSO remove the FIRST knight in the list. We know he will be removed when Arthur comes back around the circle, because N = 13 is odd, so we proactively throw him away. This gives us:
  14.  
  15. x x x x x x x x x x x x x (N = 13, P = 1)
  16. - - x - x - x - x - x - x (N = 6, P = 3)
  17.  
  18. For the second iteration, where N = 6 is even, remove the second, fourth, and sixth knights, but DON'T throw away the first knight. So:
  19.  
  20. x x x x x x x x x x x x x (N = 13, P = 1)
  21. - - x - x - x - x - x - x (N = 6, P = 3)
  22. - - x - - - x - - - x - - (N = 3, P = 3)
  23.  
  24. For the third iteration, because N is now odd again, throw away the second knight AND (proactively) the first knight:
  25.  
  26. x x x x x x x x x x x x x (N = 13, P = 1)
  27. - - x - x - x - x - x - x (N = 6, P = 3)
  28. - - x - - - x - - - x - - (N = 3, P = 3)
  29. - - - - - - - - - - x - - (N = 1, P = 11)
  30.  
  31. Note that with each iteration, the difference between consecutive positions doubles from 1 to 2 to 4 to 8. The above could be written as
  32.  
  33. x x x x x x x x x x x x x (N = 13, P = 1)
  34. - - x - x - x - x - x - x (N = 6, P = 1 + 2)
  35. - - x - - - x - - - x - - (N = 3, P = 1 + 2 + 0)
  36. - - - - - - - - - - x - - (N = 1, P = 1 + 2 + 0 + 8)
  37.  
  38. Therefore, when P changes (due to the lowest-numbered knight getting tossed), it increases by a power of 2.
  39.  
  40. With this observation, I propose the following algorithm:
  41.  
  42. start with N = # of knights, P = 1, i = 1 (P for position, i for iteration)
  43.  
  44. while (N > 1) {
  45. if N is odd
  46. N = (N - 1)/2, P = P + 2^i
  47. else
  48. N = N / 2
  49. i = i + 1
  50. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement