100 doors: Difference between revisions
Content added Content deleted
Line 3,063: | Line 3,063: | ||
answerDoors initDoors |> printfn "%A" //print answer (false is closed door) |
answerDoors initDoors |> printfn "%A" //print answer (false is closed door) |
||
</lang> |
|||
'''Tail-Recursive Optimized/Functional''' |
|||
<lang fsharp> |
|||
let modifier doors skip = |
|||
let rec modifier' doors skip counter result = |
|||
match doors with |
|||
| [] -> result |> List.rev //base case: end of hall |
|||
| first::rest when counter >= skip -> //case: reached door marked for change |
|||
modifier' rest skip 0 ((not first)::result) // open or close that door |
|||
| first::rest -> //case: reached door to skip |
|||
modifier' rest skip (counter+1) (first::result) // skip it |
|||
modifier' doors skip 0 [] //Initial state for walkthrough |
|||
</lang> |
</lang> |
||
Following is the solution using perfect squares. The coercions in PerfectSquare are, I believe, slightly different in versions prior to 2010 beta and, again, #light is required in those versions. |
Following is the solution using perfect squares. The coercions in PerfectSquare are, I believe, slightly different in versions prior to 2010 beta and, again, #light is required in those versions. |