【Ruby】【アルゴリズム】重複組み合わせ。シンプル!
問題
0から9までの数字を重複を許して4つ選ぶ時、
答えはいくつありますか?
若干眠くて口調が変だよ。
(例)
0011 と 1001 と 0101 は同じ
1112 と 1122 は違う
答え(全列挙型Ver)
最初に思いついたのは、0~9999を全部並べて、一個ずつ確認する方法。
既に存在する組み合わせはスキップする。
result = [] i = 0 while i < 10000 candidate = i.to_s.split("") (4 - candidate.length).times do candidate << "0" end candidate.sort! acceptable = true result.each do |data| if data == candidate #並び替えた後 既存と同じ組み合わせになる物は無視 acceptable = false break end end result << candidate if acceptable i += 1 end p result.length
答え(シンプルVer!)
どうやって解いたらもっとスマートかな??と探していたら
for文で事足りますよね、という記事を発見。
確かに!
result =[] i = 0 while i < 10 j = i while j < 10 k = j while k < 10 m = k while m < 10 result << "#{i},#{j},#{k},#{m}" m += 1 end k += 1 end j += 1 end i += 1 end p result.length
早い!
すごい!