Skip to content

Instantly share code, notes, and snippets.

@ar1a
Created February 16, 2020 11:49
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ar1a/ea7524e5c5e715615f9026cee802d401 to your computer and use it in GitHub Desktop.
Save ar1a/ea7524e5c5e715615f9026cee802d401 to your computer and use it in GitHub Desktop.
"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
};
@ar1a
Copy link
Author

ar1a commented Feb 16, 2020

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment