Skip to content

Instantly share code, notes, and snippets.

@frenchbread
Last active December 9, 2017 13:48
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 frenchbread/6c9a292edd3d4e2d19ae439aa1eaa536 to your computer and use it in GitHub Desktop.
Save frenchbread/6c9a292edd3d4e2d19ae439aa1eaa536 to your computer and use it in GitHub Desktop.
const _ = require('lodash')
const components = {
blaster: {
tasks: [
{ name: 'ystanovka_lazera_blastera_v_korpus', worker: 'shturmoviki' },
{ name: 'polirovka_rukoyati_blastera', worker: 'sborshiki' },
{ name: 'zaryad_batarey_blastera', worker: 'akkumulyatori' },
{ name: 'pristrelka', worker: 'shturmoviki' }
],
components: [
{
name: 'body',
amount: 1,
tasks: [
{ name: 'sborka_korpusa_blastera', worker: 'sborshiki' }
]
},
{
name: 'lazer',
amount: 1,
tasks: [
{ name: 'ogranka_rubina', worker: 'robot_optik' },
{ name: 'izgotovlenie_systemi_zerkal', worker: 'robot_optik' },
{ name: 'sborka_lazera', worker: 'sborshiki' }
]
}
]
}
}
const workers = {
// Штурмовики
shturmoviki: {
pristrelka: {
hours: 1,
cost: 150
},
ystanovka_lazera_blastera_v_korpus: {
hours: 2,
cost: 25
}
},
// Сборщики
sborshiki: {
sborka_korpusa_blastera: {
hours: 1,
cost: 40
},
polirovka_rukoyati_blastera: {
hours: 1,
cost: 20
},
sborka_lazera: {
hours: 4,
cost: 40
}
},
// Робот оптик
robot_optik: {
ogranka_rubina: {
hours: 5,
cost: 50
},
izgotovlenie_systemi_zerkal: {
hours: 10,
cost: 120
}
},
// Аккумуляторы
akkumulyatori: {
zaryad_batarey_blastera: {
hours: 3,
cost: 40
}
}
}
const funcs = {
countForTasks (tasks) {
let hoursForComponent = 0
let costForComponent = 0
_.forEach(tasks, task => {
console.log(`- ${task.name}: ${workers[task.worker][task.name].hours}h, ${workers[task.worker][task.name].cost}cr`)
hoursForComponent += workers[task.worker][task.name].hours
costForComponent += workers[task.worker][task.name].cost
console.log('calibration: 1h')
// Calibration
hoursForComponent++
})
return { hoursForComponent, costForComponent }
}
}
const blaster = components.blaster
// Blaster construction
if (blaster.components.length > 0) {
let hoursForBlasterTotal = 0
let costForBlasterTotal = 0
// Components
_.forEach(blaster.components, component => {
console.log('--- COMPONENT: ', component.name, ' ---')
// Component tasks
const { hoursForComponent, costForComponent } = funcs.countForTasks(component.tasks)
hoursForBlasterTotal += hoursForComponent
costForBlasterTotal += costForComponent
})
console.log('--- COMPONENT: BLASTER ---')
// Blaster tasks
const countForBlaster = funcs.countForTasks(blaster.tasks)
hoursForBlasterTotal += countForBlaster.hoursForComponent
costForBlasterTotal += countForBlaster.costForComponent
console.log('--------------------')
console.log(`${hoursForBlasterTotal}h. ${costForBlasterTotal}cr.`)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment