Created
February 16, 2020 11:49
-
-
Save ar1a/ea7524e5c5e715615f9026cee802d401 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
"use strict"; | |
const values = { | |
woodFoundation: { | |
logs: 1, | |
planks: 6, | |
nails: 20 | |
}, | |
woodWall: { | |
logs: 1, | |
planks: 15, | |
nails: 36 | |
}, | |
woodHalfWall: { | |
logs: 1, | |
planks: 8, | |
nails: 18 | |
}, | |
woodWindow: { | |
logs: 1, | |
planks: 20, | |
nails: 46 | |
}, | |
woodDoor: { | |
logs: 1, | |
planks: 15, | |
nails: 36 | |
}, | |
woodRoof: { | |
logs: 2, | |
planks: 15, | |
nails: 20 | |
}, | |
woodFloor: { | |
logs: 1, | |
planks: 15, | |
nails: 20 | |
}, | |
woodFloorHatch: { | |
logs: 3, | |
planks: 23, | |
nails: 30 | |
}, | |
woodStairs: { | |
logs: 2, | |
planks: 10, | |
nails: 10 | |
}, | |
woodRamp: { | |
logs: 2, | |
planks: 10, | |
nails: 10 | |
}, | |
woodRampWide: { | |
logs: 2, | |
planks: 15, | |
nails: 15 | |
}, | |
woodGate: { | |
logs: 1, | |
planks: 15, | |
nails: 32 | |
}, | |
metalFoundation: { | |
stones: 8, | |
mortar: 2 | |
}, | |
metalWall: { | |
logs: 1, | |
planks: 5, | |
nails: 40, | |
metal: 6 | |
}, | |
metalHalfWall: { | |
logs: 1, | |
planks: 3, | |
nails: 24, | |
metal: 3 | |
}, | |
metalWindow: { | |
logs: 1, | |
planks: 5, | |
nails: 52, | |
metal: 8 | |
}, | |
metalDoor: { | |
logs: 1, | |
planks: 5, | |
nails: 52, | |
metal: 8 | |
}, | |
metalRoof: { | |
logs: 2, | |
planks: 5, | |
nails: 20, | |
metal: 5 | |
}, | |
metalFloor: { | |
logs: 2, | |
planks: 5, | |
nails: 20, | |
metal: 2 | |
}, | |
metalGate: { | |
logs: 1, | |
planks: 5, | |
nails: 46, | |
metal: 6 | |
}, | |
brickFoundation: { | |
bricks: 5, | |
mortar: 4 | |
}, | |
brickWall: { | |
logs: 1, | |
planks: 5, | |
nails: 36, | |
metal: 10, | |
bricks: 4, | |
mortar: 1 | |
}, | |
brickHalfWall: { | |
logs: 1, | |
planks: 3, | |
nails: 8, | |
bricks: 2, | |
mortar: 1 | |
}, | |
brickWindow: { | |
logs: 1, | |
planks: 5, | |
nails: 56, | |
metal: 9, | |
bricks: 3, | |
mortar: 1 | |
}, | |
brickDoor: { | |
logs: 1, | |
planks: 5, | |
nails: 36, | |
metal: 5, | |
bricks: 3, | |
mortar: 1 | |
}, | |
brickRoof: { | |
logs: 2, | |
planks: 5, | |
nails: 15, | |
bricks: 2, | |
mortar: 1 | |
}, | |
brickFloor: { | |
logs: 2, | |
planks: 5, | |
nails: 16, | |
bricks: 2, | |
mortar: 1 | |
}, | |
brickFloorHatch: { | |
logs: 2, | |
planks: 5, | |
nails: 40, | |
metal: 5, | |
bricks: 6, | |
mortar: 3 | |
}, | |
brickStairs: { | |
bricks: 5, | |
mortar: 2 | |
}, | |
brickGate: { | |
metal: 10, | |
bricks: 6, | |
mortar: 3 | |
} | |
}; | |
const PLANKS_PER_LOG = 4; | |
const planksToLogs = totalPlanks => Math.ceil(totalPlanks / PLANKS_PER_LOG); | |
const valueMul = (obj, mul) => _.mapValues(obj, v => v * mul); | |
const sumObjectValues = x => _.sum(_.values(x)); | |
const convertedInputs = _.mapValues(inputs, (value, key) => | |
valueMul(values[key], value) | |
); | |
const logs = sumObjectValues( | |
_.mapValues(convertedInputs, x => planksToLogs(x.planks) + x.logs) | |
); | |
const planks = sumObjectValues(_.mapValues(convertedInputs, "planks")); | |
const nails = sumObjectValues(_.mapValues(convertedInputs, "nails")); | |
const metal = sumObjectValues(_.mapValues(convertedInputs, "metal")); | |
const stones = sumObjectValues(_.mapValues(convertedInputs, "stones")); | |
const mortar = sumObjectValues(_.mapValues(convertedInputs, "mortar")); | |
const bricks = sumObjectValues(_.mapValues(convertedInputs, "bricks")); | |
return { | |
logsRequired: logs, | |
planksRequired: planks, | |
nailsRequired: nails, | |
solidLogsRequired: Math.ceil(planks / 4), | |
metalRequired: metal, | |
stonesRequired: stones, | |
mortarRequired: mortar, | |
brickPilesRequired: bricks | |
}; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
https://jscalc.io/calc/XBIPsGtX8LI53wOn