-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path61.hs
More file actions
44 lines (34 loc) · 1.02 KB
/
61.hs
File metadata and controls
44 lines (34 loc) · 1.02 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
import Control.Monad
import Data.List
import Common
limits = (1000,9999)
digPairs = [10..99]
figurate k n = ((k-2)*n*n + (4-k)*n) `div` 2
isInteger n = n == ((fi . floor) n)
isFigurate k n = isInteger v
where v = (-b + sqrt (b*b - 4*a*c))/(2 * a)
a,b,c :: Double
a = ((fi k)/2) - 1
b = 2 - ((fi k)/2)
c = fi (-n)
figsTo k = takeWhile (<= (snd limits)) $
dropWhile (< (fst limits)) $
map (figurate k) $ [1..]
test n = (filter (isFigurate n) [1000..9999]) == (figsTo n)
isFig k n = n `elem` (figsTo k)
mk d1 d2 = d1 * 100 + d2
cands [f1,f2,f3,f4,f5,f6] = do
d1 <- digPairs
d2 <- digPairs
guard $ isFigurate f1 $ mk d1 d2
d3 <- digPairs
guard $ isFigurate f2 $ mk d2 d3
d4 <- digPairs
guard $ isFigurate f3 $ mk d3 d4
d5 <- digPairs
guard $ isFigurate f4 $ mk d4 d5
d6 <- digPairs
guard $ isFigurate f5 $ mk d5 d6
guard $ isFigurate f6 $ mk d6 d1
return [d1,d2,d3,d4,d5,d6]
answer = map cands $ permutations [3..8]