前提・実現したいこと
AtCoderのATC001-A問題です。
問題文
上記のページを参考に、コードを作成したのですが提出した際にREとWAが発生します。
REが発生した時はエラーメッセージもなく、WAが発生した時はどのような入力がされたときなのかわかりません。
エラーメッセージの確認方法などの、原因を特定する方法があれば教えていただきたいです。
また、ソースコードにおかしい点があれば指摘して頂けますと幸いです。
該当のソースコード
Ruby
1$H,$W=gets.chomp.split.map(&:to_i) 2$map=$H.times.map { gets.chomp.chars } 3$reached=Array.new($H){Array.new($W,0)} 4$a=false 5 6# 探索するメソッド 7def t(y,x) 8 return if y<0 || y>=$H # 枠外 9 return if x<0 || x>=$W # 枠外 10 return if $map[y][x]=='#' #壁 11 return if $reached[y][x]==1 # 来た時があったら 12 $a=true if $map[y][x]=='g' 13 14 $reached[y][x]=1 15 16 t(y-1,x)#上 17 t(y,x+1)#右 18 t(y+1,x)#下 19 t(y,x-1)#左 20end 21 22#startの座標取得 23x = -1 24y = -1 25catch :out do #ループから抜け出すための処理 26 $H.times do |j| 27 $W.times do |i| 28 if $map[i][j]=='s' 29 x=j 30 y=i 31 throw :out 32 end 33 end 34 end 35end 36 37t(y,x) 38puts $a ? 'Yes' : 'No' 39
試したこと
・問題文に掲載されている入力例からは正しく出力されていました。
・テストケースが保存されている場所は見つけましたが、今回の問題は置いていないようでした。
テストケース
ご指摘いただき、修正したコード
Ruby
1$H,$W=gets.chomp.split.map(&:to_i) 2$map=$H.times.map { gets.chomp.chars } 3$reached=Array.new($H){Array.new($W,0)} 4$a=false 5 6def t(y,x) 7 return if y<0 || y>=$H 8 return if x<0 || x>=$W 9 return if $map[y][x]=='#' 10 return if $reached[y][x]==1 11 $a=true if $map[y][x]=='g' 12 13 $reached[y][x]=1 14 15 t(y-1,x) 16 t(y,x+1) 17 t(y+1,x) 18 t(y,x-1) 19end 20 21y,x = $map.each_with_index{|line, ix| 22 found = line.index('s') 23 break [ix,found] if found 24} 25 26t(y,x) 27puts $a ? 'Yes' : 'No'
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/05/19 09:31
2019/05/19 10:20
2019/05/19 11:23
2019/05/19 11:45
2019/05/19 12:48