Department numbers: Difference between revisions
Content added Content deleted
m (→JS ES6: Tidied.) |
m (→JS ES6) |
||
Line 2,334: | Line 2,334: | ||
{{Trans|Haskell}} |
{{Trans|Haskell}} |
||
<lang JavaScript>(() => { |
<lang JavaScript>(() => { |
||
"use strict"; |
|||
// |
// -------------- NUMBERING CONSTRAINTS -------------- |
||
// options :: Int -> Int -> Int -> [(Int, Int, Int)] |
// options :: Int -> Int -> Int -> [(Int, Int, Int)] |
||
const options = |
const options = lo => hi => total => { |
||
const |
const |
||
bind = |
bind = xs => f => xs.flatMap(f), |
||
ds = enumFromTo(lo |
ds = enumFromTo(lo)(hi); |
||
return bind(filter(even |
return bind(ds.filter(even))( |
||
x => bind(filter(d => d !== x |
x => bind(ds.filter(d => d !== x))( |
||
y => bind([total - (x + y)] |
y => bind([total - (x + y)])( |
||
z => (z !== y && lo <= z && z <= hi) ? [ |
z => (z !== y && lo <= z && z <= hi) ? [ |
||
[x, y, z] |
[x, y, z] |
||
Line 2,352: | Line 2,352: | ||
) |
) |
||
) |
) |
||
) |
); |
||
}; |
}; |
||
// |
// ---------------------- TEST ----------------------- |
||
⚫ | |||
const |
|||
⚫ | |||
⚫ | |||
n = solutions.length, |
|||
list = solutions |
|||
.map(JSON.stringify) |
|||
⚫ | |||
return ( |
|||
// concatMap :: (a -> [b]) -> [a] -> [b] |
|||
⚫ | |||
const concatMap = (f, xs) => [].concat.apply([], xs.map(f)); |
|||
); |
|||
}; |
|||
⚫ | |||
// enumFromTo :: Int -> Int -> [Int] |
// enumFromTo :: Int -> Int -> [Int] |
||
const enumFromTo = |
const enumFromTo = m => |
||
Array.from({ |
n => Array.from({ |
||
length: |
length: 1 + n - m |
||
}, (_, i) => m + i); |
}, (_, i) => m + i); |
||
Line 2,369: | Line 2,381: | ||
const even = n => n % 2 === 0; |
const even = n => n % 2 === 0; |
||
// |
// MAIN --- |
||
return main(); |
|||
const filter = (f, xs) => xs.filter(f); |
|||
// flip :: (a -> b -> c) -> b -> a -> c |
|||
const flip = f => (a, b) => f.apply(null, [b, a]); |
|||
// length :: [a] -> Int |
|||
const length = xs => xs.length; |
|||
// map :: (a -> b) -> [a] -> [b] |
|||
⚫ | |||
// show :: a -> String |
|||
const show = x => JSON.stringify(x) //, null, 2); |
|||
// unlines :: [String] -> String |
|||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
unlines(map(show, xs)) + |
|||
⚫ | |||
})();</lang> |
})();</lang> |
||
{{Out}} |
{{Out}} |