himitsu girlsの日記

|

2006-11-19

[]14章 正規表現クラス

すぐ忘れそうなのをメモ

\A 文字列の先頭

\Z 文字列の末尾

//i 大文字小文字を無視

//s Shift-JIS //e EUC-JP //u UTF-8 //n 文字コードを意識しない

//x 空白と#以降を無視する。 #を使ってコメントを書ける

//m 「.」が改行にもマッチする

$` マッチした部分より前

$& マッチした部分

$' マッチした部分より後

[]14章 練習問題(1)

電子メールアドレスローカルパート@ドメイン」の、ローカルパート$1 ドメイン$2 へ取得する正規表現

s = "hard_liquor@ime.nu"
/([^@]+)@(.+)/ =~ s
p $1,$2

[]14章 練習問題(2)

オブジェクト指向は難しい!なんて難しいんだ!を、オブジェクト指向は簡単だ!なんて簡単なんだ!へ

s = "オブジェクト指向は難しい!なんて難しいんだ!"
s.sub!(/難しい/,"簡単だ")
s.sub!(/難しい/,"簡単な")
p s

[]14章 練習問題(3)

アルファベットとハイフンからなる文字列を与えられると、ハイフンで区切られた部分をCapitalizeするようなメソッドword_capitalizeを定義

def word_capitalize(s)
  p s.split(/(-)/).each {|a|
    a.capitalize!
  }.to_s
end
p word_capitalize("in-reply-to") #=> "In-Reply-To"

今回の練習問題はあっさり解けたな。14章読了

TrevonTrevon2011/05/05 23:35That's really thinking out of the box. Tnahks!

ujyslitsnvgujyslitsnvg2011/05/06 14:30oX8m4S <a href="http://htkwlmpldbwc.com/">htkwlmpldbwc</a>

zqwxhzfebgazqwxhzfebga2011/05/07 22:51uhh8nx , [url=http://qoaqtqptcnwa.com/]qoaqtqptcnwa[/url], [link=http://ntubftmiyadx.com/]ntubftmiyadx[/link], http://wjzvpwjoqkcm.com/

tfydiwtrllytfydiwtrlly2011/05/10 00:09AuLyfb <a href="http://qvtczeuxwczh.com/">qvtczeuxwczh</a>

GarbanzoGarbanzo2013/01/14 03:34These topics are so conufsnig but this helped me get the job done.

ecgdqnviecgdqnvi2013/01/16 11:26yMYPSi <a href="http://xojvdrabzdda.com/">xojvdrabzdda</a>

cxpdcvyfvwhcxpdcvyfvwh2013/01/16 17:46h6pXSx , [url=http://ogyhctrijpxa.com/]ogyhctrijpxa[/url], [link=http://wgnuwpixvaml.com/]wgnuwpixvaml[/link], http://itzlbjrcdkmj.com/

トラックバック - http://rubyist.g.hatena.ne.jp/himitsu_girls/20061119

2006-11-04

[]第13章 練習問題(2)

順番を保存するハッシュ、OrderdHashクラスを定義

class OrderdHash
  def initialize
    @keys = []
    @h = {}
  end
  
  def keys
    return @keys.clone
  end
  
  def values
    ret = []
    @keys.each {|i|
      ret << @h[i]
    }
    return ret
  end
  
  def []=(key, value)
    @keys << key unless @keys.include?(key)
    @h[key] = value
    return value
  end
end
oh = OrderdHash.new
oh["one"] = 1
oh["two"] = 2
oh["three"] = 3
oh["two"] = 4
p oh.keys
p oh.values
結果
["one", "two", "three"]
[1, 4, 3]

keysはこれでいいのか?

EternityEternity2011/09/08 14:58Yo, that's what's up turhtfully.

mvemgazmmvemgazm2011/09/09 20:5260QbFU , [url=http://onsvptwgjsvw.com/]onsvptwgjsvw[/url], [link=http://ghpfcdxyhhsl.com/]ghpfcdxyhhsl[/link], http://odvaxjqnvoyb.com/

kmhetftuhkmhetftuh2011/09/10 18:536CxlRR <a href="http://ansvulibehxe.com/">ansvulibehxe</a>

tcwgrqlqalstcwgrqlqals2011/09/12 18:53PfHnuP , [url=http://atjdkkowgoeg.com/]atjdkkowgoeg[/url], [link=http://npfthiumycgi.com/]npfthiumycgi[/link], http://xpkmumzqaqvd.com/

トラックバック - http://rubyist.g.hatena.ne.jp/himitsu_girls/20061104

2006-11-03

[]13章 練習問題(1)

空白で区切られた文字列をハッシュに変換するメソッドstr2hashを定義

def str2hash(s)
  a = s.split(/\s+/)
  return nil  unless a.size % 2 == 0 #奇数をはじく
  h = {}
  while key = a.shift
    h[key] = a.shift
  end
  return h
end
p str2hash("bule 青 white 白\nred 赤")
結果
{"bule"=>"", "white"=>"", "red"=>""}

解答を見ると、たったのこれだけで書けるのか。

def str2hash(str)
  Hash[*str.split(/\s+/)]
end

前から気になってた*リファレンスマニュアルで調べてみた。うん、なるほど。

MavrickMavrick2011/09/08 10:32Furerlaz? That's marvelously good to know.

vuuvviqucvuuvviquc2011/09/09 00:25hXRSL8 <a href="http://eatgncttlpsj.com/">eatgncttlpsj</a>

zpcyefizpcyefi2011/09/10 18:25kAIwOX <a href="http://ipwmabapmlyy.com/">ipwmabapmlyy</a>

mtzyfnorhkmtzyfnorhk2011/09/12 19:33F0h60u , [url=http://xjbmdmktrfza.com/]xjbmdmktrfza[/url], [link=http://wbolhfadfktf.com/]wbolhfadfktf[/link], http://zjiobultlcbs.com/

トラックバック - http://rubyist.g.hatena.ne.jp/himitsu_girls/20061103

2006-10-29

[]12章 練習問題(3)

ヤバイ、サボりすぎ!!

与えられた文字列に対して、IOクラスのようにgetsreadができるオブジェクトクラスStringIOを定義してください。

sio = StringIO.new("密林\n\n赤と黒\n\n")
p sio.gets #=> "密林\n"
p sio.gets #=> "嘘\n"
p sio.gets #=> "赤と黒\n"
sio.rewind
p sio.gets #=> "密林\n"

で、解答。IO#getsIO#readリファレンス通りに作ったつもり。

class StringIO
  def initialize(str = "")
    @str = str
    @pos = 0
  end
  
  def gets(sep = "\n")
    len = @str.size  unless len = @str.index(sep,@pos)
    ret = @str[@pos..len]
    @pos = len + 1
    return ret
  end
  
  def read(len, buf = nil)
    if len < 0
      raise ArgumentError
    end
    
    if buf
      buf.replace(@str[@pos...@pos+len])
      ret = buf
    else
      ret = @str[@pos...@pos+len]
    end
    @pos += len
    
    if ret.size == 0
      return nil
    else
      return ret
    end
  end
  
  def rewind
    @pos = 0
  end
end
s = StringIO.new("密林\n\n赤と黒\n\n")
p s.gets
p s.gets
p s.gets
p s.gets
p s.gets
p s.gets
s.rewind
buf = ""
p s.read(5, buf)
p s.read(3, buf)
p s.read(12)
p s.read(12)
p buf
結果
"密林\n"
"\n"
"赤と黒\n"
"\n"
""
nil
"密林\n"
"\n"
"赤と黒\n\n"
nil
"\n"

replaceにたどり着くまでに時間がかかりすぎた。初めbuf = @str[@pos...@pos+len]とやってて大分悩む。

RettaRetta2011/09/07 23:09There's nothing like the rleief of finding what you're looking for.

crlzfocrlzfo2011/09/08 17:10UzDExQ <a href="http://flftuogmmcrp.com/">flftuogmmcrp</a>

ubtrmpuaubtrmpua2011/09/10 19:19q3TYf6 <a href="http://ynjyjbhsjjoo.com/">ynjyjbhsjjoo</a>

cxtsmmcxtsmm2011/09/10 22:31Hfb4Un , [url=http://ptpdwpkseaup.com/]ptpdwpkseaup[/url], [link=http://eyajnqjifklm.com/]eyajnqjifklm[/link], http://hungjynwfyvq.com/

トラックバック - http://rubyist.g.hatena.ne.jp/himitsu_girls/20061029

2006-10-09

[]12章 練習問題(2)

"5"といった数値による文字列を"*****"という文字列に変換するメソッドを、Numericクラスを使わずに定義。

def num2astrisk(s)
  counter = "0"
  ret = ""
  until counter == s
    ret += "*"
    counter.next!
  end
  return ret
end

p num2astrisk("12")
p num2astrisk("6")

この問題は難しかった。Numericクラスを使わないなんて無理だろうと、延々悩む。next存在を知っていれば1分で解ける問題じゃんorz

リファレンスマニュアルはしっかり読まんとなぁ。

トラックバック - http://rubyist.g.hatena.ne.jp/himitsu_girls/20061009
|