Skip to content
No description, website, or topics provided.
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.gitignore
README.md
ex11.rb
ex12.rb
ex13.rb
ex14.rb
ex21.rb
ex22.rb
ex3.rb

README.md

Ruby初級者向けレッスン 52回

文字列

演習問題1

  1. 文字列の「行数」を数えてみよう。解答例
  2. 文字列の「単語数」を数えてみよう。解答例
  3. 文字列の「文字数」を数えてみよう。解答例
  4. 文字列の「バイト数」を数えてみよう。解答例

演習問題2

  1. 文字列の「単語」の出現回数を数えてみよう。解答例
  2. 文字列の「文字」の出現回数を数えてみよう。解答例

演習問題3

ケブンリッジ問題

#! /usr/bin/env ruby
 
cambridge = <<EOF.chomp
こんにちは みなさん おげんき ですか ? わたしは げんき です 。 この ぶんしょう は イギリス の ケンブリッジ だいがく の けんきゅう の けっか にんげん は もじ を にんしき する とき その さいしょ と さいご の もじさえ あっていれば じゅんばん は めちゃくちゃ でも ちゃんと よめる と いう けんきゅう に もとづいて わざと もじの じゅんばん を いれかえて あります 。 どうです ? ちゃんと よめちゃう でしょ ? ちゃんと よめたら はんのう よろしく
EOF
 
if $0 == __FILE__
   puts cambridge
end 
  • 最初と最後以外を滅茶苦茶に
def cam(s)
  s[0] + 
    s[1...-1].chars.shuffle.join +
    s[-1]
end

s = "cambridge"                 # => "cambridge"
cam(s)                          # => "cdrbmigae"

しかし "cdrbmigae" を "cambridge" とは読めない。

  • 最初と最後以外を 2文字ずつ入れ換える
def cam(s)
  s[0] +
    s[1...-1].chars.each_slice(2).map(&:reverse).join +
    s[-1]
end

s                               # => "cambridge"
cam(s)                          # => "cmarbdige"

どでうす ? ちんゃと よちめゃう でしょ ?

解答例

  • オープンクラスを利用して、String クラスに cambridge!cambridge メソッドと追加する。
    • refinements を利用して、影響範囲を限定する。
  • まず、破壊的メソッドを作成し、非破壊メソッドから破壊的メソッドを呼び出す。
    • 破壊的メソッドは、値が変化しない場合は nil を返す。
  • 元の文字列はヒアドキュメントで作成。
  • 空白 (タブ, 改行) で分割して、その全てに cambridge を呼び出す。
You can’t perform that action at this time.