以下の問題のプログラムを書きましたが、変数名や流れに関して、こうした方が良いというところを教えていただきたいです。
よろしくお願いいたします。
/**
- 製品A
- 部品A2個と部品B1個からできている。
- 製品B
- 部品C3個と部品D2個からできている。
- 製品C
- 部品B1個と部品D1個からできている。
- 製品Aと製品Bと製品Cをランダムで1個ずつ発注する。
- 部品にはそれぞれ在庫がありそれがなくなるまで製造する。
- 最後に以下を出力します。
- 製造前の各部品の在庫数
- 製品の発注数
- 製造した製品の個数
- 製造後の各部品の在庫数
*/
PHP
1$part_names = [ 2 'part1' => 'A', 3 'part2' => 'B', 4 'part3' => 'C', 5 'part4' => 'D', 6]; 7 8$part_stocks = [ 9 'part1' => 120, 10 'part2' => 120, 11 'part3' => 130, 12 'part4' => 130, 13]; 14 15$product_names = [ 16 'product1' => 'A', 17 'product2' => 'B', 18 'product3' => 'C', 19]; 20 21$needed_parts_counts = [ 22 'product1' => [ 23 'part1' => 2, 24 'part2' => 1, 25 ], 26 'product2' => [ 27 'part3' => 3, 28 'part4' => 2, 29 ], 30 'product3' => [ 31 'part2' => 1, 32 'part4' => 1, 33 ], 34]; 35 36$first_part_stocks = $part_stocks; 37$product_counts = []; 38$order_count = 0; 39 40while (true) { 41 $makeable_product_ids = []; 42 43 foreach ($needed_parts_counts as $product_id => $needed_parts_count) { 44 $can_make = true; 45 46 foreach ($needed_parts_count as $part_id => $needed_part_count) { 47 if ($part_stocks[$part_id] > $needed_part_count) { 48 $can_make = false; 49 break; 50 } 51 } 52 53 if ($can_make) { 54 $makeable_product_ids[] = $product_id; 55 } 56 } 57 58 if (count($makeable_product_ids) === 0) { 59 break; 60 } 61 62 $ordered_product_id = $makeable_product_ids[array_rand($makeable_product_ids)]; 63 $order_count++; 64 65 if (isset($product_counts[$ordered_product_id])) { 66 $product_counts[$ordered_product_id]++; 67 } else { 68 $product_counts[$ordered_product_id] = 1; 69 } 70 71 foreach ($needed_parts_counts[$ordered_product_id] as $part_id => $needed_part_count) { 72 $part_stocks[$part_id] -= $needed_part_count; 73 } 74} 75 76echo "製造前<br>"; 77 78foreach ($first_part_stocks as $part_id => $part_stock) { 79 echo '部品' . $part_names[$part_id] . ' ' . $part_stock . "個<br>"; 80} 81 82echo "<br>"; 83echo '発注 ' . $order_count . '回<br>'; 84 85foreach ($product_counts as $product_id => $product_count) { 86 echo '製品' . $product_names[$product_id] . ' ' . $product_count . "個<br>"; 87} 88 89echo "<br>"; 90echo "製造後<br>"; 91 92foreach ($part_stocks as $part_id => $part_stock) { 93 echo '部品' . $part_names[$part_id] . ' ' . $part_stock . "個<br>"; 94}
回答1件
あなたの回答
tips
プレビュー