const log = [
{ type: 'b', result: 0 },
{ type: 'b', result: 0 },
{ type: 'b', result: 0 },
{ type: 'b', result: 0 },
{ type: 'b', result: 0 },
{ type: 'v', result: 0 },
{ type: 'v', result: 0 },
{ type: 'v', result: 1 },
{ type: 'v', result: 0 },
{ type: 'p', result: 100 },
{ type: 'p', result: 20 },
{ type: 'p', result: 0 },
{ type: 'p', result: 0 },
{ type: 'f', result: 0 },
{ type: 'f', result: 0 },
{ type: 'f', result: 0 },
{ type: 'f', result: 0 },
]
function evaluate (log) {
const basic = log.filter(log => log.type === 'b')
.reduce((acc, item) => item.result > acc ? item.result : acc, 0)
const variable = log.filter(log => log.type === 'v')
.reduce((acc, item) => item.result < acc ? item.result : acc, 1)
const points = log.filter(log => log.type === 'p')
.reduce((acc, item) => item.result > acc ? item.result : acc, 0)
const fraud = log.filter(log => log.type === 'f')
.reduce((acc, item) => item.result > acc ? item.result : acc, 0)
if (basic !== 0) {
return basic
}
if (fraud !== 0) {
return fraud
}
if (variable === 0) {
return variable
}
return points
}
function evaluate2 (log) {
let basic = log.filter(log => log.type === 'b').map(o => o.result)
let variable = log.filter(log => log.type === 'v').map(o => o.result)
let points = log.filter(log => log.type === 'p').map(o => o.result)
let fraud = log.filter(log => log.type === 'f').map(o => o.result)
const allMustBeOk = arr => arr.reduce(
(acc, item) => item > acc ? item : acc, 0
)
const oneMustBeOk = arr => arr.reduce(
(acc, item) => item < acc ? item : acc, 1
)
const mustSumTo120 = arr => 120 < arr.reduce(
(acc, item) => acc + item
)
variable = [
...variable,
mustAddUp(points)
]
const overall = [
allMustBeOk(basic),
oneMustBeOk(variable),
allMustBeOk(fraud)
]
return allMustBeOk(overall)
}