それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

文字列に文字列を挟み込んでバリエーションを作るruby - Gmailのドットバリエーションを全部作る

Gmailなどはメアドの文字列に "." をいくつ挟み込んでも同じとみなされる。どうせならバリエーションを沢山作ってみた。

ruby で文字列をズラす

name = "takuya"
(1...name.size).to_a.combination(1).to_a.flatten.each{|e| puts name.clone.insert(e,".")}
t.akuya
ta.kuya
tak.uya
taku.ya
takuy.a

複数個挟み込む

これを応用すると、文字の一つ一つに、文字を出来る限り挟みこむ事ができた

name = "takuya"
puts name.size.times.map{|len|
  (1...name.size).to_a.combination(len).to_a.map{|e|
    str=name;
    e.each_with_index{|pos,idx|
      str= str.clone.insert(pos+idx,".") 
    };
    str
  }
};

#実行結果
takuya
t.akuya
ta.kuya
tak.uya
taku.ya
takuy.a
t.a.kuya
t.ak.uya
t.aku.ya
t.akuy.a
ta.k.uya
ta.ku.ya
ta.kuy.a
tak.u.ya
tak.uy.a
taku.y.a
t.a.k.uya
t.a.ku.ya
t.a.kuy.a
t.ak.u.ya
t.ak.uy.a
t.aku.y.a
ta.k.u.ya
ta.k.uy.a
ta.ku.y.a
tak.u.y.a
t.a.k.u.ya
t.a.k.uy.a
t.a.ku.y.a
t.ak.u.y.a
ta.k.u.y.a
t.a.k.u.y.a

たのしい。Array#combination、Enumerable#with_indexが 採用されたのでずいぶんコードが楽になった。


String#insert の挙動については、以前書いたモンキーパッチ参照