そういえば書いてなかったので書いておく。恋愛相性診断の計算方法はこうなっている。
恋愛相性診断
http://kabbala.id774.net/kabbala/
1. 誕生日による相性診断
生年月日を数秘術の計算方法に従い加算後 9 で割り、除算の剰余から誕生数を求める。
例えば 1991 年 12 月 25 日生まれなら
年 1 + 9 + 9 + 1 = 20 → 剰余 2
月 1 + 2 = 3
日 2 + 5 = 7
誕生数 2 + 3 + 7 = 12 → 剰余 3 となるわけである。
ただしこの際 11 の倍数が登場した場合は特別な数とみなし加算をそこで停止する。
コードにすると以下の通りである。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | def nonary(i) return i if i.modulo(11) == 0 r = i.modulo(9) r = 9 if r == 0 r end def kabbala_calc(string) unless string.blank? if string.length == 8 a = string.split("") year = a[0] + a[1] + a[2] + a[3] month = a[4] + a[5] day = a[6] + a[7] result = nonary(year.to_i) + nonary(month.to_i) + nonary(day.to_i) nonary(result) end end end |
こうして求められたのが誕生数である。次に男女の誕生数を加算し 9 で割り、除算の剰余を見る。 1 のとき最も相性が良く、 2 のとき最も相性が良くない。コードにすると以下の通りである。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | def kabbala_rank(m_kabbala, f_kabbala) unless m_kabbala.nil? or f_kabbala.nil? valuation = (m_kabbala + f_kabbala).modulo(9) case valuation when 1 return 'S' when 2 return 'C' when 3,8 return 'A' else return 'B' end end end |
こうして誕生数どうしのランクを S A B C の 4 段階で区別している。
2. 名前による相性診断
まずは名前を数値に変換する。これは平仮名のあいうえおのどの段に位置するかで決定する。あ → 1 、い → 2 という具合である。おそらくコードを見たほうが早い。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | def convert_to_a(string) array = Array.new string.split("").each {|s| case s when "あ","か","さ","た","な","は","ま","や","ら","わ","が","ざ","だ","ば","ぱ","ゃ","ゎ" then array << 1 when "い","き","し","ち","に","ひ","み","り","ぎ","じ","ぢ","び","ぴ","ゐ" then array << 2 when "う","く","す","つ","ぬ","ふ","む","ゆ","る","ぐ","ず","づ","ぶ","ぷ","ゅ" then array << 3 when "え","け","せ","て","ね","へ","め","れ","げ","ぜ","で","べ","ぺ","ゑ" then array << 4 when "お","こ","そ","と","の","ほ","も","よ","ろ","を","ご","ぞ","ど","ぼ","ぽ","ょ","" then array << 5 when "ん" array << 0 end } array end |
こうして配列に格納された数を隣接する数ごとに 2 桁の数値になるまで加算するのである。たとえば「すずきいちろう」さんと「やまだはなこ」さんなら 332 2253 111 115 だから以下のようになる。
1 2 3 4 5 6 7 8 9 10 11 12 | 3 3 2 2 2 5 3 1 1 1 1 1 5 6 5 4 4 7 8 4 2 2 2 2 6 1 9 8 1 5 2 6 4 4 4 8 0 7 9 6 7 8 0 8 8 2 7 6 5 3 5 8 8 6 0 3 1 8 8 3 6 4 6 4 9 6 1 9 0 0 3 5 7 0 9 0 8 2 7 9 9 0 9 6 8 9 5 4 4 9 |
この場合は恋愛確率が 49 点となる。
3. 総合評価
総合評価は上記のふたつを考慮して大雑把に分けたものである。 S または A で 90 点以上なら最高である。これもコードを見たほうが早い。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | def kabbala_total(rank, ratio) case rank when 'A','S' if ratio >= 90 return '最高' elsif ratio >= 70 return 'とても良い' else return 'わりと良い' end when 'B' if ratio >= 90 return 'かなり良い' else return 'まあまあ' end when 'C' if ratio >= 90 return 'わりと良い' else return 'ちょっときびしい' end end end |
完全なランダムなら確率的にみて多くの人が「まあまあ」になるはずなのだが、交際している人の成績を実際に集計してみると「最高」や「良い」のほうに明らかに傾倒しているのが数値的に証明できる。これは占いを統計学的に実証する上で非常に興味深いデータと言えるだろう。
そんなわけでみなさんもぜひお試しください。