Sum and product puzzle: Difference between revisions
→JS ES6: Updated primitives, tidied.
(→JS ES6: Updated primitives, tidied.) |
|||
Line 1,364:
{{Trans|Haskell}}
<lang JavaScript>(() => {
const main = () => {
const
// xs :: [Int]
xs = enumFromTo(1
// s1 s2, s3, s4 :: [(Int, Int)]
s1 =
p => all(q => 1 < length(mulEq(q, s1)), sumEq(p, s1)),▼
s1▼
),
p =>
)
s3 = s2.filter(
p => 1 === intersectBy(pairEQ)(
);
return s3.filter(
p => 1 ===
)(s3).length
);
};
//
// add, mul :: (Int, Int) -> Int
Line 1,403 ⟶ 1,405:
mul = xy => xy[0] * xy[1],
// sumEq, mulEq :: (Int, Int) ->
// [(Int, Int)] -> [(Int, Int)]
sumEq = (p, s) => {
const addP = add(p);
return s.filter(q => add(q) === addP
},
mulEq = (p, s) => {
const mulP = mul(p);
return s.filter(q => mul(q) === mulP
},
// pairEQ :: ((a, a) -> (a, a)) -> Bool
pairEQ =
//
// enumFromTo :: Int -> Int -> [Int]
const enumFromTo =
n => Array.from({
length: 1 + n - m
}, (_, i) => m + i);
▲ const filter = (f, xs) => xs.filter(f);
// intersectBy :: (a -> a -> Bool) -> [a] -> [a] -> [a]
const intersectBy =
xs => ys => xs.filter(
x => ys.some(eqFn(x))
▲ // length :: [a] -> Int
▲ xs.length
▲ ) : Infinity;
// MAIN ---
Line 1,460 ⟶ 1,446:
{{Out}}
<lang JavaScript>[[4, 13]]</lang>
=={{header|jq}}==
|