Jump to content

100 doors: Difference between revisions

Line 3,063:
 
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>
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.
Anonymous user
Cookies help us deliver our services. By using our services, you agree to our use of cookies.