RUBY-LANG.ORG/JPのコード

何気なくRubyオフィシャルサイトを見ていて、ふとあるコードが書いてあることに気づいた。短いコードなのだが、なかなか面白い、というか、一部分知らないStringメソッドが使われてたので、ちょっと調べてみた。

上記サイトに書かれているコードは次のようなもの。

# Output "I love Ruby"
say = "I love Ruby"
puts say
 
# Output "I *LOVE* RUBY"
say['love'] = "*love*"
puts say.upcase
 
# Output "I *love* Ruby"
# five times
5.times { puts say }

文字列(String)の部分文字列を[]で指定し、そこに文字列を代入すると文字列の置換が出来るようなのです。なるほどねー。
普通使うであろうメソッドでいうところの String#sub! に相当しているようで、String#gsub! 的には使えないみたい。

say = "I love Ruby, I have a glove."
say['love'] = '*love*'
puts say   #=> "I *love* Ruby, I have a glove"

say = "I love Ruby, I have a glove."
say.sub!('love', '*love*')
puts say   #=> "I *love* Ruby, I have a glove"

say = "I love Ruby, I have a glove."
say.gsub!('love', '*love*')
puts say   #=> "I *love* Ruby, I have a g*love*"

どこかおかしいエスカレータの輸送効率の話

Apple増井氏の「エスカレータは歩くな」という話、なんか納得がいかない。と思っていたら、ご自身で簡易検証プログラムをProcessingで書かれ、その結果をまとめておられた。


うーん、この結果からどうして「キチキチに詰めて立つことが最も効果的である。」という結論になるのだろうか。(「危険だから」という話は置いといて)
上記結果一覧でステップ数が一番少ないのは「3. 左側は詰めて立ち、右側は1段あけて2倍速で歩いた場合 ⇒ 2149ステップ」だ。
こっちのほうが「2. 左右ともにキチキチに詰めて立った場合 ⇒ 2213ステップ」より少ないステップ数ですよね?
大変思慮深い増井氏がどうしてこの結果からこういう結論を導くのか、とても不思議で、また、自分が数字がちゃんと読めてないのかと不安になってくる。

倍速の定義

上記検証プロうグラムの文章からわかる定義は、以下のようである。

  • 「1倍速」というのは「エスカレータ上で停止していること」
  • 「2倍速」というのは「エスカレータ上をエスカレータ上昇速度で歩いていること」

結果を見て考える

また、結果を見返してみると、右をあけて歩いても、全員止まっていても、その運送効率は1割も変わらない。これを小さい差とみなし、同等であるとする。
移動している個人を見てみると、急いでいる人は止まっている場合の0.5倍の時間で到達でき、急いでいない人は、全員止まっているときと同じ時間で行ける。
このメリットを考えると、「「3. 左側は詰めて立ち、右側は1段あけて2倍速で歩いた場合」が移動している個人には有利である」と言えるのではないだろうか。

ちょっとした詭弁と前提条件

上記で「個人を見てみる」とか書きながら、実は、その個人が「歩きたい」のか、「止まっていたい」のか、というところは無視している。
つまり、その人がエスカレータに乗る場所に来たときに、「右側に行ける状態でありながら、左側で立てる状態になることを待っている」ことを考えていない。でもまぁ、これぐらいは東京という人口の多さなら無視できる、と考えたい。