結果

問題 No.48 ロボットの操縦
ユーザー Leonardone
提出日時 2015-10-11 23:48:51
言語 Ruby
(3.4.1)
結果
AC  
実行時間 90 ms / 5,000 ms
コード長 1,386 bytes
コンパイル時間 48 ms
コンパイル使用メモリ 7,680 KB
実行使用メモリ 12,288 KB
最終ジャッジ日時 2024-11-21 18:27:56
合計ジャッジ時間 3,197 ms
ジャッジサーバーID
(参考情報)
judge1 / judge4
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
other AC * 25
権限があれば一括ダウンロードができます
コンパイルメッセージ
Syntax OK

ソースコード

diff #

#! ruby

X = gets.to_i
Y = gets.to_i
L = gets.to_i

# 頭の中を整理するためメモ

# 目的地が原点のとき
#    方向転換も移動も不要
if X == 0 && Y == 0
    puts "0"

# 目的地がY軸上(X=0)のとき、横移動は必要ない
#    目的地が北(Y>0)のとき
#           方向転換は必要ない
#           ceil(Y / L) 回の移動
#    目的地が南(Y<0)のとき
#           2回方向転換が必要
#           ceil(abs(Y) / L) 回の移動
elsif X == 0
    if Y > 0
        puts (Y.to_f / L.to_f).ceil
    else
        puts (2 + (Y.abs.to_f / L.to_f).ceil)
    end

# 目的地がX軸上(Y=0)のとき、縦移動は必要ない
#           1回方向転換が必要
#           ceil(abs(X) / L) 回の移動
elsif Y == 0
    puts (1 + (X.abs.to_f / L.to_f).ceil)

# 上記以外のケース
#     目的地が北側(Y>0)にあるとき
#          北に ceil(Y/L) 回移動
#          1回方向転換で横向きに
#           ceil(abs(X)/L)回移動
#    目的地が南側(Y<0)にあるとき
#           1回方向転換して横向きに
#           ceil(abs(X)/L)回移動
#           1回方向転換して南向きに
#           ceil(abs(Y)/L)回移動
else
    if Y > 0
        puts ((Y.to_f/L.to_f).ceil + 1 + (X.abs.to_f/L.to_f).ceil)
    else
        puts (1 + (X.abs.to_f/L.to_f).ceil + 1 + (Y.abs.to_f/L.to_f).ceil)
    end
end
0