<?php
$recipes = [
'cc' => [
'in' => ['c' => 1],
'out' => ['cc' => 2],
'time' => 0.5,
'terminal' => true,
],
'gc' => [
'in' => ['cc' => 1.5, 'i' => 1,],
'out' => ['gc' => 1],
'time' => 0.5,
'terminal' => false,
],
'rc' => [
'in' => ['gc' => 2, 'p' => 2, 'cc' => 2],
'out' => ['rc' => 1],
'time' => 6,
'terminal' => false,
],
'bc' => [
'in' => ['gc' => 20, 'rc' => 2],
'out' => ['bc' => 1],
'time' => 10,
'terminal' => false,
],
];
function solveFor($recipes, $type, $numAssemblers, $requirements = []) {
if ( $recipes[$type]['terminal']) {
foreach($recipes[$type]['in'] as $k => $v) {
if (! array_key_exists($type, $requirements)) { $requirements[$type] = 0; }
$perMinute = 60 / $recipes[$type]['time'];
$requirements[$k] = $requirements[$k] + ($numAssemblers * $v * $perMinute);
return $requirements;
}
} else {
foreach($recipes[$type]['in'] as $k => $v) {
$depReq = solveFor($recipes, $k, 1, $requirements);
foreach ($depReq as $k2 => $v2) {
$requirements[$k2] += $v2;
}
}
return $requirements;
}
}
print_r( solveFor($recipes, 'cc', 4, []) );
preferences:
62.17 ms | 402 KiB | 5 Q