今回はpaiza 標準入力メニューセクション9【出力幅を指定して出力】をRubyとPythonで解説します。
セクション9は、整数値の先頭部分に半角スペースや"0"を挿入して、任意の幅で出力する問題です。
本記事で使用しているメソッドについて
解答例で使っているメソッドについて、下記の記事で詳しく解説していますので参考にしてみて下さい。
- [Ruby] 標準入力によるデータ取得1
- [Ruby] 標準入力によるデータ取得2
- [Ruby] 標準入力によるデータ取得3
- [Ruby] 標準出力(データを任意に整形して出力する)
- [Ruby]配列の基本操作1
- [Ruby]繰り返し処理
セクション9:【出力幅を指定して出力】
9-STEP1: 1 つの実数を出力 (paizaランク D 相当)
1行で入力された整数nを3桁になるように半角スペースで埋めて出力する問題です。(nは 0 以上 999 以下)
入出力例
※ 半角スペースだと見づらいため、半角スペース" "をアンダースコア "_"に置き換えています。
# 入出力例 INPUT1 = <<~"EOS" 12 EOS OUTPUT1 = <<~"EOS" _12 EOS INPUT2 = <<~"EOS" 0 EOS OUTPUT2 = <<~"EOS" __0 EOS
Ruby解答例1
入力文字列を整数nに変換し、%メソッドで、整数nを半角スペース埋め3桁にした文字列を生成して出力しています。
※ "%3d" % n
は "%3d".%(n)
を省略した書き方です。
# 解答例1 # 入力 n = gets.to_i # 出力 puts("%3d" % n)
Ruby解答例2
入力文字列を整数nに変換し、sprintfメソッドで、整数nを半角スペース埋め3桁にした文字列を生成して出力しています。
# 解答例2 # 入力 n = gets.to_i # 出力 puts(sprintf("%3d", n))
Ruby解答例3
入力文字列を整数nに変換し、formatメソッドで、整数nを半角スペース埋め3桁にした文字列を生成して出力しています。
# 解答例3 # 入力 n = gets.to_i # 出力 puts(format("%3d", n))
Ruby解答例4
入力文字列を整数nに変換し、出力で整数nを文字列に変換して、rjustメソッドで半角スペース埋め3桁にした文字列を生成して出力しています。(n.to_s.rjust(3, " " )
は n.to_s.rjust(3)
でもOK)
# 解答例4 # 入力 n = gets.to_i # 出力 puts(n.to_s.rjust(3, " "))
Ruby解答例5
入力文字列を整数nに変換し、整数nの桁数をカウントして、3桁になるように先頭に半角スペースを入れて出力しています。
# 解答例5 # 入力 n = gets.to_i # 3 桁になるようにスペースで埋める s = " " * (3 - n.to_s.length) << n.to_s # 出力 puts(s)
Python解答例1
入力文字列を整数nに変換し、f文字列で、整数nを半角スペース埋め3桁にした文字列を生成して出力しています。
# 解答例1 # 入力 n = int(input()) # 出力 print(f"{n:3d}")
Python解答例2
入力文字列を整数nに変換し、formatメソッドで、整数nを半角スペース埋め3桁にした文字列を生成して出力しています。
# 解答例2 # 入力 n = int(input()) # 出力 print("{:{}d}".format(n, 3))
Python解答例3
入力文字列を整数nに変換し、出力で整数nを文字列に変換して、rjustメソッドで、整数nを半角スペース埋め3桁にした文字列を生成して出力しています。(str(n).rjust(3, " " )
は str(n).rjust(3)
でもOK)
# 解答例3 # 入力 n = int(input()) # 出力 print(str(n).rjust(3, " "))
Python解答例4
入力文字列を整数nに変換し、整数nの桁数をカウントして、3桁になるように先頭に半角スペースを入れて出力しています。
# 解答例4 # 入力 n = int(input()) # 3 桁になるようにスペースで埋める s = " " * (3 - len(str(n))) + str(n) # 出力 print(s)
9-STEP2: 数値をゼロ埋めで出力 (paizaランク D 相当)
1行で入力された整数nを3桁になるように"0"で埋めて出力する問題です。(nは 0 以上 999 以下)
入出力例
# 入出力例 INPUT1 = <<~"EOS" 12 EOS OUTPUT1 = <<~"EOS" 012 EOS INPUT2 = <<~"EOS" 0 EOS OUTPUT2 = <<~"EOS" 000 EOS
Ruby解答例1
入力文字列を整数nに変換し、%メソッドで、整数nを0埋め3桁にした文字列を生成して出力しています。
# 解答例1 # 入力 n = gets.to_i # 出力 puts("%03d" % n)
Ruby解答例2
入力文字列を整数nに変換し、sprintfメソッドで、整数nを0埋め3桁にした文字列を生成して出力しています。
# 解答例2 # 入力 n = gets.to_i # 出力 puts(sprintf("%03d", n))
Ruby解答例3
入力文字列を整数nに変換し、formatメソッドで、整数nを0埋め3桁にした文字列を生成して出力しています。
# 解答例3 # 入力 n = gets.to_i # 出力 puts(format("%03d", n))
Ruby解答例4
入力文字列を整数nに変換し、出力で整数nを文字列に変換して、rjustメソッドで、整数nを0埋め3桁にした文字列を生成して出力しています。
# 解答例4 # 入力 n = gets.to_i # 出力 puts(n.to_s.rjust(3, "0"))
Python解答例1
入力文字列を整数nに変換し、f文字列で、整数nを0埋め3桁にした文字列を生成して出力しています。
# 解答例1 # 入力 n = int(input()) # 出力 print(f"{n:03d}")
Python解答例2
入力文字列を整数nに変換し、formatメソッドで、整数nを0埋め3桁にした文字列を生成して出力しています。
# 解答例2 # 入力 n = int(input()) # 出力 print("{:0{}d}".format(n, 3))
Python解答例3
入力文字列を整数nに変換し、出力で整数nを文字列に変換して、rjustメソッドで、整数nを0埋め3桁にした文字列を生成して出力しています。
# 解答例3 # 入力 n = int(input()) # 出力 print(str(n).rjust(3, "0"))
9-STEP3: 複数の数値を半角スペース埋めで出力 (paizaランク D 相当)
1行目で要素数n、続くn行で整数mが入力され、整数mを3桁になるように半角スペースで埋めて出力する問題です。
(mは 0 以上 999 以下)
入出力例
※ 半角スペースだと見づらいため、半角スペース" "をアンダースコア "_"に置き換えています。
# 入出力例 INPUT1 = <<~"EOS" 12 0 8 81 813 0 0 0 0 0 0 0 0 EOS OUTPUT1 = <<~"EOS" __0 __8 _81 813 __0 __0 __0 __0 __0 __0 __0 __0 EOS
Ruby解答例1
1行目の整数nと続くn行の整数mを整数に変換して受け取って配列aryに格納し、配列aryの先頭から順に、%メソッドで、整数mを半角スペース埋め3桁にした文字列を生成して出力しています。
# 解答例1 # 1 行目入力 n = gets.to_i # 続く n 行入力 ary = n.times.map { gets.to_i } # 出力 ary.each { |m| puts("%3d" % m) }
Ruby解答例2
1行目の整数nと続くn行の整数mを整数に変換して受け取って配列aryに格納し、配列aryの先頭から順に、sprintfメソッドで、整数mを半角スペース埋め3桁にした文字列を生成して出力しています。
# 解答例2 # 1 行目入力 n = gets.to_i # 続く n 行入力 ary = n.times.map { gets.to_i } # 出力 ary.each { |m| puts(sprintf("%3d", m)) }
Ruby解答例3
1行目の整数nと続くn行の整数mを整数に変換して受け取って配列aryに格納し、配列aryの先頭から順に、formatメソッドで、整数mを半角スペース埋め3桁にした文字列を生成して出力しています。
# 解答例3 # 1 行目入力 n = gets.to_i # 続く n 行入力 ary = n.times.map { gets.to_i } # 出力 ary.each { |m| puts(format("%3d", m)) }
Ruby解答例4
1行目の整数nと続くn行の整数mを整数に変換して受け取って配列aryに格納し、配列aryの先頭から順に、rjustメソッドで、整数mを半角スペース埋め3桁にした文字列を生成して出力しています。(m.to_s.rjust(3, " " )
は m.to_s.rjust(3)
でもOK)
# 解答例4 # 1 行目入力 n = gets.to_i # 続く n 行入力 ary = n.times.map { gets.to_i } # 出力 ary.each { |m| puts(m.to_s.rjust(3, " ")) }
Python解答例1
1行目の整数nと続くn行の整数mを整数に変換して受け取って配列aryに格納し、配列aryの先頭から順に、f文字列で、整数mを半角スペース埋め3桁にした文字列を生成して出力しています。
# 解答例1 # 1 行目入力 n = int(input()) # 続く n 行入力 ary = [int(input()) for _ in range(n)] # 出力 [print(f"{m:3d}") for m in ary]
Python解答例2
1行目の整数nと続くn行の整数mを整数に変換して受け取って配列aryに格納し、配列aryの先頭から順に、formatメソッドで、整数mを半角スペース埋め3桁にした文字列を生成して出力しています。
# 解答例2 # 1 行目入力 n = int(input()) # 続く n 行入力 ary = [int(input()) for _ in range(n)] # 出力 [print("{:{}d}".format(m, 3)) for m in ary]
Python解答例3
1行目の整数nと続くn行の整数mを整数に変換して受け取って配列aryに格納し、配列aryの先頭から順に、rjustメソッドで、整数mを半角スペース埋め3桁にした文字列を生成して出力しています。(n.to_s.rjust(3, " " )
は n.to_s.rjust(3)
でもOK)
# 解答例2 # 1 行目入力 n = int(input()) # 続く n 行入力 ary = [int(input()) for _ in range(n)] # 出力 [print("{:{}d}".format(m, 3)) for m in ary]
9-STEP4: 数値を M けた半角スペース埋めで出力 (paizaランク D 相当)
半角スペース区切りの整数n, mが入力され、整数nをm桁になるように半角スペースで埋めて出力する問題です。
(nは 0 以上 999 以下、nの桁数 ≦ m)
入出力例
※ 半角スペースだと見づらいため、半角スペース" "をアンダースコア "_"に置き換えています。
# 入出力例 INPUT1 = <<~"EOS" 813 4 EOS OUTPUT1 = <<~"EOS" _813 EOS INPUT2 = <<~"EOS" 813 8 EOS OUTPUT2 = <<~"EOS" _____813 EOS
Ruby解答例1
整数n, m を受け取り、%メソッドで、整数nを半角スペース埋めm桁にした文字列を生成して出力しています。(式展開で桁数を指定しています)
# 解答例1 # 入力 n, m = gets.split.map(&:to_i) # 出力 puts("%#{m}d" % n)
Ruby解答例2
整数n, m を受け取り、%メソッドで、整数nを半角スペース埋めm桁にした文字列を生成して出力しています。(%メソッドの引数を配列にして桁数を指定しています)
# 解答例2 # 入力 n, m = gets.split.map(&:to_i) # 出力 puts("%*d" % [m, n])
Ruby解答例3
整数n, m を受け取り、sprintfメソッドで、整数nを半角スペース埋めm桁にした文字列を生成して出力しています。
# 解答例3 # 入力 n, m = gets.split.map(&:to_i) # 出力 puts(sprintf("%*d", m, n))
Ruby解答例4
整数n, m を受け取り、formatメソッドで、整数nを半角スペース埋めm桁にした文字列を生成して出力しています。
# 解答例4 # 入力 n, m = gets.split.map(&:to_i) # 出力 puts(format("%*d", m, n))
Ruby解答例5
整数n, m を受け取り、rjustメソッドで、整数nを半角スペース埋めm桁にした文字列を生成して出力しています。(n.to_s.rjust(m, " " )
は n.to_s.rjust(m)
でもOK)
# 解答例5 # 入力 n, m = gets.split.map(&:to_i) # 出力 puts(n.to_s.rjust(m, " "))
Python解答例1
整数n, m を受け取り、f文字列で、整数nを半角スペース埋めm桁にした文字列を生成して出力しています。
# 解答例1 # 入力 n, m = map(int, input().split()) # 出力 print(f"{n:{m}d}")
Python解答例2
整数n, m を受け取り、formatメソッドで、整数nを半角スペース埋めm桁にした文字列を生成して出力しています。
# 解答例2 # 入力 n, m = map(int, input().split()) # 出力 print("{:{}d}".format(n, m))
Python解答例3
整数n, m を受け取り、rjustメソッドで、整数nを半角スペース埋めm桁にした文字列を生成して出力しています。(str(n).rjust(m, " " )
は str(n).rjust(m)
でもOK)
# 解答例3 # 入力 n, m = map(int, input().split()) # 出力 print(str(n).rjust(m, " "))
9-FINAL: 【出力幅を指定して出力】N 個の数値を M けた半角スペース埋めで出力 (paizaランク D 相当)
1行目で整数n, m、続くn行で整数a_iが入力され、各整数a_iをm桁になるように半角スペースで埋めて出力する問題です。
(a_iは 0 以上 999 以下、a_iの桁数 ≦ m)
入出力例
※ 半角スペースだと見づらいため、半角スペース" "をアンダースコア "_"に置き換えています。
# 入出力例 INPUT1 = <<~"EOS" 4 3 0 8 81 813 EOS OUTPUT1 = <<~"EOS" __0 __8 _81 813 EOS
Ruby解答例1
整数n, m と続くn行の整数の配列aryを受け取り、配列aryの先頭から順に、%メソッドで、整数a_iを半角スペース埋めm桁にした文字列を生成して出力しています。(式展開で桁数を指定しています)
# 解答例1 # 1 行目入力 n, m = gets.split.map(&:to_i) # 続く n 行入力 ary = n.times.map { gets.to_i } # 出力 ary.each { |a| puts("%#{m}d" % a) }
Ruby解答例2
整数n, m と続くn行の整数の配列aryを受け取り、配列aryの先頭から順に、%メソッドで、整数a_iを半角スペース埋めm桁にした文字列を生成して出力しています。(%メソッドの引数を配列にして桁数を指定しています)
# 解答例2 # 1 行目入力 n, m = gets.split.map(&:to_i) # 続く n 行入力 ary = n.times.map { gets.to_i } # 出力 ary.each { |a| puts("%*d" % [m, a]) }
Ruby解答例3
整数n, m と続くn行の整数の配列aryを受け取り、配列aryの先頭から順に、sprintfメソッドで、整数a_iを半角スペース埋めm桁にした文字列を生成して出力しています。
# 解答例3 # 1 行目入力 n, m = gets.split.map(&:to_i) # 続く n 行入力 ary = n.times.map { gets.to_i } # 出力 ary.each { |a| puts(sprintf("%*d", m, a)) }
Ruby解答例4
整数n, m と続くn行の整数の配列aryを受け取り、配列aryの先頭から順に、formatメソッドで、整数a_iを半角スペース埋めm桁にした文字列を生成して出力しています。
# 解答例4 # 1 行目入力 n, m = gets.split.map(&:to_i) # 続く n 行入力 ary = n.times.map { gets.to_i } # 出力 ary.each { |a| puts(format("%*d", m, a)) }
Ruby解答例5
整数n, m と続くn行の整数の配列aryを受け取り、配列aryの先頭から順に、rjustメソッドで、整数a_iを半角スペース埋めm桁にした文字列を生成して出力しています。(a.to_s.rjust(m, " " )
は a.to_s.rjust(m)
でもOK)
# 解答例5 # 1 行目入力 n, m = gets.split.map(&:to_i) # 続く n 行入力 ary = n.times.map { gets.to_i } # 出力 ary.each { |a| puts(a.to_s.rjust(m, " ")) }
Python解答例1
整数n, m と続くn行の整数の配列aryを受け取り、配列aryの先頭から順に、f文字列で、整数a_iを半角スペース埋めm桁にした文字列を生成して出力しています。
# 解答例1 # 1 行目入力 n, m = map(int, input().split()) # 続く n 行入力 ary = [int(input()) for _ in range(n)] # 出力 [print(f"{a:{m}d}") for a in ary]
Python解答例2
整数n, m と続くn行の整数の配列aryを受け取り、配列aryの先頭から順に、formatメソッドで、整数a_iを半角スペース埋めm桁にした文字列を生成して出力しています。
# 解答例2 # 1 行目入力 n, m = map(int, input().split()) # 続く n 行入力 ary = [int(input()) for _ in range(n)] # 出力 [print("{:{}d}".format(a, m)) for a in ary]
Python解答例3
整数n, m と続くn行の整数の配列aryを受け取り、配列aryの先頭から順に、rjustメソッドで、整数a_iを半角スペース埋めm桁にした文字列を生成して出力しています。(str(a).rjust(m, " " )
は str(a).rjust(m)
でもOK)
# 解答例3 # 1 行目入力 n, m = map(int, input().split()) # 続く n 行入力 ary = [int(input()) for _ in range(n)] # 出力 [print(str(a).rjust(m, " ")) for a in ary]
今回のまとめ
整数nから半角スペースm桁埋めの文字列sを生成するにはいろいろな方法がある。
Ruby
s = "%#{m}d" % n
s = "%*d" % [m, n]
s = sprintf("%*d", m, n)
s = format("%*d", m, n)
s = n.to_s.rjust(m, " ")
Python
s = f"{n:{m}d}"
s = "{:{}d}".format(n, m)
s = str(n).rjust(m, " ")
セクション9では整数の0埋め、半角スペース埋めを扱いました。
色々な方法がありましたが、とりあえずはどれか一つを覚えて使っていけばよいと思います。
次のセクションは表形式のデータを任意の出力形式で出力する問題です!