Ene goede morgen
.
Ik wil de F# syntax beter onder de knie krijgen. Om wat te oefenen ben ik bezig met een zéér simpel AS3 algoritme over te typen naar F#. He gaat om dit AS3 script (de dfs en solve function). Dit is wat ik er van gemaakt heb:
De output is:
Dit is een te hoge waarde, het zou 209110240768 moeten zijn. Ik vermoed dat mijn probleem te maken heeft met een van de bitwise operaties maar na welgeteld 7 uren prutsen aan dit stukje code ben ik er nog niet achter. Wiskunde is één van mijne zwakke punten dus dat helpt ook niet echt
. Iemand die het probleem ziet?
Ik wil de F# syntax beter onder de knie krijgen. Om wat te oefenen ben ik bezig met een zéér simpel AS3 algoritme over te typen naar F#. He gaat om dit AS3 script (de dfs en solve function). Dit is wat ik er van gemaakt heb:
F#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| let S n = let limit = 1 <<< n let buffer = Array.create<int> limit 0 let current = ref 0u let acc = ref 0L let rec loop d u = if d = limit then int64(!current >>> (n - 1)) else for c in [0u; 1u] do let idx = (u <<< 1) ||| c if buffer.[int idx] = 0 then buffer.[int idx] <- 1 current := (!current <<< 1) ||| c acc := !acc + int64(loop (d + 1) (idx &&& (uint32(limit - 1) >>> 1))) current := !current >>> 1 buffer.[int idx] <- 0 !acc buffer.[0] <- 1; loop 1 0u printfn "Result: %i" (S 5) |
De output is:
code:
1
| Result: 7855368599302507774 |
Dit is een te hoge waarde, het zou 209110240768 moeten zijn. Ik vermoed dat mijn probleem te maken heeft met een van de bitwise operaties maar na welgeteld 7 uren prutsen aan dit stukje code ben ik er nog niet achter. Wiskunde is één van mijne zwakke punten dus dat helpt ook niet echt

[ Voor 0% gewijzigd door Hyperz op 06-04-2010 07:31 . Reden: typo ]
Asus P8P67 EVO | i5 2500k (4.8 GHz) | Sapphire HD 7970 Vapor-X GHz Ed. | 8 GB DDR3 1600 | 1 TB HDD