結果
| 問題 |
No.5 数字のブロック
|
| ユーザー |
|
| 提出日時 | 2014-12-23 12:52:22 |
| 言語 | Ruby (3.4.1) |
| 結果 |
AC
|
| 実行時間 | 104 ms / 5,000 ms |
| コード長 | 2,566 bytes |
| コンパイル時間 | 117 ms |
| コンパイル使用メモリ | 7,552 KB |
| 実行使用メモリ | 12,672 KB |
| 最終ジャッジ日時 | 2024-11-17 22:15:55 |
| 合計ジャッジ時間 | 3,624 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 34 |
コンパイルメッセージ
Main.rb:57: warning: assigned but unused variable - n Syntax OK
ソースコード
# coding: utf-8
# 無駄にオブジェクト指向
# ブロックのクラス
class Block
# 幅です。読み取り専用で取得できるようにします。
attr_reader :width
# 初期値に幅を指定します。
def initialize(width)
@width = width
end
end
# 箱のクラス
class Box
# 初期値に幅を指定します。
def initialize(width)
# 「空いている幅」です。
# 最初は空なので初期値の幅と同じです。
@empty_width = width
# 箱に収めたブロックのリストです。
# 最初は空です。
@block_list = []
end
# 箱にブロックをいれます。
# ブロックは箱に詰めていれてきます。
# もし、箱に収まれば true を返します。
# 箱からはみ出す場合は false を返します。
def put(block)
# ブロックの幅が空きより以下なのかを調べます。
if @empty_width >= block.width
# 箱に入るので、ブロック分空きを減らします。
@empty_width -= block.width
# リストにブロックを追加します。
@block_list << block
# 収まっているので true を返します。
return true
else
# 収まらないので false を返します。
return false
end
end
# 箱に入っているブロックの数を返します。
def number_of_blocks
# リストの数をそのまま返します。
return @block_list.size
end
end
# 幅を表す L を整数として取得します。
l = gets.to_i
# ブロックの個数を表す N を整数として取得します。
# ただし、Ruby ではこの n は使いません。
n = gets.to_i
# 各ブロックの幅を表す Wi を整数のリストとして取得します。
w_list = gets.split.map(&:to_i)
# 箱のオブジェクトを作ります。
box = Box.new(l)
# ブロックのオブジェクトのリストを作ります。
block_list = w_list.map {|w| Block.new(w)}
# 箱にブロックが一番はいるのは、ブロックを幅の小さい順から並べた場合です。
# なので、ブロックのリストを幅の小さい順に並び替えます。
block_list.sort! {|a, b| a.width <=> b.width}
# 収まらなくなるまで、小さい順から箱に入れていきます。
block_list.each do |block|
if box.put(block)
# 箱に収まったので次へ
next
else
# 箱に収まらなかったので終了
break
end
end
# 最後に箱の中のブロックの数を出力します。
puts box.number_of_blocks