package Ġdev . es n ault . wan ak ana . core . utils ĊĊ Ċ private Ġval ĠBAS IC _ RO MA JI _ TREE Ġ= Ġmapping Ġ{ ĊĠĠĠ Ġ" ãģĤ " Ġto Ġ" a "; Ġ" ãģĦ " Ġto Ġ" i "; Ġ" ãģĨ " Ġto Ġ" u "; Ġ" ãģĪ " Ġto Ġ" e "; Ġ" ãģĬ " Ġto Ġ" o " ĊĠĠĠ Ġ" ãģĭ " Ġto Ġ" ka "; Ġ" ãģį " Ġto Ġ" ki "; Ġ" ãģı " Ġto Ġ" ku "; Ġ" ãģĳ " Ġto Ġ" ke "; Ġ" ãģĵ " Ġto Ġ" ko " ĊĠĠĠ Ġ" ãģķ " Ġto Ġ" sa "; Ġ" ãģĹ " Ġto Ġ" shi "; Ġ" ãģĻ " Ġto Ġ" su "; Ġ" ãģĽ " Ġto Ġ" se "; Ġ" ãģĿ " Ġto Ġ" so " ĊĠĠĠ Ġ" ãģŁ " Ġto Ġ" ta "; Ġ" ãģ¡ " Ġto Ġ" chi "; Ġ" ãģ¤ " Ġto Ġ" ts u "; Ġ" ãģ¦ " Ġto Ġ" te "; Ġ" ãģ¨ " Ġto Ġ" to " ĊĠĠĠ Ġ" ãģª " Ġto Ġ" na "; Ġ" ãģ« " Ġto Ġ" ni "; Ġ" ãģ ¬ " Ġto Ġ" nu "; Ġ" ãģ Ń " Ġto Ġ" ne "; Ġ" ãģ® " Ġto Ġ" no " ĊĠĠĠ Ġ" ãģ¯ " Ġto Ġ" ha "; Ġ" ãģ ² " Ġto Ġ" hi "; Ġ" ãģ µ " Ġto Ġ" fu "; Ġ" ãģ¸ " Ġto Ġ" he "; Ġ" ãģ » " Ġto Ġ" ho " ĊĠĠĠ Ġ" ãģ¾ " Ġto Ġ" ma "; Ġ" ãģ¿ " Ġto Ġ" mi "; Ġ" ãĤĢ " Ġto Ġ" mu "; Ġ" ãĤģ " Ġto Ġ" me "; Ġ" ãĤĤ " Ġto Ġ" mo " ĊĠĠĠ Ġ" ãĤī " Ġto Ġ" ra "; Ġ" ãĤĬ " Ġto Ġ" ri "; Ġ" ãĤĭ " Ġto Ġ" ru "; Ġ" ãĤĮ " Ġto Ġ" re "; Ġ" ãĤ į " Ġto Ġ" ro " ĊĠĠĠ Ġ" ãĤĦ " Ġto Ġ" ya "; Ġ" ãĤ Ĩ " Ġto Ġ" yu "; Ġ" ãĤĪ " Ġto Ġ" yo " ĊĠĠĠ Ġ" ãĤı " Ġto Ġ" wa "; Ġ" ãĤ Ĳ " Ġto Ġ" wi "; Ġ" ãĤ ĳ " Ġto Ġ" we "; Ġ" ãĤĴ " Ġto Ġ" wo " ĊĠĠĠ Ġ" ãĤĵ " Ġto Ġ" n " ĊĠĠĠ Ġ" ãģĮ " Ġto Ġ" ga "; Ġ" ãģ İ " Ġto Ġ" gi "; Ġ" ãģ Ĳ " Ġto Ġ" gu "; Ġ" ãģ Ĵ " Ġto Ġ" ge "; Ġ" ãģĶ " Ġto Ġ" go " ĊĠĠĠ Ġ" ãģ ĸ " Ġto Ġ" za "; Ġ" ãģĺ " Ġto Ġ" ji "; Ġ" ãģļ " Ġto Ġ" zu "; Ġ" ãģ ľ " Ġto Ġ" ze "; Ġ" ãģ ŀ " Ġto Ġ" zo " ĊĠĠĠ Ġ" ãģł " Ġto Ġ" da "; Ġ" ãģ ¢ " Ġto Ġ" ji "; Ġ" ãģ ¥ " Ġto Ġ" zu "; Ġ" ãģ§ " Ġto Ġ" de "; Ġ" ãģ© " Ġto Ġ" do " ĊĠĠĠ Ġ" ãģ° " Ġto Ġ" ba "; Ġ" ãģ³ " Ġto Ġ" bi "; Ġ" ãģ ¶ " Ġto Ġ" bu "; Ġ" ãģ¹ " Ġto Ġ" be "; Ġ" ãģ ¼ " Ġto Ġ" bo " ĊĠĠĠ Ġ" ãģ ± " Ġto Ġ" pa "; Ġ" ãģ ´ " Ġto Ġ" pi "; Ġ" ãģ · " Ġto Ġ" pu "; Ġ" ãģ º " Ġto Ġ" pe "; Ġ" ãģ ½ " Ġto Ġ" po " ĊĠĠĠ Ġ" ãĤ Ķ ãģ ģ " Ġto Ġ" va "; Ġ" ãĤ Ķ ãģ ĥ " Ġto Ġ" vi "; Ġ" ãĤ Ķ " Ġto Ġ" vu "; Ġ" ãĤ Ķ ãģ ĩ " Ġto Ġ" ve "; Ġ" ãĤ Ķ ãģ ī " Ġto Ġ" vo " Ċ } Ċ Ċ private Ġval ĠSPECIAL _ SYMBOL S : ĠMap < Char , ĠChar > Ġ= Ġmap Of ( ĊĠĠĠ Ġ' ãĢĤ ' Ġto Ġ'.', ĊĠĠĠ Ġ' ãĢģ ' Ġto Ġ', ', ĊĠĠĠ Ġ' ï¼ļ ' Ġto Ġ' :', ĊĠĠĠ Ġ' ãĥ» ' Ġto Ġ'/', ĊĠĠĠ Ġ' ï¼ģ ' Ġto Ġ' !', ĊĠĠĠ Ġ' ï¼Ł ' Ġto Ġ' ?', ĊĠĠĠ Ġ' ãĢ ľ ' Ġto Ġ'~ ', ĊĠĠĠ Ġ' ãĥ¼ ' Ġto Ġ'-', ĊĠĠĠ Ġ' ãĢĮ ' Ġto Ġ' âĢĺ ', ĊĠĠĠ Ġ' ãĢį ' Ġto Ġ' âĢĻ ', ĊĠĠĠ Ġ' ãĢ İ ' Ġto Ġ' âĢľ ', ĊĠĠĠ Ġ' ãĢ ı ' Ġto Ġ' âĢĿ ', ĊĠĠĠ Ġ' ï¼ » ' Ġto Ġ'[ ', ĊĠĠĠ Ġ' ï¼ ½ ' Ġto Ġ' ]', ĊĠĠĠ Ġ' ï¼Ī ' Ġto Ġ' (', ĊĠĠĠ Ġ' ï¼ī ' Ġto Ġ' )', ĊĠĠĠ Ġ' ï½ Ľ ' Ġto Ġ'{ ', ĊĠĠĠ Ġ' ï½ Ŀ ' Ġto Ġ' }', ĊĠĠĠ Ġ' ãĢĢ ' Ġto Ġ' Ġ', Ċ ) Ċ Ċ // ĠãĤ ĵ ãģĦ Ġ-> Ġn ' i Ċ private Ġval ĠA MB IG UO US _ VO W EL S : ĠList < Char > Ġ= ĠlistOf (' ãģĤ ', Ġ' ãģĦ ', Ġ' ãģĨ ', Ġ' ãģĪ ', Ġ' ãģĬ ', Ġ' ãĤĦ ', Ġ' ãĤ Ĩ ', Ġ' ãĤĪ ') Ċ private Ġval ĠSMALL _ Y : ĠMap < Char , ĠString > Ġ= Ġmap Of (' ãĤ ĥ ' Ġto Ġ" ya ", Ġ' ãĤ ħ ' Ġto Ġ" yu ", Ġ' ãĤĩ ' Ġto Ġ" yo ") Ċ private Ġval ĠSMALL _ Y _ EXTRA : ĠMap < Char , ĠString > Ġ= Ġmap Of (' ãģ ĥ ' Ġto Ġ" yi ", Ġ' ãģ ĩ ' Ġto Ġ" ye ") Ċ private Ġval ĠSMALL _ AI UE O : ĠMap < Char , ĠChar > Ġ= Ġmap Of ( ĊĠĠĠ Ġ' ãģ ģ ' Ġto Ġ' a ', ĊĠĠĠ Ġ' ãģ ĥ ' Ġto Ġ' i ', ĊĠĠĠ Ġ' ãģ ħ ' Ġto Ġ' u ', ĊĠĠĠ Ġ' ãģ ĩ ' Ġto Ġ' e ', ĊĠĠĠ Ġ' ãģ ī ' Ġto Ġ' o ', Ċ ) Ċ private Ġval ĠYO ON _ KAN A : ĠList < Char > Ġ= ĊĠĠĠ ĠlistOf (' ãģį ', Ġ' ãģ« ', Ġ' ãģ ² ', Ġ' ãģ¿ ', Ġ' ãĤĬ ', Ġ' ãģ İ ', Ġ' ãģ³ ', Ġ' ãģ ´ ', Ġ' ãĤ Ķ ', Ġ' ãģı ', Ġ' ãģ µ ') Ċ private Ġval ĠYO ON _ EXCEPTION S : ĠMap < Char , ĠString > Ġ= Ġmap Of ( ĊĠĠĠ Ġ' ãģĹ ' Ġto Ġ" sh ", ĊĠĠĠ Ġ' ãģ¡ ' Ġto Ġ" ch ", ĊĠĠĠ Ġ' ãģĺ ' Ġto Ġ" j ", ĊĠĠĠ Ġ' ãģ ¢ ' Ġto Ġ" j ", Ċ ) Ċ private Ġval ĠSMALL _ KAN A : ĠMap < Char , ĠString > Ġ= Ġmap Of ( ĊĠĠĠ Ġ' ãģ£ ' Ġto Ġ"", ĊĠĠĠ Ġ' ãĤ ĥ ' Ġto Ġ" ya ", ĊĠĠĠ Ġ' ãĤ ħ ' Ġto Ġ" yu ", ĊĠĠĠ Ġ' ãĤĩ ' Ġto Ġ" yo ", ĊĠĠĠ Ġ' ãģ ģ ' Ġto Ġ" a ", ĊĠĠĠ Ġ' ãģ ĥ ' Ġto Ġ" i ", ĊĠĠĠ Ġ' ãģ ħ ' Ġto Ġ" u ", ĊĠĠĠ Ġ' ãģ ĩ ' Ġto Ġ" e ", ĊĠĠĠ Ġ' ãģ ī ' Ġto Ġ" o ", Ċ ) Ċ Ċ // Ġgoing Ġwith Ġthe Ġintu itive Ġ( yet Ġincorrect ) Ġsolution Ġwhere Ġ ãģ£ ãĤĦ Ġ-> Ġy ya Ġand Ġ ãģ£ ãģ ĥ Ġ-> Ġii Ċ // Ġin Ġother Ġwords , Ġjust Ġassume Ġthe Ġs oku on Ġcould Ġhave Ġbeen Ġapplied Ġto Ġanything Ċ private Ġval ĠS OK U ON _ WHITE LIST : ĠMap < Char , ĠChar > Ġ= Ġmap Of ( ĊĠĠĠ Ġ' b ' Ġto Ġ' b ', ĊĠĠĠ Ġ' c ' Ġto Ġ' t ', ĊĠĠĠ Ġ' d ' Ġto Ġ' d ', ĊĠĠĠ Ġ' f ' Ġto Ġ' f ', ĊĠĠĠ Ġ' g ' Ġto Ġ' g ', ĊĠĠĠ Ġ' h ' Ġto Ġ' h ', ĊĠĠĠ Ġ' j ' Ġto Ġ' j ', ĊĠĠĠ Ġ' k ' Ġto Ġ' k ', ĊĠĠĠ Ġ' m ' Ġto Ġ' m ', ĊĠĠĠ Ġ' p ' Ġto Ġ' p ', ĊĠĠĠ Ġ' q ' Ġto Ġ' q ', ĊĠĠĠ Ġ' r ' Ġto Ġ' r ', ĊĠĠĠ Ġ' s ' Ġto Ġ' s ', ĊĠĠĠ Ġ' t ' Ġto Ġ' t ', ĊĠĠĠ Ġ' v ' Ġto Ġ' v ', ĊĠĠĠ Ġ' w ' Ġto Ġ' w ', ĊĠĠĠ Ġ' x ' Ġto Ġ' x ', ĊĠĠĠ Ġ' z ' Ġto Ġ' z ', Ċ ) Ċ Ċ private Ġfun Ġcreate K ana To H ep burn Map (): ĠMapping Tree Ġ{ ĊĠĠĠ Ġval Ġrom aji Tree Ġ= ĠBAS IC _ RO MA JI _ TREE ĊĊĠĠĠ ĠSPECIAL _ SYMBOL S . forEach Ġ{ Ġ( j Symbol , Ġsymbol ) Ġ-> ĊĠĠĠĠĠĠĠ Ġrom aji Tree . set Sub Tree Value ( j Symbol . toString (), Ġsymbol . toString ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ( SMALL _ Y Ġ+ ĠSMALL _ AI UE O ). forEach Ġ{ Ġ( rom a , Ġk ana ) Ġ-> ĊĠĠĠĠĠĠĠ Ġrom aji Tree . set Sub Tree Value ( rom a . toString (), Ġk ana . toString ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġ ãģį ãĤ ĥ Ġ-> Ġk ya ĊĠĠĠ ĠYO ON _ KAN A . forEach Ġ{ Ġk ana Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġfirst Rom aji Char Ġ= Ġrom aji Tree . sub Tree Of ( k ana . toString ()). value !!. first () ĊĠĠĠĠĠĠĠ ĠSMALL _ Y . forEach Ġ{ Ġ( y K ana , Ġy R oma ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrom aji Tree . set Sub Tree Value ("$ k ana $ y K ana ", Ġfirst Rom aji Char Ġ+ Ġy R oma ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// Ġ ãģį ãģ ĥ Ġ-> Ġk yi ĊĠĠĠĠĠĠĠ ĠSMALL _ Y _ EXTRA . forEach Ġ{ Ġ( y K ana , Ġy R oma ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrom aji Tree . set Sub Tree Value ("$ k ana $ y K ana ", Ġfirst Rom aji Char Ġ+ Ġy R oma ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ ĠYO ON _ EXCEPTION S . forEach Ġ{ Ġ( k ana , Ġrom a ) Ġ-> ĊĠĠĠĠĠĠĠ Ġ// Ġ ãģĺ ãĤ ĥ Ġ-> Ġja ĊĠĠĠĠĠĠĠ ĠSMALL _ Y . forEach Ġ{ Ġ( y K ana , Ġy R oma ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrom aji Tree . set Sub Tree Value ("$ k ana $ y K ana ", Ġrom a Ġ+ Ġy R oma [ 1 ]) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// Ġ ãģĺ ãģ ĥ Ġ-> Ġj yi , Ġ ãģĺ ãģ ĩ Ġ-> Ġje ĊĠĠĠĠĠĠĠ Ġrom aji Tree . set Sub Tree Value ("${ k ana } ãģ ĥ ", Ġ"${ rom a } yi ") ĊĠĠĠĠĠĠĠ Ġrom aji Tree . set Sub Tree Value (" `${ k ana } ãģ ĩ ", Ġ"${ rom a } e ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġrom aji Tree [' ãģ£ '] Ġ= Ġrom aji Tree . duplicate (). also Ġ{ Ġupdate T su ( it ) Ġ} ĊĊĠĠĠ ĠSMALL _ KAN A . forEach Ġ{ Ġ( k ana , Ġrom a ) Ġ-> ĊĠĠĠĠĠĠĠ Ġrom aji Tree . set Sub Tree Value ( k ana . toString (), Ġrom a ) ĊĠĠĠ Ġ} ĊĊĠĠĠ ĠA MB IG UO US _ VO W EL S . forEach Ġ{ Ġk ana Ġ-> ĊĠĠĠĠĠĠĠ Ġrom aji Tree . set Sub Tree Value (" ãĤĵ $ k ana ", Ġ" n ' ${ rom aji Tree [ k ana ] !!. value }") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠNOTE : Ġcould Ġbe Ġre - enabled Ġwith Ġan Ġoption ? ĊĠĠĠ Ġ// Ġ// ĠãĤ ĵ ãģ° Ġ-> Ġm bo ĊĠĠĠ Ġ// Ġval ĠLAB IAL : ĠList < Char > Ġ= ĠlistOf ( ĊĠĠĠ Ġ// ĠĠĠĠ Ġ' ãģ° ', Ġ' ãģ³ ', Ġ' ãģ ¶ ', Ġ' ãģ¹ ', Ġ' ãģ ¼ ', ĊĠĠĠ Ġ// ĠĠĠĠ Ġ' ãģ ± ', Ġ' ãģ ´ ', Ġ' ãģ · ', Ġ' ãģ º ', Ġ' ãģ ½ ', ĊĠĠĠ Ġ// ĠĠĠĠ Ġ' ãģ¾ ', Ġ' ãģ¿ ', Ġ' ãĤĢ ', Ġ' ãĤģ ', Ġ' ãĤĤ ', ĊĠĠĠ Ġ// Ġ) ĊĠĠĠ Ġ// ĠLAB IAL . forEach Ġ{ Ġk ana Ġ-> ĊĠĠĠ Ġ// ĠĠĠĠ Ġrom aji Tree . set Sub Tree Value (" ãĤĵ $ k ana ", Ġ" m ${ rom aji Tree [ k ana ]. value }") ĊĠĠĠ Ġ// Ġ} ĊĊĠĠĠ Ġreturn Ġrom aji Tree . to Mapping Tree () Ċ } Ċ Ċ private Ġfun Ġupdate T su ( tree : ĠMutable Mapping Tree ) Ġ{ ĊĠĠĠ Ġfun ĠnewValue ( value : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcon son ant Ġ= Ġvalue . first () ĊĠĠĠĠĠĠĠ Ġval Ġwhite List Value Ġ= ĠS OK U ON _ WHITE LIST [ con son ant ] ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( white List Value Ġ!= Ġnull ) Ġwhite List Value Ġ+ Ġvalue Ġelse Ġvalue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġtree . sub Trees . values . forEach Ġ{ Ġupdate T su ( it ) Ġ} ĊĠĠĠ Ġtree . value ?. let Ġ{ Ġtree . value Ġ= ĠnewValue ( it ) Ġ} Ċ } Ċ Ċ internal Ġval Ġk ana To H ep burn Map : ĠMapping Tree Ġby Ġlazy Ġ{ Ġcreate K ana To H ep burn Map () Ġ} Ċ