結果
| 問題 |
No.3 ビットすごろく
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2016-08-01 12:16:30 |
| 言語 | Ruby (3.4.1) |
| 結果 |
AC
|
| 実行時間 | 131 ms / 5,000 ms |
| コード長 | 766 bytes |
| コンパイル時間 | 57 ms |
| コンパイル使用メモリ | 7,680 KB |
| 実行使用メモリ | 19,072 KB |
| 最終ジャッジ日時 | 2024-07-01 08:01:55 |
| 合計ジャッジ時間 | 4,684 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 33 |
コンパイルメッセージ
Syntax OK
ソースコード
inputs = STDIN.readlines.map(&:chomp)
N = inputs[0].to_i
class Koma
def initialize(pos)
@pos = pos
end
attr_reader :pos
def ==(other)
@pos == other.pos
end
def valid?
1 <= @pos && @pos <= N
end
def goal?
@pos == N
end
def next_cands
ons = @pos.to_s(2).count('1')
[Koma.new(@pos + ons), Koma.new(@pos - ons)].select(&:valid?)
end
end
def search
queue = [[Koma.new(1)]]
visited = { 1 => true }
until queue.empty?
path = queue.shift
cands = path.last.next_cands.reject { |cand| visited[cand.pos] }
return path.size + 1 if cands.any?(&:goal?)
queue.push(*cands.map { |cand| path + [cand] })
visited.update(cands.map { |cand| [cand.pos, true] }.to_h)
end
-1
end
puts N == 1 ? 1 : search