-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathjihanki.php
151 lines (132 loc) · 3.74 KB
/
jihanki.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
<?php
/**
* エナジードリンク 150円
* 炭酸飲料水 140円
* スポーツドリンク 130円
* 缶コーヒー 120円
* ミネラルウォーター 110円
*
* X円投入する(X > 0)
* 投入できるのは1000円札、500円硬貨、100円硬貨、50円硬貨、10円硬貨のみ
* 10000円札、5000円札、2000円札、5円硬貨、1円硬貨は使用不可
* 紙幣、硬貨の最大数はY枚とする(Y > 0)
*
* ランダムで飲料を購入する
* ただし、飲料の合計金額がNを超えてはならない
* 各飲料の在庫数はZ本とする(Z > 0)
*
* 任意の金額N円(1000,500,100,50,10円(の組み合わせで成立する額))を
* 1回のみ自販機に投入して、
* ランダムに何か買ってゆく。
* それが何本でもいいし、何を買ってもいい。
* まだ何か買えたとしても、どこで打ち切るかもランダム。
*
* 購入したら投入金額、各飲料の本数とその合計金額、全飲料の合計金額、おつりを表示する
*/
$money_kinds = [
1 => [
'price' => 1000,
'use_max_money_count' => 6,
],
2 => [
'price' => 500,
'use_max_money_count' => 4,
],
3 => [
'price' => 100,
'use_max_money_count' => 3,
],
4 => [
'price' => 50,
'use_max_money_count' => 5,
],
5 => [
'price' => 10,
'use_max_money_count' => 5,
],
];
$drinks = [
1 => [
'name' => 'エナジードリンク',
'price' => 150,
],
2 => [
'name' => '炭酸飲料水',
'price' => 140,
],
3 => [
'name' => 'スポーツドリンク',
'price' => 130,
],
4 => [
'name' => 'コーヒー',
'price' => 120,
],
5 => [
'name' => '水',
'price' => 110,
],
];
$stock_counts = [
1 => 5,
2 => 6,
3 => 4,
4 => 5,
5 => 7,
];
$usable_money = 0;
foreach ($money_kinds as $money_kind) {
$usable_money += $money_kind['price'] * rand(0, $money_kind['use_max_money_count']);
}
$used_money = $usable_money;
$bought_counts = array_fill(1, count($drinks), 0);
for ($i = 0; $i < rand(1, 20); $i++) {
$buy_candidate_drink_id = array_rand($drinks);
if (($stock_counts[$buy_candidate_drink_id] > 0) && ($usable_money >= $drinks[$buy_candidate_drink_id]['price'])) {
$drink_id = $buy_candidate_drink_id;
$bought_counts[$drink_id]++;
$stock_counts[$drink_id]--;
$usable_money -= $drinks[$drink_id]['price'];
}
}
$bought_subtotal_moneys = [];
foreach ($drinks as $drink_id => $drink) {
$bought_subtotal_moneys[$drink_id] = $drink['price'] * $bought_counts[$drink_id];
}
$bought_total_money = array_sum($bought_subtotal_moneys);
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>自販機</title>
</head>
<body>
<table border="1">
<tr>
<td>投入金額</td>
<td><?php echo $used_money ?>円</td>
</tr>
<?php foreach ($drinks as $drink_id => $drink) : ?>
<?php if ($bought_counts[$drink_id] > 0) : ?>
<tr>
<td><?php echo $drink['name'] ?></td>
<td><?php echo $bought_counts[$drink_id] ?>本</td>
</tr>
<tr>
<td>小計</td>
<td><?php echo $bought_subtotal_moneys[$drink_id] ?>円</td>
</tr>
<?php endif ?>
<?php endforeach ?>
<tr>
<td>全飲料の合計金額</td>
<td><?php echo $bought_total_money ?>円</td>
</tr>
<tr>
<td>おつり</td>
<td><?php echo ($used_money - $bought_total_money) ?>円</td>
</tr>
</table>
</body>
</html>