カバラ数秘術
2011年中で、誕生数33になるのは
2011年7月22日だけ といった事を調査できます。
実行環境 WinHugs
http://cvs.haskell.org/Hugs/pages/downloading.htm
2011/01/15 投稿
2011/01/16 生まれ日、支配数算出を追加
課題
・型が汚い showとreadを取り除きたい
・検索速度が遅い
検証
Hugs> kabbalahSumYMD' 19690117 [[[1,9,6,9],[25],[2,5],[7]],[[1],[1]],[[1,7],[8]]] Hugs> kabbalahSumYMD 19690117 16 Hugs> kabbalah 19690117 7 # kabbalahSumYMD' は、年月日を分解して、各々を合算します。 年 1969 分解-> 1,9,6,9 合算-> 25 分解-> 2,5 合算->7 月 1 分解-> 1 合算-> 1 日 17 分解-> 1,7 合算-> 8 # kabbalahSumYMD は、年月日の合算結果を合算します。 年7 + 月1 + 日8 = 16 16 分解-> 1,6 合算-> 7 # kabbalah は、上記の計算を一括して行います。 1969/01/17生まれの場合、誕生数は 7 * 条件の検証 # 条件(B),(C)の検証 Hugs> kabbalahSumYMD' 19691122 [[[1,9,6,9],[25],[2,5],[7]],[[11],[11]],[[22],[22]]] Hugs> kabbalahSumYMD' 19690111 [[[1,9,6,9],[25],[2,5],[7]],[[1],[1]],[[11],[11]]] # 条件(A)の検証 Hugs> kabbalahSumYMD' 19840101 [[[1,9,8,4],[22]],[[1],[1]],[[1],[1]]] 年の合算が、22に到達した時点で止まっている。OK # 有名人の誕生日と誕生数を照合 http://ja.wikipedia.org/wiki/島田陽子 1953年5月17日 Hugs> kabbalahSumYMD' 19530517 [[[1,9,5,3],[18],[1,8],[9]],[[5],[5]],[[1,7],[8]]] Hugs> kabbalah 19530517 22 # 誕生数に該当する年月日を検索する 2011年中で、誕生数22になる日付を検索 Hugs> findKabbalah 22 20110101 20111231 [20110711,20110729,20110909,20110918,20110927,20111107,20111116,20111125] 2011年中で、誕生数33になる日付を検索 Hugs> findKabbalah 33 20110101 20111231 [20110722] # 誕生数の動きを見る 2011年1月の誕生数 Hugs> kabbalahList 20110101 20110131 [6,7,8,9,1,11,3,4,5,6,7,8,9,1,11,3,4,5,6,7,8,9,1,11,3,4,5,6,7,8,9] # 生まれ日 と、ペルソナを求める Hugs> kabbalah' 19990701 "tarou" [9,1,2] # ペルソナの計算過程を確認 Hugs> kabbalahRuleNo' "tarou" [[4,1,2,7,6],[20]]
ソース
import Data.Time ------------------------------------------------------ {- カバラ誕生数 -} {- ** 仕様 ** 誕生数の導き方 ttp://www2.interbroad.or.jp/naniwa/kabbalah/fate.html 生年月日を単数変換し、それを合計します。 合計が2桁となった場合、さらに単数変換します。 但し、11と22は特別な数字の為、単数変換は行いません。 (例)1969年1月17日生まれの場合 (A)1969年→1+9+6+9=25 →2+5=7 (B)1月 →1 (C)17日 →1+7=8 (D)A+B+C → 7+1+8=16 →1+6=7 誕生数「7」となります。 (注)数字が11と22の場合は変換を行いません。 ((A)の単数変換の結果が11or22の場合、 (B)11月生まれの場合、 (C)11日、22日生まれの場合、 (D)合計が11、22の場合) -} -- 指定した期間内で、指定した誕生数に一致する生年月日を検索 -- format)findKabbalah n YYYYMMDD YYYYMMDD -- ex)findKabbalah 11 20100101 20110101 findKabbalah n startYMD endYMD = [ymd|ymd<-[startYMD..endYMD],(isDate ymd) && (kabbalah ymd == n)] -- 指定した期間内の誕生数の動きを見る kabbalahList startYMD endYMD = [kabbalah ymd|ymd<-[startYMD..endYMD],(isDate ymd)] -- 指定した生年月日の誕生数を求める -- format)kabbalah YYYYMMDD -- ex)kabbalah 20101114 kabbalah ymd = kabbalahSum(monthDateToList(kabbalahSumYMD ymd)) -- 指定した年月日の誕生数、覚醒数(生まれ日)と、姓名からペルソナ(支配数)を求める -- format)kabbalah' YYYYMMDD name -- ex)kabbalah' YYYYMMDD "yoshida tarou" kabbalah' ymd name = [kabbalahSum(monthDateToList(kabbalahSumYMD ymd))] ++ [kabbalahSum(monthDateToList(getDayFromYMDNum ymd))] ++ [kabbalahRuleNo name] -- 年月日リスト化 kabbalahSumYMD ymd = show( kabbalahSum(numStrToList(getYearFromYMDNum ymd)) + kabbalahSum(monthDateToList(getMonthFromYMDNum ymd)) + kabbalahSum(monthDateToList(getDayFromYMDNum ymd)) ) kabbalahSumYMD' ymd = [kabbalahSum'(numStrToList(getYearFromYMDNum ymd))] ++ [kabbalahSum'(monthDateToList(getMonthFromYMDNum ymd))] ++ [kabbalahSum'(monthDateToList(getDayFromYMDNum ymd))] -- 年月日抽出 getYearFromYMDNum x = show( x `div` 10000) getMonthFromYMDNum x = show((x `mod` 10000) `div` 100) getDayFromYMDNum x = show( x `mod` 100) -- 合計 kabbalahSum xs | isKabbalahNo(sum xs) = sum xs | otherwise = kabbalahSum(numToList(sum xs)) kabbalahSum' xs | isKabbalahNo(sum xs) = [xs] ++ [[sum xs]] | otherwise = [xs] ++ [[sum xs]] ++ kabbalahSum'(numToList(sum xs)) -- 数字を数値の配列に変換 numStrToList[] = [] numStrToList(x:xs) = [read [x]::Integer] ++ numStrToList xs -- 数値を数値の配列に変換 numToList x = numStrToList(show x) -- 月、日に適用する合算条件 monthDateToList[] = [] monthDateToList x | isKabbalahNo (read x) = [read x] | otherwise = numStrToList x -- カバラで使用できる数を定義 --isKabbalahNo x = (x == 11) || (x == 22) || (x `div` 10 == 0 ) -- 例外は11と22のみの場合 isKabbalahNo x = (x `mod` 11 == 0) || (x `div` 10 == 0 ) -- 誕生数33,44等を含む場合 --http://homepage2.nifty.com/ssry/u/kabara3.html ------------------------------------------------------ -- カバラ支配数 -- ペルソナ(カバラ支配数)を求める -- format)kabbalahRuleNo name -- ex)kabbalahRuleNo "tarou" kabbalahRuleNo xs = kabbalahSum(monthDateToList(show(ruleNo xs))) kabbalahRuleNo' xs = [ruleNo' xs] ++ [[ruleNo xs]] ruleNo [] = 0 ruleNo (x:xs) = seimeiMatch x + ruleNo xs ruleNo' [] = [] ruleNo' (x:xs) = [seimeiMatch x] ++ ruleNo' xs -- 文字変換 seimeiMatch c = if (length f == 0) then 0 else (f !! 0) where f = [x|x<-[1..((length seimeiPtn)-1)],inArray c (seimeiPtn !!x)] -- 変換表定義 0番目は使用しない --http://www.aa.alpha-net.ne.jp/nekomata/sub4/kabara.html seimeiPtn = ["","aiqjy","bkr","cgls","dmt","ehn","uvwx","oz","fp"] -- ヒンドゥー数霊術の場合 --http://trpggasuki.com/bluebird/seimei.php --seimeiPtn = ["","aijqy","bckr","gls","dmt","ne","uvwx","oz","fhp"] -- 配列に含まれる場合True inArray a [] = False inArray a (x:xs) = if (x == a) then True else inArray a xs ------------------------------------------------------ -- 存在する日付か判定 isDate ymd = show(ymd) == (getGregorianYMD y m d) where y = read(getYearFromYMDNum ymd) m = read(getMonthFromYMDNum ymd) d = read(getDayFromYMDNum ymd) getGregorianYMD y m d = delHyphen(show(fromGregorian y m d)) delHyphen :: [Char] -> [Char] delHyphen[] = [] delHyphen(x:xs) | x == '-' = "" ++ delHyphen(xs) | otherwise = [x] ++ delHyphen(xs)