質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

6回答

2352閲覧

競技プログラミングの問題(Python)

super_tomato

総合スコア34

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

1グッド

2クリップ

投稿2018/01/21 13:39

編集2018/01/21 13:41

下記のプログラミングの問題を解きました。
プログラミングの問題
みなさんはPythonでこの問題をどのように解きますか?
僕は以下のように解きました。
ぜひみなさんの解答を参考にさせてください。

Python2.7

1from __future__ import print_function 2n = int(raw_input()) 3bilding1 = [[" 0 ","0 ","0 ","0 ","0 ","0 ","0 ","0 ","0 ","0"], 4 [" 0 ","0 ","0 ","0 ","0 ","0 ","0 ","0 ","0 ","0"], 5 [" 0 ","0 ","0 ","0 ","0 ","0 ","0 ","0 ","0 ","0"] 6 ] 7bilding2 = [[" 0 ","0 ","0 ","0 ","0 ","0 ","0 ","0 ","0 ","0"], 8 [" 0 ","0 ","0 ","0 ","0 ","0 ","0 ","0 ","0 ","0"], 9 [" 0 ","0 ","0 ","0 ","0 ","0 ","0 ","0 ","0 ","0"] 10 ] 11bilding3 = [[" 0 ","0 ","0 ","0 ","0 ","0 ","0 ","0 ","0 ","0"], 12 [" 0 ","0 ","0 ","0 ","0 ","0 ","0 ","0 ","0 ","0"], 13 [" 0 ","0 ","0 ","0 ","0 ","0 ","0 ","0 ","0 ","0"] 14 ] 15bilding4 = [[" 0 ","0 ","0 ","0 ","0 ","0 ","0 ","0 ","0 ","0"], 16 [" 0 ","0 ","0 ","0 ","0 ","0 ","0 ","0 ","0 ","0"], 17 [" 0 ","0 ","0 ","0 ","0 ","0 ","0 ","0 ","0 ","0"] 18 ] 19bilding = [] 20bilding.append(bilding1) 21bilding.append(bilding2) 22bilding.append(bilding3) 23bilding.append(bilding4) 24 25for i in range(0,n): 26 inf = raw_input() 27 inf= inf.split(" ") 28 b = int(inf[0]) -1 29 f = int(inf[1]) -1 30 r = int(inf[2]) -1 31 v = int(inf[3]) 32 bilding[b][f][r] = int(bilding[b][f][r]) + v 33 if(r == 0): 34 bilding[b][f][r] = " " + str(bilding[b][f][r]) + " " 35 elif(r < 9): 36 bilding[b][f][r] = str(bilding[b][f][r]) + " " 37 else: 38 bilding[b][f][r] = str(bilding[b][f][r]) 39 40count = 0 41for j in range(0,4): 42 for k in range(0,3): 43 for l in range(0,10): 44 print((bilding[j][k][l]),end="") 45 print("") 46 if(count < 3): 47 print("####################") 48 count += 1 49
jun68ykt👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答6

0

ベストアンサー

私も試しに書いてみました。python3

python

1room_list = [[[0]*10,[0]*10,[0]*10],[[0]*10,[0]*10,[0]*10],[[0]*10,[0]*10,[0]*10],[[0]*10,[0]*10,[0]*10]] 2for i in range(int(input())): 3 b,f,r,v = map(int, input().split()) 4 room_list[b-1][f-1][r-1] += v 5for b_ix in range(4): 6 if b_ix > 0: print("#"*20) 7 for f_ix in range(3): 8 print(""," ".join(map(str, room_list[b_ix][f_ix])))

投稿2018/01/21 15:58

編集2018/01/22 09:38
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

namnium1125

2018/01/21 16:34

#は20個必要なのではないでしょうか? またlistは組み込み型を上書きしてしまっているのでできれば別な名称に変えるべきだと思います。
退会済みユーザー

退会済みユーザー

2018/01/21 16:39

今確認しました。確かに20でしたので、コード手直ししました。
super_tomato

2018/01/21 23:55

個人的に一番分かりやすく簡潔なコードだと思いましたのでベストアンサーにさせていただきました!回答ありがとうございました。
namnium1125

2018/01/22 00:00

> 入居者数の前には1つの空白を出力して下さい。 このコードのままだと各フロアの一つ目の部屋の前にスペースが入りませんが、これは問題ないのでしょうか?
super_tomato

2018/01/22 00:10

厳密に言えば、必要ですね。
退会済みユーザー

退会済みユーザー

2018/01/22 09:40

ありがとうございます。条件漏れがありましたか。ちょっと直してみました。いかがでしょうか。
super_tomato

2018/01/22 10:01

出力の仕方が厳密なルールからは反していますが、そこまでしてもらわなくても十分参考になりますので!わざわざありがとうございました。
guest

0

リファレンスをみたりREPLで試しつつ書いてみました。
特にフォーマットするコードは明快とは言いがたいので「コードはいくらでもヘンテコにできる」という悪い例かも知れません。

python

1import numpy as np 2import re 3 4num_b = 4 5num_f = 3 6num_r = 10 7 8b_separator = '\n' + ''.join(['#'] * num_r * 2) + '\n ' 9 10rooms = np.zeros((num_b, num_f, num_r), dtype=np.uint8) 11 12n = int(input()) 13for i in range(n): 14 b, f, r, v = map(int, input().split(' ')) 15 rooms[b - 1, f - 1, r - 1] += v 16 17o = re.sub(r'[[]]', '', ' ' + b_separator.join(map(str, rooms))) 18print(o)

python 3.6.0

投稿2018/01/21 15:34

KSwordOfHaste

総合スコア18392

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

super_tomato

2018/01/21 23:58

正規表現をまだ慣れていないので参考になりました!ご回答ありがとうございました。
guest

0

私ならこうしますかね…入力は標準入力とします。

python

1A_college = [[[0 for _ in range(10)] for _ in range(3)] for _ in range(4)] 2 3N = int(input()) 4moves = [[int(i)-1 for i in input().split()] for _ in range(N)] 5 6for m in moves: 7 b,f,r,v = m 8 v += 1 9 A_college[b][f][r] += v 10 11for b,building in enumerate(A_college): 12 if 0 != b: print('#'*20) 13 for flr in building: 14 print('',*flr)

for文のところでbuilding(棟)とかflr(floor、階)とかわかりやすい単語にすると意味のあるプログラムに見えて、個人的には好きです。

Python 3.6.1

投稿2018/01/21 15:25

編集2018/01/21 16:06
namnium1125

総合スコア2043

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

super_tomato

2018/01/21 23:59

とても分かりやすい(僕にとって)コードで参考になりました!ご回答ありがとうございました。
guest

0

こんにちは。

いろいろな書き方が出来ると思いますが、考え方の一例として回答します。
なお入力データは、標準入力から与えるものとしました。

python

1import re 2from collections import defaultdict 3 4# データ行から、部屋の特定部分と人数との2つをキャプチャする正規表現 5pattern = r"^(.+) (-?\d+)$" 6 7# データ行を読み込み、人数をカウントしておく辞書(デフォルト値: 0) 8counts = defaultdict(lambda: 0) 9 10# 標準入力からの読み込み 11for _ in range(int(input())): 12 m = re.match(pattern, input()) 13 if m: 14 counts[m.group(1)] += int(m.group(2)) 15 16# 結果の出力 17for building in range(4): 18 for floor in range(3): 19 counts_of_residents = [] 20 for room in range(10): 21 key = "{0} {1} {2}".format(building+1, floor+1, room+1) 22 counts_of_residents.append(str(counts[key])) 23 24 print(" ".join(counts_of_residents)) 25 26 if building < 3: 27 print("#" * 20) 28

 
考え方としては、入力のデータ行、たとえば

text

13 2 2 7

を、部屋を特定する文字列"3 2 2"と、人数の7とに分けて、
前者をキーとして、後者を値とする辞書 counts に格納する
ことにしました。
辞書にまだないキーに対しては、0 をデフォルト値としたいために、
defaultdict を初期値が 0になるようにして作っています。

以下、実行例です。(上記のコードを count.py とし、データをinput.txtに入れました。)

$ cat input.txt 3 1 1 3 8 3 2 2 7 4 3 8 1 $ python count.py < input.txt 0 0 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 #################### 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 #################### 0 0 0 0 0 0 0 0 0 0 0 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 #################### 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 $

以上参考になれば幸いです。

投稿2018/01/21 15:13

編集2018/01/21 16:53
jun68ykt

総合スコア9058

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

super_tomato

2018/01/22 00:00

詳しい解説ありがとうございました。参考になります。ご回答ありがとうございました。
jun68ykt

2018/01/22 01:35

defaultdict 使って、楽してみました(笑) でも、Pythonのリスト操作の腕を上げるには、他の皆様の回答のほうがよいと思います。私も勉強になりました。
guest

0

最後の出力に苦労しますが、部屋を120室、直列に用意すればデータ構造がスッキリします。

python

1 2from io import StringIO 3from textwrap import dedent 4 5 6_INPUT = iter(dedent('''\ 7 3 8 1 1 3 8 9 3 2 2 7 10 4 3 8 1 11''').splitlines()) 12 13def input(): 14 return next(_INPUT) 15 16 17rooms = [0] * 10 * 3 * 4 18for _ in range(int(input())): 19 b, f, r, v = map(int, input().split()) 20 b, f, r = (x - 1 for x in (b, f, r)) 21 rooms[30 * b + 10 * f + r] += v 22 23with StringIO() as fp: 24 for n in range(0, len(rooms), 10): 25 if n % 30 == 0: 26 print('#' * 20, file=fp) 27 print(*rooms[n:n+10], file=fp) 28 for line in fp.getvalue().splitlines()[1:]: 29 print(line)

投稿2018/01/21 16:19

YouheiSakurai

総合スコア6142

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

super_tomato

2018/01/21 23:54

ありがとうございます!参考になります!
guest

0

みなさんのコードを参考に以下のように改良しました。ありがとうございました。

python

1from __future__ import print_function 2n = int(raw_input()) 3bilding = [[[0]*10,[0]*10,[0]*10],[[0]*10,[0]*10,[0]*10],[[0]*10,[0]*10,[0]*10],[[0]*10,[0]*10,[0]*10]] 4for i in range(0,n): 5 b,f,r,v = map(int,raw_input().split(" ")) 6 bilding[b-1][f-1][r-1] += v 7 8lcnt = 0 9for j in range(0,4): 10 for k in range(0,3): 11 for l in range(0,10): 12 print(" ",end="") 13 print(bilding[j][k][l],end="") 14 if(lcnt < 11): 15 print("") 16 lcnt += 1 17 if(j < 3): 18 print("#"*20) 19
  • lcntは出力の最後に改行が入ってしまうのでそれをなくすためです。

投稿2018/01/22 00:41

super_tomato

総合スコア34

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

namnium1125

2018/01/22 01:16 編集

pythonのif文の条件式は、条件が複数でないならば()で囲む必要はないですよ。また0始まりならばrange(4)でいいと思います。 最後の改行を出さないというのは面白いですね!勉強になりました。
super_tomato

2018/01/22 02:41

ありがとうございます。if文の条件式についてですがちょうど今それを発見したところでした笑。 0からならrange(数値)でいいのですね。勉強になります。 最後の改行についてですが、最後に改行を入れてしまうとサイトの方でエラーが出てしまうのであのように行いました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問