ケブンッリジ関数

週末の第 34 回 Ruby/Rails 勉強会でこんな演習問題が出るんじゃないかと予想。

Ruby 関西の ML で発言すると、またネタを潰してしまう可能性があるので、誰も見ていないであろう ここで ひっそりとやってみる。


適当にやると、こんな感じ。

class String
  def cambridge
    "#{self[0]}" \
    "#{self[1..-2].split(//).shuffle.join}" \
    "#{self[-1]}"
  end
end

"ケンブリッジ".cambridge        # => "ケッリブンジ"

これだと、ちゃんと読めない。
「ケブンッリジ」になってないし。


たぶん、2 文字ずつペアで入れ換えるとケブンッリジっぽくなるんだろうな。

class String
  def cambridge!
    1.step(size-1, 2) do |i|
      self[i], self[i+1] = self[i+1], self[i]  if i+1 < size-1
    end
    self
  end

  def cambridge
    self.dup.cambridge!
  end
end

"ケンブリッジ".cambridge!       # => "ケブンッリジ"
"Cambridge".cambridge!          # => "Cmarbdige"

"This".cambridge                # => "Tihs"
"is".cambridge                  # => "is"
"a".cambridge                   # => "a"
"pen".cambridge                 # => "pen"
"".cambridge                    # => ""

できたみたい。

src = "にんげん は たんご の さいしょ の もじと さいごの もじが わかれば あとの もじの じゅんばん が ちがっても なんとなく よめて しまう そうです"

dst = src.split(/[^\w]/).map(&:cambridge).join(' ')

src # => "にんげん は たんご の さいしょ の もじと さいごの もじが わかれば あとの もじの じゅんばん が ちがっても なんとなく よめて しまう そうです"
dst # => "にげんん は たんご の さしいょ の もじと さごいの もじが われかば あとの もじの じんゅばん が ちっがても なとんなく よめて しまう そでうす"