回答編集履歴
2
テキスト修正
test
CHANGED
@@ -4,193 +4,9 @@
|
|
4
4
|
|
5
5
|
いろいろな書き方が出来ると思いますが、考え方の一例として回答します。
|
6
6
|
|
7
|
+
なお入力データは、標準入力から与えるものとしました。
|
7
8
|
|
8
9
|
|
9
|
-
なお入力データは、以下のような内容のテキストファイル `input.txt` で
|
10
|
-
|
11
|
-
与えられるものとしました。
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
```text
|
16
|
-
|
17
|
-
3
|
18
|
-
|
19
|
-
1 1 3 8
|
20
|
-
|
21
|
-
3 2 2 7
|
22
|
-
|
23
|
-
4 3 8 1
|
24
|
-
|
25
|
-
```
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
以下、思いつきを書いてみました。
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
```python
|
34
|
-
|
35
|
-
import re
|
36
|
-
|
37
|
-
from collections import defaultdict
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
# データ行から、部屋の特定部分と人数との2つをキャプチャする正規表現
|
42
|
-
|
43
|
-
pattern = r"^(.+) (-?\d+)$"
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
# データ行を読み込み、人数をカウントしておく辞書(デフォルト値: 0)
|
48
|
-
|
49
|
-
counts = defaultdict(lambda: 0)
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
# 入力ファイルの読み込み
|
54
|
-
|
55
|
-
file = open('input.txt', 'r')
|
56
|
-
|
57
|
-
lines = file.readlines()
|
58
|
-
|
59
|
-
file.close()
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
# 読み込んだ行の2行目から読み込み
|
64
|
-
|
65
|
-
for line in lines[1:]:
|
66
|
-
|
67
|
-
m = re.match(pattern, line)
|
68
|
-
|
69
|
-
if m:
|
70
|
-
|
71
|
-
counts[m.group(1)] += int(m.group(2))
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
# 結果の出力
|
76
|
-
|
77
|
-
for building in range(4):
|
78
|
-
|
79
|
-
for floor in range(3):
|
80
|
-
|
81
|
-
counts_of_residents = []
|
82
|
-
|
83
|
-
for room in range(10):
|
84
|
-
|
85
|
-
key = "{0} {1} {2}".format(building+1, floor+1, room+1)
|
86
|
-
|
87
|
-
counts_of_residents.append(counts[key])
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
print(" ".join(map(lambda n: str(n), counts_of_residents)))
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
if building < 3:
|
96
|
-
|
97
|
-
print("#" * 20)
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
```
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
上記を実行すると、以下が出力されます。
|
108
|
-
|
109
|
-
```
|
110
|
-
|
111
|
-
0 0 8 0 0 0 0 0 0 0
|
112
|
-
|
113
|
-
0 0 0 0 0 0 0 0 0 0
|
114
|
-
|
115
|
-
0 0 0 0 0 0 0 0 0 0
|
116
|
-
|
117
|
-
####################
|
118
|
-
|
119
|
-
0 0 0 0 0 0 0 0 0 0
|
120
|
-
|
121
|
-
0 0 0 0 0 0 0 0 0 0
|
122
|
-
|
123
|
-
0 0 0 0 0 0 0 0 0 0
|
124
|
-
|
125
|
-
####################
|
126
|
-
|
127
|
-
0 0 0 0 0 0 0 0 0 0
|
128
|
-
|
129
|
-
0 7 0 0 0 0 0 0 0 0
|
130
|
-
|
131
|
-
0 0 0 0 0 0 0 0 0 0
|
132
|
-
|
133
|
-
####################
|
134
|
-
|
135
|
-
0 0 0 0 0 0 0 0 0 0
|
136
|
-
|
137
|
-
0 0 0 0 0 0 0 0 0 0
|
138
|
-
|
139
|
-
0 0 0 0 0 0 0 1 0 0
|
140
|
-
|
141
|
-
```
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
考え方としては、入力のデータ行
|
146
|
-
|
147
|
-
```text
|
148
|
-
|
149
|
-
3 2 2 7
|
150
|
-
|
151
|
-
```
|
152
|
-
|
153
|
-
を、部屋を特定する文字列`"3 2 2"`と、人数の`7`とに分けて、
|
154
|
-
|
155
|
-
前者をキーとして、後者を値とする辞書 `counts` に格納することです。
|
156
|
-
|
157
|
-
辞書にまだないキーに対しては、0 をデフォルト値としたいために、
|
158
|
-
|
159
|
-
`defaultdict` を初期値が 0になるようにして作っています。
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
なお、問題文には
|
164
|
-
|
165
|
-
> メモリ制限 : 65536 KB
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
とありますが、入力データがどのくらいの行を含むのか分かりませんので、
|
170
|
-
|
171
|
-
`file.readlines()` でいっぺんに読まないで、一行ごとに読むほうが
|
172
|
-
|
173
|
-
よいかもしれませんが、その点については、アルゴリズムとデータ構造の案を
|
174
|
-
|
175
|
-
求められているご質問の本題ではないと考え、この回答では`readlines` で
|
176
|
-
|
177
|
-
入力ファイルを丸ごと読んでいます。
|
178
|
-
|
179
|
-
さらに1行目のデータ行の数は無視するという横着もしています。
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
以上参考になれば幸いです。
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
---
|
188
|
-
|
189
|
-
**追記**
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
他の回答者の皆様の回答に合わせて、以下、標準入力から読み込むバージョンです。
|
194
10
|
|
195
11
|
```python
|
196
12
|
|
@@ -251,3 +67,79 @@
|
|
251
67
|
|
252
68
|
|
253
69
|
```
|
70
|
+
|
71
|
+
|
72
|
+
|
73
|
+
考え方としては、入力のデータ行、たとえば
|
74
|
+
|
75
|
+
```text
|
76
|
+
|
77
|
+
3 2 2 7
|
78
|
+
|
79
|
+
```
|
80
|
+
|
81
|
+
を、部屋を特定する文字列`"3 2 2"`と、人数の`7`とに分けて、
|
82
|
+
|
83
|
+
前者をキーとして、後者を値とする辞書 `counts` に格納する
|
84
|
+
|
85
|
+
ことにしました。
|
86
|
+
|
87
|
+
辞書にまだないキーに対しては、0 をデフォルト値としたいために、
|
88
|
+
|
89
|
+
`defaultdict` を初期値が 0になるようにして作っています。
|
90
|
+
|
91
|
+
|
92
|
+
|
93
|
+
以下、実行例です。(上記のコードを `count.py` とし、データを`input.txt`に入れました。)
|
94
|
+
|
95
|
+
|
96
|
+
|
97
|
+
```
|
98
|
+
|
99
|
+
$ cat input.txt
|
100
|
+
|
101
|
+
3
|
102
|
+
|
103
|
+
1 1 3 8
|
104
|
+
|
105
|
+
3 2 2 7
|
106
|
+
|
107
|
+
4 3 8 1
|
108
|
+
|
109
|
+
$ python count.py < input.txt
|
110
|
+
|
111
|
+
0 0 8 0 0 0 0 0 0 0
|
112
|
+
|
113
|
+
0 0 0 0 0 0 0 0 0 0
|
114
|
+
|
115
|
+
0 0 0 0 0 0 0 0 0 0
|
116
|
+
|
117
|
+
####################
|
118
|
+
|
119
|
+
0 0 0 0 0 0 0 0 0 0
|
120
|
+
|
121
|
+
0 0 0 0 0 0 0 0 0 0
|
122
|
+
|
123
|
+
0 0 0 0 0 0 0 0 0 0
|
124
|
+
|
125
|
+
####################
|
126
|
+
|
127
|
+
0 0 0 0 0 0 0 0 0 0
|
128
|
+
|
129
|
+
0 7 0 0 0 0 0 0 0 0
|
130
|
+
|
131
|
+
0 0 0 0 0 0 0 0 0 0
|
132
|
+
|
133
|
+
####################
|
134
|
+
|
135
|
+
0 0 0 0 0 0 0 0 0 0
|
136
|
+
|
137
|
+
0 0 0 0 0 0 0 0 0 0
|
138
|
+
|
139
|
+
0 0 0 0 0 0 0 1 0 0
|
140
|
+
|
141
|
+
$
|
142
|
+
|
143
|
+
```
|
144
|
+
|
145
|
+
以上参考になれば幸いです。
|
1
テキスト修正
test
CHANGED
@@ -181,3 +181,73 @@
|
|
181
181
|
|
182
182
|
|
183
183
|
以上参考になれば幸いです。
|
184
|
+
|
185
|
+
|
186
|
+
|
187
|
+
---
|
188
|
+
|
189
|
+
**追記**
|
190
|
+
|
191
|
+
|
192
|
+
|
193
|
+
他の回答者の皆様の回答に合わせて、以下、標準入力から読み込むバージョンです。
|
194
|
+
|
195
|
+
```python
|
196
|
+
|
197
|
+
import re
|
198
|
+
|
199
|
+
from collections import defaultdict
|
200
|
+
|
201
|
+
|
202
|
+
|
203
|
+
# データ行から、部屋の特定部分と人数との2つをキャプチャする正規表現
|
204
|
+
|
205
|
+
pattern = r"^(.+) (-?\d+)$"
|
206
|
+
|
207
|
+
|
208
|
+
|
209
|
+
# データ行を読み込み、人数をカウントしておく辞書(デフォルト値: 0)
|
210
|
+
|
211
|
+
counts = defaultdict(lambda: 0)
|
212
|
+
|
213
|
+
|
214
|
+
|
215
|
+
# 標準入力からの読み込み
|
216
|
+
|
217
|
+
for _ in range(int(input())):
|
218
|
+
|
219
|
+
m = re.match(pattern, input())
|
220
|
+
|
221
|
+
if m:
|
222
|
+
|
223
|
+
counts[m.group(1)] += int(m.group(2))
|
224
|
+
|
225
|
+
|
226
|
+
|
227
|
+
# 結果の出力
|
228
|
+
|
229
|
+
for building in range(4):
|
230
|
+
|
231
|
+
for floor in range(3):
|
232
|
+
|
233
|
+
counts_of_residents = []
|
234
|
+
|
235
|
+
for room in range(10):
|
236
|
+
|
237
|
+
key = "{0} {1} {2}".format(building+1, floor+1, room+1)
|
238
|
+
|
239
|
+
counts_of_residents.append(str(counts[key]))
|
240
|
+
|
241
|
+
|
242
|
+
|
243
|
+
print(" ".join(counts_of_residents))
|
244
|
+
|
245
|
+
|
246
|
+
|
247
|
+
if building < 3:
|
248
|
+
|
249
|
+
print("#" * 20)
|
250
|
+
|
251
|
+
|
252
|
+
|
253
|
+
```
|