そういえば書いてなかったので書いておく。恋愛相性診断の計算方法はこうなっている。

恋愛相性診断
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 の倍数が登場した場合は特別な数とみなし加算をそこで停止する。

コードにすると以下の通りである。

  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 のとき最も相性が良くない。コードにすると以下の通りである。

  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 という具合である。おそらくコードを見たほうが早い。

  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 だから以下のようになる。

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 点以上なら最高である。これもコードを見たほうが早い。

  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

完全なランダムなら確率的にみて多くの人が「まあまあ」になるはずなのだが、交際している人の成績を実際に集計してみると「最高」や「良い」のほうに明らかに傾倒しているのが数値的に証明できる。これは占いを統計学的に実証する上で非常に興味深いデータと言えるだろう。

そんなわけでみなさんもぜひお試しください。

恋愛相性診断
http://kabbala.id774.net/kabbala/

投稿日: 作成者: 774