「変数は1文字?それとも1単語?」ABC175C

目次

はじめに

普段、変数は1文字で定義しますか?

変数をアルファベット1文字で定義すればスッキリと書けて複雑な処理も短くまとめられます。

しかし、英単語を利用して変数名を定義したほうがいい、と実感した1問でした。

回答

atcoder.jp

# 座標xからtimes回、距離distだけ移動する
x, times, dist = gets.chomp.split.map(&:to_i)
# 原点からの距離absol
absol = x.abs
# 原点を通りすぎず最接近するまでの手数min
min = absol / dist
# 通り過ぎることができない場合
if min >= times
# できる限り(times回、距離dist)近づいて出力
puts absol - times * dist
# 原点の手前まで最接近してから、原点を奇数回またぐ場合
elsif (times - min).odd?
# 原点の手前まで最接近して、1回またいだときの位置を出力
puts (min + 1) * dist - absol
# 原点の手前まで最接近してから、原点を偶数回またぐ場合
else
# 原点の手前まで最接近したときを出力
puts absol % dist
end

工夫

はじめ、問題文に愚直にx,k,dで入力を受け取っていました。

しかし、回数をtimes、距離をdistanceという英単語を参考に書き換えました。

このおかげで処理の書き間違いを見つけることができました。

(1日テックキャンプをして疲れ切った状態では、特に効果的でした。)

感想

改良するなら、elseの出力内容 absol % dist をfrontのような変数に代入したほうがいいです。

frontの値を出力するだけでなく、計算に再利用して、elsifの出力を front - dist と書きかえたほうが、書き間違いが減り、可読性が向上します。

 

不特定多数のひとにわかりやすい書き方というのは永遠のテーマですね。