フリップフロップ
フリップフロップをRubyでやろうと思ったのですが、何だか汚くなってしまいました。
DATA.each do |s| if /^3/.match(s)../^5/.match(s) puts s end end __END__ 1111111111 2222222222 3333333333 4444444444 5555555555 6666666666 7777777777 8888888888 9999999999 1111111111 2222222222 3333333333 4444444444 5555555555 6666666666 7777777777 8888888888 9999999999 1111111111 2222222222 3333333333 4444444444 5555555555 6666666666 7777777777 8888888888 9999999999
実行結果です。
3333333333 4444444444 5555555555 3333333333 4444444444 5555555555 3333333333 4444444444 5555555555
何で↓だとうまくいかにゃいのかにゃー。
DATA.each do |s| $_ = s if /^3/../^5/ puts s end end __END__ 1111111111 2222222222 3333333333 4444444444 5555555555 6666666666 7777777777 8888888888 9999999999 1111111111 2222222222 3333333333 4444444444 5555555555 6666666666 7777777777 8888888888 9999999999 1111111111 2222222222 3333333333 4444444444 5555555555 6666666666 7777777777 8888888888 9999999999
追記:
yowaさんから教えていただきました。ありがとうございます。Regexp#~を使えば、明示的に変数 $_ の値との間でのマッチをとれるようです。..演算子を使ったときは$_との暗黙的なマッチはできないらしい、とのこと。
DATA.each do |s| $_ = s if ~/^3/..~/^5/ puts s end end __END__ 1111111111 2222222222 3333333333 4444444444 5555555555 6666666666 7777777777 8888888888 9999999999 1111111111 2222222222 3333333333 4444444444 5555555555 6666666666 7777777777 8888888888 9999999999 1111111111 2222222222 3333333333 4444444444 5555555555 6666666666 7777777777 8888888888 9999999999