data E
= Sevens
Int | E :
+: E
| E :
-: E
| E :
*: E
| E :
/: E
| Neg E
eval
(Sevens k
) = (iterate (\x
-> 14*x
+ 7) 0) !! k
eval (a :+: b) = (eval a) + (eval b)
eval (a :-: b) = (eval a) - (eval b)
eval (a :*: b) = (eval a) * (eval b)
eval (a :/: b) = (eval a) / (eval b)
eval (Neg a) = -(eval a)
showE pe = s pe
s pe (a:+:b) = helper pe 1 a b "+"
s pe (a:-:b) = helper pe 2 a b "-"
s pe (a:*:b) = helper pe 3 a b "*"
s pe (a:/:b) = helper pe 4 a b "/"
s pe (Neg a) = "-" ++ (s 2 a)
helper pe p a b op
| p > pe = (s p a) ++ op ++ (s p b)
| otherwise = "(" ++ (s p a
) ++ op
++ (s p b
) ++ ")"
anyE n
= let xs
= f n
in xs
++ map Neg xs
where f n = (Sevens n) : do
k <- [1..n-1]
a <- f k
b <- f (n-k)
op <- if k <= n-k then [ (:+:), (:-:), (:*:), (:/:) ]
else [ (:-:), (:/:) ]
where check e
= (abs ((eval e
) - 14*14)) < 1e
-7
ZGF0YSBFID0gU2V2ZW5zIEludCB8IEUgOis6IEUgfCBFIDotOiBFIHwgRSA6KjogRSB8IEUgOi86IEUgfCBOZWcgRQoKZXZhbCA6OiBFIC0+IERvdWJsZQpldmFsIChTZXZlbnMgaykgPSAoaXRlcmF0ZSAoXHggLT4gMTQqeCArIDcpIDApICEhIGsKZXZhbCAoYSA6KzogYikgID0gKGV2YWwgYSkgKyAoZXZhbCBiKQpldmFsIChhIDotOiBiKSAgPSAoZXZhbCBhKSAtIChldmFsIGIpCmV2YWwgKGEgOio6IGIpICA9IChldmFsIGEpICogKGV2YWwgYikKZXZhbCAoYSA6LzogYikgID0gKGV2YWwgYSkgLyAoZXZhbCBiKQpldmFsIChOZWcgYSkgICAgPSAtKGV2YWwgYSkKCnNob3dFIDo6IEludCAtPiBFIC0+IFN0cmluZwpzaG93RSBwZSA9IHMgcGUKICB3aGVyZSBzIHBlIChTZXZlbnMgaykgPSB0YWtlIGsgKHJlcGVhdCAnNycpCiAgICAgICAgcyBwZSAoYTorOmIpID0gaGVscGVyIHBlIDEgYSBiICIrIgogICAgICAgIHMgcGUgKGE6LTpiKSA9IGhlbHBlciBwZSAyIGEgYiAiLSIKICAgICAgICBzIHBlIChhOio6YikgPSBoZWxwZXIgcGUgMyBhIGIgIioiCiAgICAgICAgcyBwZSAoYTovOmIpID0gaGVscGVyIHBlIDQgYSBiICIvIgogICAgICAgIHMgcGUgKE5lZyBhKSA9ICItIiArKyAocyAyIGEpCiAgICAgICAgaGVscGVyIHBlIHAgYSBiIG9wCiAgICAgICAgICB8IHAgPiBwZSAgICA9IChzIHAgYSkgKysgb3AgKysgKHMgcCBiKQogICAgICAgICAgfCBvdGhlcndpc2UgPSAiKCIgKysgKHMgcCBhKSArKyBvcCArKyAocyBwIGIpICsrICIpIgoKaW5zdGFuY2UgU2hvdyBFIHdoZXJlCiAgc2hvdyA9IHNob3dFIDAKCmFueUUgOjogSW50IC0+IFtFXQphbnlFIG4gPSBsZXQgeHMgPSBmIG4gaW4geHMgKysgbWFwIE5lZyB4cwogIHdoZXJlIGYgbiA9IChTZXZlbnMgbikgOiBkbwogICAgICAgICAgICAgICAgayAgPC0gWzEuLm4tMV0KICAgICAgICAgICAgICAgIGEgIDwtIGYgawogICAgICAgICAgICAgICAgYiAgPC0gZiAobi1rKQogICAgICAgICAgICAgICAgb3AgPC0gaWYgayA8PSBuLWsgdGhlbiBbICg6KzopLCAoOi06KSwgKDoqOiksICg6LzopIF0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgWyAoOi06KSwgKDovOikgXQogICAgICAgICAgICAgICAgcmV0dXJuIChvcCBhIGIpCgptYWluID0gbWFwTV8gcHJpbnQgKGZpbHRlciBjaGVjayAoYW55RSA1KSkKICB3aGVyZSBjaGVjayBlID0gKGFicyAoKGV2YWwgZSkgLSAxNCoxNCkpIDwgMWUtNwo=