第46回 Ruby/Rails勉強会@関西 練習問題

第46回 Ruby/Rails勉強会@関西に行ってきた。

初級者向けレッスンの練習問題に挑戦。

練習 3-1

任意の桁数の数字の文字列があったとき、その数字 0, 1 ... 9 を巡回的に 1, 2 ... 0 に入れ替える方法を考えてください。

問題を誤解していた。314159 が与えられたら 141593 にするのかと思った。

class String
  def rotate!
    self[size] = self[0]
    self[0, 1] = ''
    self
  end

  def rotate
    dup.rotate!
  end
end

"314159".rotate     # => "141593"

でも、違った。

こうだった。

'314159'.tr '0-9', '1-90'    # => "425260"

練習 3-2

カレントディレクトリ内のファイルのファイル名とファイルサイズをカンマで区切ったリストを出力するプログラムを作ってください。

こうですか?

puts Dir.open('.').map{|f|"#{f}, #{File.size(f)}"}
# >> ., 3366
# >> .., 204
# >> .bash_history, 507123
# >> .bash_profile, 16
# >> .bashrc, 1188
    ...

また違った。`cmd` を使う練習だった。

puts %x[ls -la | awk '{printf("%s, %d\\n", $9, $5)}']
# >> ., 3502
# >> .., 204
# >> .bash_history, 507123
# >> .bash_profile, 16
# >> .bashrc, 1188
    ...

こうですね。わかります。

練習 3-3

青空文庫から「我が輩は猫である」をダウンロードして、「ですます」または関西弁に変換してください。

ダウンロードする部分は面倒なので省略。

# -*- coding: utf-8; -*-

open('wagahaiwa_nekodearu.txt', 'r:cp932') do |f|
  f.each_line do |buf|
    puts buf.encode(Encoding::UTF_8).gsub(//, 'にゃん。')
  end
end

 吾輩《わがはい》は猫であるにゃん。名前はまだ無いにゃん。
 どこで生れたかとんと見当《けんとう》がつかぬにゃん。何でも薄暗いじめじめした所でニャーニャー泣いていた事だけは記憶しているにゃん。吾輩はここで始めて人間というものを見たにゃん。
    ...

文字コードの変換が面倒だにゃん。

練習 3-4

open-uri ライブラリを使って、任意の URL リクエストで得られる HTML ドキュメントからハイパーリンクの部分を抽出し、その URL と項目名を出力するソースを書いてください。

[あとでかく]

模範解答

模範解答と逸般的な解答は小波先生のサイト