2019年3月30日土曜日

元号ゲーム(1)

前回の元号予想プログラムを少しチューニングした。条件は次のとおり。

(1) これまでの日本の元号に登場した漢字の範囲で考える。ただし1文字目と2文字目は区別して考える(4文字元号は2文字元号に読み替える)。
(2) 1文字目の漢字と2文字目の漢字のそれぞれの出現確率の積で順序づける。
(3) 既存のアジア(日本,中国,朝鮮,ベトナム,台湾)の元号とそれを入れ替えたものに一致するものは排除する(例えば,「安久」は排除される)。
(4) 慶応,明治,大正,昭和,平成の各漢字は排除する。
(5) 画数の多い漢字,MTSHで始まる漢字などを排除する(「など」のところにプログラマの主観が入る)

昭和とか平成の場合を考えると,このアルゴリズムはよくないことがわかっているが,目をつぶることにしよう(そりゃ,「苦節」とか「余命」とか「結婚」とか「懲役」とか「西暦」とか「卍」とか「タピオカ」のほうがおもしろいに決まっている)。とにかくこの条件で結果抽出されたものが下記のとおり。

(250, 839, 26, 159, 17)
("弘久", 0.020164609053497942)
("永化", 0.019753086419753086)
("元化", 0.018518518518518517)
("万安", 0.016049382716049384)
("万元", 0.014814814814814815)
("文弘", 0.01316872427983539)
("弘文", 0.011522633744855968)
("万久", 0.008641975308641974)
("文万", 0.006584362139917695)
("文同", 0.006584362139917695)
("文字", 0.006584362139917695)
("永同", 0.006584362139917695)
("永字", 0.006584362139917695)
("元万", 0.006172839506172839)
("元同", 0.006172839506172839)
("元字", 0.006172839506172839)
("安化", 0.006172839506172839)
("斉永", 0.005761316872427984)
("朱永", 0.005761316872427984)
("白永", 0.005761316872427984)
("至永", 0.005761316872427984)
("斉安", 0.005349794238683128)
("昌安", 0.005349794238683128)
("朱安", 0.005349794238683128)
("白安", 0.005349794238683128)
("至安", 0.005349794238683128)
("万文", 0.0049382716049382715)
("斉元", 0.0049382716049382715)
("昌元", 0.0049382716049382715)
("朱元", 0.0049382716049382715)
("白元", 0.0049382716049382715)
("万化", 0.003703703703703704)
("弘万", 0.002880658436213992)
("弘同", 0.002880658436213992)
("弘字", 0.002880658436213992)
("斉久", 0.002880658436213992)
("昌久", 0.002880658436213992)
("朱久", 0.002880658436213992)
("白久", 0.002880658436213992)
("至久", 0.002880658436213992)
("万弘", 0.0024691358024691358)
("久化", 0.0024691358024691358)
("安万", 0.00205761316872428)
("安同", 0.00205761316872428)
("安字", 0.00205761316872428)
("久弘", 0.0016460905349794238)
("斉文", 0.0016460905349794238)
("昌文", 0.0016460905349794238)
("朱文", 0.0016460905349794238)
("白文", 0.0016460905349794238)

Juliaが使える方は,これで適当に遊んでください。
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
function exch(knj)
#
# knj input kanji string with 2 char
# return exchanged string with 2 char
return knj[4]*knj[1]
end

function gfrq(c,n,r,m)
#
# c input array of kanji char
# n size of c  
# r output array of sorted (kanji, count)
# m size of r
#
  sort!(c)
  k=0
  for j=2:n
    k=k+1
    if c[j]!=c[j-1]
      push!(r,(c[j-1],k))
      k=0
    end
  end
  sort!(r, by=x->x[2], rev=true)
  m=length(r)
#  println((m,r))
end

#japan
g1="大化,白雉,朱鳥,大宝,慶雲,和銅,霊亀,養老,神亀,天平,感宝,勝宝,宝字,神護,景雲,宝亀,天応,延暦,大同,弘仁,天長,承和,嘉祥,仁寿,斉衡,天安,貞観,元慶,仁和,寛平,昌泰,延喜,延長,承平,天慶,天暦,天徳,応和,康保,安和,天禄,天延,貞元,天元,永観,寛和,永延,永祚,正暦,長徳,長保,寛弘,長和,寛仁,治安,万寿,長元,長暦,長久,寛徳,永承,天喜,康平,治暦,延久,承保,承暦,永保,応徳,寛治,嘉保,永長,承徳,康和,長治,嘉承,天仁,天永,永久,元永,保安,天治,大治,天承,長承,保延,永治,康治,天養,久安,仁平,久寿,保元,平治,永暦,応保,長寛,永万,仁安,嘉応,承安,安元,治承,養和,寿永,元暦,文治,建久,正治,建仁,元久,建永,承元,建暦,建保,承久,承応,元仁,嘉禄,安貞,寛喜,貞永,天福,文暦,嘉禎,暦仁,延応,仁治,寛元,宝治,建長,康元,正嘉,正元,文応,弘長,文永,建治,弘安,文永,建治,弘安,正応,永仁,正安,乾元,嘉元,徳治,延慶,応長,正和,文保,元応,元亨,正中,嘉暦,元徳,元弘,正慶,建武,延元,興国,正平,建徳,文中,天授,弘和,元中,暦応,康永,貞和,観応,文和,延文,康安,貞治,応安,永和,康暦,永徳,至徳,嘉慶,康応,明徳,応永,正長,永享,嘉吉,文安,宝徳,享徳,康正,長禄,寛正,文正,応仁,文明,長享,延徳,明応,文亀,永正,大永,享禄,天文,弘治,永禄,元亀,天正,文禄,慶長,元和,寛永,正保,慶安,承応,明暦,万治,寛文,延宝,天和,貞享,元禄,宝永,正徳,享保,元文,寛保,延享,寛延,宝暦,明和,安永,天明,寛政,享和,文化,文政,天保,弘化,嘉永,安政,万延,文久,元治,慶応,明治,大正,昭和,平成,"
#china
g2="建元,元光,元朔,元狩,元鼎,元封,太初,天漢,太始,征和,後元,始元,元鳳,元平,本始,地節,元康,神爵,五鳳,甘露,黄龍,初元,永光,建昭,竟寧,建始,河平,陽朔,鴻嘉,永始,元延,綏和,建平,太初,元将,元寿,元始,居摂,初始,始建,天鳳,地皇,更始,建武,建武,中元,永平,建初,元和,章和,永元,元興,延平,永初,元初,永寧,建光,延光,永建,陽嘉,永和,漢安,建康,永憙,本初,建和,和平,元嘉,永興,永寿,延熹,永康,建寧,熹平,光和,中平,光熹,昭寧,永漢,初平,興平,建安,延康,黄初,太和,青龍,景初,正始,嘉平,正元,甘露,景元,咸熙,章武,建興,延熙,景耀,炎興,黄武,黄龍,嘉禾,赤烏,太元,神鳳,建興,五鳳,太平,永安,元興,甘露,宝鼎,建衡,鳳凰,天冊,天璽,天紀,泰始,咸寧,太康,太熙,永熙,永平,元康,永康,永寧,太安,永安,建武,永興,光熙,永嘉,建興,建武,大興,永昌,太寧,咸和,咸康,建元,永和,升平,隆和,興寧,太和,咸安,寧康,太元,隆安,大亨,元興,義熙,元熙,桓玄,天康,永鳳,河瑞,光興,嘉平,建元,麟嘉,漢昌,光初,太和,建平,延熙,建武,太寧,青龍,永寧,永興,元璽,光寿,建熙,建初,建興,晏平,玉衡,玉恒,漢興,太和,嘉寧,建興,和平,升平,皇始,寿光,永興,甘露,建元,太安,太初,延初,元光,燕元,建興,永康,建始,延平,青龍,建平,長楽,光始,建始,燕興,更始,昌平,建明,建平,建武,中興,建平,太上,正始,太平,太興,白雀,建初,皇初,弘始,永和,建義,太初,更始,永康,建弘,永弘,龍昇,鳳翔,昌武,真興,承光,勝光,太安,麟嘉,龍飛,承康,咸寧,神鼎,太初,建和,弘昌,嘉平,庚子,建初,嘉興,永建,神璽,天璽,永安,玄始,承玄,義和,承和,承平,真興,承陽,縁禾,太縁,永初,景平,元嘉,太初,孝建,大明,永光,景和,泰始,泰豫,元徽,昇明,建元,永明,隆昌,延興,建武,永泰,永元,中興,天監,普通,大通,大通,大同,大同,太清,大宝,天正,太始,承聖,天成,紹泰,太平,天啓,大定,天保,広運,永定,天嘉,天康,光大,太建,至徳,禎明,登国,皇始,天興,天賜,永興,神瑞,泰常,始光,神䴥,延和,太延,太平,真君,正平,承平,興安,興光,太安,和平,天安,皇興,延興,承明,太和,景明,正始,永平,延昌,熙平,神亀,正光,孝昌,武泰,建義,永安,建明,普泰,中興,太昌,永興,永熙,天平,元象,興和,武定,大統,天保,乾明,皇建,太寧,河清,天統,武平,隆化,徳昌,承光,武成,保定,天和,建徳,宣政,大成,大象,大定,開皇,仁寿,大業,義寧,皇泰,武徳,貞観,永徽,顕慶,龍朔,麟徳,乾封,総章,咸亨,上元,儀鳳,調露,永隆,開耀,永淳,弘道,嗣聖,文明,光宅,垂拱,永昌,載初,神龍,景龍,唐隆,景雲,太極,延和,先天,開元,天宝,至徳,乾元,上元,宝応,広徳,永泰,大暦,建中,興元,貞元,永貞,元和,長慶,宝暦,大和,開成,会昌,大中,咸通,乾符,広明,中和,光啓,文徳,龍紀,大順,景福,乾寧,光化,天復,天祐,天授,如意,長寿,延載,証聖,天冊,万歳,万歳,登封,万歳,通天,神功,聖暦,久視,大足,長安,仁安,大興,宝暦,中興,正暦,永徳,朱雀,太始,建興,咸和,建初,承平,義熙,甘露,章和,永平,和平,建昌,延昌,延和,義和,重光,延寿,賛普,長寿,見龍,上元,元封,応道,龍興,全義,大豊,保和,天啓,建極,法尭,貞明,大同,嵯耶,中興,安国,始元,天瑞,景星,安和,貞祐,初歴,孝治,天応,尊聖,興聖,大明,鼎新,光聖,文徳,神武,文経,至治,明徳,広徳,順徳,明政,広明,明応,明統,明聖,明治,明啓,乾興,明通,正治,聖明,天明,保安,正安,正徳,保徳,明侯,上徳,広安,上明,保定,建安,天祐,上治,天授,開明,天政,文安,日新,文治,永嘉,保天,広運,永貞,大宝,龍興,盛明,建徳,利貞,盛徳,嘉会,元亨,安定,鳳歴,元寿,天開,天輔,仁寿,道隆,利正,興正,天定,彝泰,開平,乾化,鳳歴,貞明,龍徳,同光,天成,長興,応順,清泰,天福,開運,天福,乾祐,広順,顕徳,天復,天祐,武義,順義,乾貞,大和,天祚,昇元,保大,中興,交泰,天宝,宝大,宝正,龍啓,永和,通文,永隆,天徳,乾亨,白龍,大有,光天,応乾,乾和,大宝,天復,武成,永平,通正,天漢,光天,乾徳,咸康,明徳,広政,乾祐,天会,広運,応天,同慶,天尊,中興,天興,天寿,建隆,乾徳,開宝,太平,興国,雍熙,端拱,淳化,至道,咸平,景徳,大中,祥符,天禧,乾興,天聖,明道,景祐,宝元,康定,慶暦,皇祐,至和,嘉祐,治平,熙寧,元豊,元祐,紹聖,元符,建中,靖国,崇寧,大観,政和,重和,宣和,靖康,建炎,紹興,隆興,乾道,淳熙,紹熙,慶元,嘉泰,開禧,嘉定,宝慶,紹定,端平,嘉熙,淳祐,宝祐,開慶,景定,咸淳,徳祐,景炎,祥興,神冊,天賛,天顕,会同,大同,天禄,応暦,保寧,乾亨,統和,開泰,太平,景福,重熙,清寧,咸雍,太康,太安,寿昌,乾統,天慶,保大,甘露,建福,徳興,神暦,延慶,康国,咸清,紹興,崇福,天禧,収国,天輔,天会,天眷,皇統,天徳,貞元,正隆,大定,明昌,承安,泰和,大安,崇慶,至寧,貞祐,興定,元光,正大,開興,天興,顕道,開運,広運,大慶,天授,礼法,延祚,延嗣,寧国,天祐,垂聖,福聖,承道,奲都,拱化,乾道,天賜,礼盛,国慶,大安,天安,礼定,天儀,治平,天祐,民安,永安,貞観,雍寧,元徳,正徳,大徳,大慶,人慶,天盛,乾祐,天慶,応天,皇建,光定,乾定,宝義,中統,至元,元貞,大徳,至大,皇慶,延祐,至治,泰定,致和,天順,天暦,至順,元統,至元,至正,至正,宣光,天元,洪武,建文,永楽,洪熙,宣徳,正統,景泰,天順,成化,弘治,正徳,嘉靖,隆慶,万暦,泰昌,天啓,崇禎,弘光,隆武,紹武,永暦,天命,天聡,崇徳,順治,康熙,雍正,乾隆,嘉慶,道光,咸豊,祺祥,同治,光緒,保慶,宣統,民国,洪憲,大同,康徳,"
#korea
g3="永楽,延寿,建元,開国,大昌,鴻済,建福,仁平,太和,慶雲,正開,武泰,聖冊,水徳,万歳,政開,天授,光徳,天開,開国,建陽,光武,光武,隆熙,大韓,民国,"
#vietnam
g4="天徳,太平,天福,興統,応天,景瑞,順天,天成,通瑞,乾符,有道,明道,天感,聖武,崇興,大宝,龍瑞,太平,彰聖,嘉慶,龍彰,天嗣,天貺,宝象,神武,太寧,英武,昭勝,広祐,会豊,龍符,会祥,大慶,天符,睿武,天符,慶寿,天順,天彰,宝嗣,紹明,大定,政隆,宝応,天感,至宝,貞符,天資,嘉瑞,天嘉,宝祐,治平,龍応,建嘉,天彰,有道,建中,天応,政平,元豊,紹隆,宝符,紹宝,重興,興隆,大慶,開泰,開祐,紹豊,大治,大定,紹慶,隆慶,昌符,光泰,建新,聖元,紹成,開大,興慶,重光,天慶,順天,紹平,大宝,大和,延寧,天興,光順,洪徳,景統,泰貞,端慶,洪順,光紹,統元,明徳,大正,広和,永定,景暦,光宝,淳福,崇康,延成,端泰,興治,洪寧,武安,宝定,康佑,乾統,隆泰,順徳,元和,順平,天祐,正治,洪福,嘉泰,光興,慎徳,弘定,永祚,徳隆,陽和,福泰,慶徳,盛徳,永寿,万慶,景治,陽徳,徳元,永治,正和,永盛,保泰,永慶,龍徳,永佑,景興,昭統,泰徳,光中,景盛,宝興,嘉隆,明命,紹治,嗣徳,協和,建福,咸宜,同慶,成泰,維新,啓定,保大,"
#taiwan
g5="永暦,康熙,永和,雍正,乾隆,順天,天運,嘉慶,光明,道光,咸豊,祺祥,同治,光緒,永清,大靖,民国,"
#east-asia
g=g1*g2*g3*g4*g5
println((div(length(g1),3),div(length(g2),3),div(length(g3),3),div(length(g4),3),div(length(g5),3)))
m=div(length(g),3)
#
# making array of tupples with numbered era names of east asia
#
c=fill((" ",0),m)
for i=1:7:m*7
  c[div(i,7)+1]=(g[i]*g[i+3],div(i,7)+1)
end
#
# the first and the second characters of the Japanese Gengo
#
n=div(length(g1),3)
a=fill(' ',n)
b=fill(' ',n)
for i=1:7:n*7
  a[div(i,7)+1]=g1[i]
  b[div(i,7)+1]=g1[i+3]
end
p=[ ]
q=[ ]
mp=0
mq=0
gfrq(a,n,p,mp)
gfrq(b,n,q,mq)
mp=length(p)
mq=length(q)
#
r=[ ]
for j in 1:mp
  for k in 1:mq
    if p[j][1]!=q[k][1]
      push!(r,[string(p[j][1],q[k][1]),p[j][2]*q[k][2]/(mp*mq)])
    end
  end
end
mr=length(r)
#
# exclude previousely used names of era (Japan China Korea Vietnum Taiwan)
# & their exchanges
#
for i in 1:mr, j in 1:m
  if r[i][1] == c[j][1] || r[i][1] == exch(c[j][1])
    r[i][2]=0
  end
#
# exlude recently used characters & complex characters & MTSH characters
#
  if occursin(r[i][1][1],"慶応明治大正昭和平成寛嘉亀徳康暦承雉吉祥福禄寿喜建延享亨興景観祚感乾老雲霊国勝武衡護養銅授泰神政天中長禎貞宝保仁")==true || 
     occursin(r[i][1][4],"慶応明治大正昭和平成寛嘉亀徳康暦承雉吉祥福禄寿喜建延享亨興景観祚感乾老雲霊国勝武衡護養銅授泰神政天中長禎貞宝保仁")==true
    r[i][2]=0
  end
end
#
sort!(r, by=x->x[2],rev=true)
for k in 1:50
 println((r[k][1],r[k][2]))
end
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

0 件のコメント: