入力は文字列でなければなりません:
"abcd@gmail.com"
出力は文字列の配列でなければなりません:
["abcd@gmail.com",
"a.bcd@gmail.com",
"ab.cd@gmail.com",
"abc.d@gmail.com",
"a.b.cd@gmail.com",
"a.bc.d@gmail.com",
"a.b.c.d@gmail.com"]
アイデア: 「最初の文字列部分 ("abcd") で可能なすべての組み合わせをドットで作成します。連続するドットは許可されていません。最初の文字列部分 ("abcd") の最初と最後にドットは許可されていません。 "
これは私がこれまでに思いついたものです:
text,s = "abcd".split""
i=0
def first_dot(text)
text.insert 1,"."
end
def set_next_dot(text)
i = text.rindex(".")
text.delete_at i
text.insert(i+1,".")
end
私のアプローチは
- 最初のドットを設定する関数を書く
- 次のドットを設定する関数を書く
- ...(マジック)
ピースの合わせ方がわからない。何か案が?それとももっと良い方法ですか?事前に感謝
編集:解決策を見つけたと思います:)約1時間で投稿します(素晴らしいです->真理値表、2進数、転置)
...そしてここで解決策
s = "abc"
states = s.length
possibilites = 2**states
def set_space_or_dot(value)
value.gsub("0","").gsub("1",".")
end
def fill_with_leading_zeros(val, states)
if val.length < states
"0"*(states-val.length)+val
else
val
end
end
a = Array.new(possibilites,s)
a = a.map{|x| x.split ""}
b = [*0...possibilites].map{|x| x.to_s(2).to_s}
b = b.map{|x| fill_with_leading_zeros x,states}
b = b.map{|x| x.split ""}
c = []
for i in 0 ... a.size
c[i] = (set_space_or_dot (a[i].zip b[i]).join).strip
end