2026-08-21 01:26:32 +08:00
// OPC � 𥕢� � 箏� 瘚贝� 繚 � 唳旿銝舘恣� � � 餉� 嚗� � 銝� � 唳旿皞琜� � � OPC� 𥕢� 瘚贝� /scripts/*.json � � � 嚗�
// � � � � 𡁏𧋦閫� � OPC� 𥕢� 瘚贝� /scripts/_generate_opcTest.js嚗� 𧋦� 唬� 甈⊥� 抒� � 琜�
export const QUESTIONS = [ { "id" : 1 , "part" : "P1" , "quick" : true , "question" : "� W笆銝� 銝芣瓷鈭箇� � 孵� � � 遙� ∴� 雿𣳇� 𡁜虜" , "A" : "� 芸楛摰𡁏� � � � � � � 嚗𣬚凒� 交� 摰� � 摰� " , "B" : "撣峕� � 劐犖� � � 銝芣� � 塚� 敹� � � 滩� 摰� " } , { "id" : 2 , "part" : "P1" , "quick" : false , "question" : "� 𤑳緵銝� 銝芸末� 箔� � 塚� 雿䭾凒� 航� " , "A" : "� � � 銝𠹺� 隡港� 韏瑁� 隡啜� � � 韏瑕� 摰� " , "B" : "� � 䌊撌勗僕� 箔葵� 瑕� 嚗� � � � � � 曉� 鈭� " } , { "id" : 3 , "part" : "P1" , "quick" : false , "question" : "� 喃� � 芣䔉� 嗅� � � � � � � 雿䭾凒� 賣𦻖� 堒𪑛蝘� " , "A" : "� 滚� 銝芣� 銝滨迅摰𡄯� � 擧� � X� 韏瑟䔉" , "B" : "銝� 撘� 憪见停閬� � 蝔喳� � � � 摨閙𤣰� � " } , { "id" : 4 , "part" : "P1" , "quick" : true , "question" : "銝� 蝚𥪜虾� 舫� � � 兝嚗䔶� � 游� 曉� " , "A" : "撠賡� 摮条� 嚗� � � 峕凒摰厩迅" , "B" : "� 踹枂銝� � 典� � 餉� � 嗘� 銝芸虾� 質� � 梁� � 圈★� � " } , { "id" : 5 , "part" : "P1" , "quick" : true , "question" : "瘝∩犖� � � 雿删� � 嗅� 辷� 雿惩� 鈭� " , "A" : "靘萘� 隡𡁏� � 芸楛� � � 憟𤩺� 蝏剜綫餈� " , "B" : "摰寞� � 硋� � 㗇⏛甇X𠯫� 滚𢆡� � " } , { "id" : 6 , "part" : "P1" , "quick" : false , "question" : "摮虫� 憿寞鰵� � � 賣𧒄嚗䔶� � 游虜" , "A" : "� � 閬� � 霂曄� � � � 鈭箏蒂� 滚郎敺𡑒� � � " , "B" : "� 芸楛銝餃𢆡� 亥� � 踺� � 器� 朞器� 䁅� 隡� " } , { "id" : 7 , "part" : "P1" , "quick" : false , "question" : "憒� � � 𥕢� 蝚砌� 撟游蘨� 劐� 銝� 銝芯犖嚗䔶� � 游虾� � " , "A" : "� 亙� � 䔶� 銋� � � 芸楛銝𦠜� � 滚僎銋𣂼銁� 嗡葉" , "B" : "閫匧� � � 澈銋𤩺钟� � 𠗕隞交𦻖� � " } , { "id" : 8 , "part" : "P1" , "quick" : true , "question" : "� 峕𧒄閬� � � � � � � � 摰X� � � � 鈭支� 嚗䔶� � 游� 曉� " , "A" : "閫匧� 敹� ◆� 劐犖� � 極� 滢� 銝� " , "B" : "銝� 銝芯犖� 冽� 銝𧢲䔉嚗諹器� 朞器摮� " } , { "id" : 9 , "part" : "P1" , "quick" : true , "question" : "撖孵� AI 撌亙� 嚗䔶� � � � � 漲� 游� " , "A" : "� 踵� 銝餃𢆡撠肽� � � AI 蝏躰䌊撌望� � � " , "B" : "閫匧� � 啁鍂撌亙� 憭毺鍂嚗� 郎� 啁� 暻餌� " } , { "id" : 10 , "part" : "P1" , "quick" : false , "question" : "� 祈秩� 𣬚鍂 AI � 凋� 憟𡑒䌊� 冽� 蝔贝� � � � 瘥誩𪂹 10 撠𤩺𧒄� 㵪� 雿牐� " , "A" : "閫匧� 憭芸� � � � � � 𦆮銝� � 曉� 霂� " , "B" : "蝡见� � 喟䰻� 𤘪� 𦒘� � 准� � � 撽砌� � 刻絲� � " } , { "id" : 11 , "part" : "P1" , "quick" : false , "question" : "� � 挽雿䭾𦻖銝𧢲䔉� 𠰴僑瘝⊥� 蝔喳� � 嗅� 嚗䔶� " , "A" : "� 匧� 甈暹� � 嗡� � 嗅� � 𨅯� 嚗諹� 憿嗡� " , "B" : "隡𡁶� � 駁萅� 亥揣� ∠揮撘� " } , { "id" : 12 , "part" : "P1" , "quick" : true , "question" : "雿䭾� � 刻� 蝔喳� � 訫� � 𥕢� � � 𧒄� � " , "A" : "� 芾� � 日妟蝣擧𧒄� 湛� 敺� 𠗕靽肽� " , "B" : "� 賭� 霂� 𤐄摰𡁶� 銝� 憭批� � 園𡢿嚗� � 瘥誩予 2 撠𤩺𧒄隞乩� 嚗� " } , { "id" : 13 , "part" : "P2" , "quick" : true , "question" : "雿䭾凒鈭怠� � 芰� � 嗆� � " , "A" : "� � 恥� 瑯� � � 銵䎚� � � � 煺犖� 剔� � 啗� � 單� 嚗䔶� 銝剛繮敺𡑒� � � " , "B" : "� 祈䌊銝𤘪釣� 梶ㄗ銝� 銝芯� � � � 瘝㗇絡� 刻䌊撌梁� 銝𣇉� " } , { "id" : 14 , "part" : "P2" , "quick" : true , "question" : "� 𡁜� 摰寞𧒄雿䭾凒憿箸� " , "A" : "� 湔偘� � 𢒰撖寥𢒰嚗𣬚凒� 亥挈� 箸䔉" , "B" : "� 䠷鵭� � � � � 瘛勗漲� 𠉛弦嚗峕� � X� 蝤� " } , { "id" : 15 , "part" : "P2" , "quick" : false , "question" : "� 𡁏� 蝚砌� � 閧� � 𧶏� � � 霈拐� � 㗇� 撠望� � � � � 湔糓" , "A" : "敶㯄𢒰� 𠰴恥� 瑁� � 具� � ◇� 拍倌銝� " , "B" : "鈭支� � 𤾸恥� 瑞� � 箇� 霂𡁶� 霈文虾" } , { "id" : 16 , "part" : "P2" , "quick" : true , "question" : "� W笆銝� 銝芾� 瘝∩犖� 朞� � � � � 啣� 蝐鳴� 雿牐� " , "A" : "敺� � 憟页� � 喟洵銝� 銝芸� 餈𥕦縧霂閗� " , "B" : "敺� 馬� 𠬍� � 喳� � 𧢲� 瘝⊥� 鈭粹� 霂� � " } , { "id" : 17 , "part" : "P2" , "quick" : true , "question" : "雿䭾凒� 踵� � 羓移� 𥟇𦆮� � " , "A" : "餈䀹瓷� 怨絲� 亦� 璁� 艙嚗� 虾� 賣� 銝箔� 銝� 銝芷� � � " , "B" : "撌脩� 鋡恍� 霂� � � � 蝔喳� � � 瘙� � 撣� 㦤" } , { "id" : 18 , "part" : "P2" , "quick" : false , "question" : "� 厰★� 格𧒄雿䭾凒� 钅� " , "A" : "� 鞾鵭蝛粹𡢿憭改� � 芣� 訫� 銝钅� 瘙� � 銝齿� 蝖� " , "B" : "� 啣銁撠望� � 𡒊&� � 犖隞䁅晶嚗� 𪑛� 閧� 鈭㗇� � � " } , { "id" : 19 , "part" : "P2" , "quick" : true , "question" : "� 𡁶� � 讐� � 𣂼停� � 凒憭𡁏䔉� � " , "A" : "撣桐� 銝芸恥� 瑞� 甇� 圾� 喃� � 桅� � � 窖敺𦯀縑隞� " , "B" : "� 𦠜� 蝔见� 敹怒� � � 閫� 芋� 帋� � � " } , { "id" : 20 , "part" : "P2" , "quick" : true , "question" : "雿䭾凒� 踵� � � " , "A" : "� 㗇萱摨衣� 銝� 撖嫣� � 滚𦛚嚗� 倮霂� /� 芾� /摰𡁜� 嚗� " , "B" : "� � � � 𣇉� 鈭批� � 𤥁紋蝔页� � 帋� 甈~� � 虾憭滚� 嚗� " } , { "id" : 21 , "part" : "P2" , "quick" : false , "question" : "摰X� � 鞾� 瘙� 𧒄嚗䔶� � 港� � � " , "A" : "瘛勗� 鈭� 圾隞𤥁� 銝芯犖嚗峕� 隞𣇉� � � � 摰𡁜� " , "B" : "� 鞟� � 望� 折䔮憸矋� � 𡁏� � � � � 寞� 憭滚� " } , { "id" : 22 , "part" : "P2" , "quick" : true , "question" : "雿删� � 亦� � 讐� � 孵� � 游� " , "A" : "� 劐�
export const RULES = [{" id ":1," A ":" IND "," B ":null},{" id ":2," A ":null," B ":" IND "},{" id ":3," A ":" RISK "," B ":null},{" id ":4," A ":null," B ":" RISK "},{" id ":5," A ":" DRIVE "," B ":null},{" id ":6," A ":null," B ":" DRIVE "},{" id ":7," A ":" SOLO "," B ":null},{" id ":8," A ":null," B ":" SOLO "},{" id ":9," A ":" AI "," B ":null},{" id ":10," A ":null," B ":" AI "},{" id ":11," A ":" STABLE "," B ":null},{" id ":12," A ":null," B ":" STABLE "},{" id ":13," A ":" E "," B ":" I "},{" id ":14," A ":" E "," B ":" I "},{" id ":15," A ":" E "," B ":" I "},{" id ":16," A ":" V "," B ":" G "},{" id ":17," A ":" V "," B ":" G "},{" id ":18," A ":" V "," B ":" G "},{" id ":19," A ":" R "," B ":" T "},{" id ":20," A ":" R "," B ":" T "},{" id ":21," A ":" R "," B ":" T "},{" id ":22," A ":" P "," B ":" F "},{" id ":23," A ":" F "," B ":" P "},{" id ":24," A ":" P "," B ":" F "},{" id ":25," A ":" TOUR "," B ":" CONTENT "},{" id ":26," A ":" TOUR "," B ":" DIGITAL "},{" id ":27," A ":" CONTENT "," B ":" ECOMM "},{" id ":28," A ":" CONTENT "," B ":" CROSS "},{" id ":29," A ":" DIGITAL "," B ":" LOCAL "},{" id ":30," A ":" DIGITAL "," B ":" TOUR "},{" id ":31," A ":" ECOMM "," B ":" CONTENT "},{" id ":32," A ":" ECOMM "," B ":" DIGITAL "},{" id ":33," A ":" CROSS "," B ":" LOCAL "},{" id ":34," A ":" CROSS "," B ":" TOUR "},{" id ":35," A ":" LOCAL "," B ":" ECOMM "},{" id ":36," A ":" LOCAL "," B ":" DIGITAL "},{" id ":37," A ":" MAKER "," B ":" CREATOR "},{" id ":38," A ":" MAKER "," B ":" HUNTER "},{" id ":39," A ":" MAKER "," B ":" RUNNER "},{" id ":40," A ":" CREATOR "," B ":" MAKER "},{" id ":41," A ":" CREATOR "," B ":" ARCH "},{" id ":42," A ":" CREATOR "," B ":" RUNNER "},{" id ":43," A ":" HUNTER "," B ":" MAKER "},{" id ":44," A ":" HUNTER "," B ":" RUNNER "},{" id ":45," A ":" RUNNER "," B ":" HUNTER "},{" id ":46," A ":" RUNNER "," B ":" CREATOR "},{" id ":47," A ":" ARCH "," B ":" MAKER "},{" id ":48," A ":" ARCH "," B ":" RUNNER "},{" id ":49," A ":" DIALOG "," B ":" AGENT "},{" id ":50," A ":" DIALOG "," B ":" AUTOCON "},{" id ":51," A ":" DIALOG "," B ":" OUTSOURCE "},{" id ":52," A ":" AUTOCON "," B ":" DIALOG "},{" id ":53," A ":" AUTOCON "," B ":" AGENT "},{" id ":54," A ":" AUTOCON "," B ":" OUTSOURCE "},{" id ":55," A ":" AGENT "," B ":" AUTOCON "},{" id ":56," A ":" AGENT "," B ":" DIALOG "},{" id ":57," A ":" AGENT "," B ":" OUTSOURCE "},{" id ":58," A ":" OUTSOURCE "," B ":" AGENT "},{" id ":59," A ":" OUTSOURCE "," B ":" DIALOG "},{" id ":60," A ":" OUTSOURCE "," B ":" AUTOCON "}];
export const PROFILES = {" meta ":{" name ":" OPC � 𥕢 � � 箏 � 瘚贝 � � 餃 � � 唳旿 "," version ":" 1.0 "," description ":" 韏偦 � / 閫坿𠧧 / 撌亙 � 璅 ∪ � / � � � 蝑厩漣 / 16 鈭箄挽 / � 寡捶頧渡 � 摰峕㟲 � 讛膩 � 唳旿 � � 𥁒 � 𦠜葡 � 㮖 � 閫 � 粉 � � � 韏𡝗𧋦 � � 辣 � � "," pairs ":{" EI ":[" E "," I "]," VG ":[" V "," G "]," RT ":[" R "," T "]," PF ":[" P "," F "]}}," axes ":[{" code ":" EI "," name ":" � 賡 � 頧 � "," left ":" E "," right ":" I "," leftLabel ":" 撖孵 � 餈墧𦻖 "," rightLabel ":" 撖孵 � 瘛梯 � � "," leftDesc ":" 隞𦒘 � 鈭箸 � � 𠾼 � � � � 乓 � � � � 蓥葉 � 瑕 � � 賡 � 嚗偦 � � � � 瑕恥銝舘 � � 亙 � � � � "," rightDesc ":" 隞𡒊𡠺 � 芯 � 瘜具 � � 楛摨虫漣 � 箔葉 � 瑕 � � 賡 � 嚗偦 � � � � 𥕢 � 銝𦒘漣 � � � � � � "},{" code ":" VG "," name ":" 閫 � � 頧 � "," left ":" V "," right ":" G "," leftLabel ":" � Y揣 � 唳㦤隡 � "," rightLabel ":" � 𦠜𨘥 � 鞟 � � 箔 � "," leftDesc ":" � 𨀣洽 � 啣 � 蝐颯 � � 鰵璁 � 艙 � � 虾 � 賜 � 憌𤾸藁嚗偦 � � � � � 捆IP / 頝典 � / � 啣 � 鈭批 � "," rightDesc ":" � 訾縑撌脤 � 霂 � � � � 瘙 � � 蝔喳 � 撣 � 㦤嚗偦 � � � � 寡𠧧 � 萄 � / � 砍𧑐 � 滚𦛚 / � � � "},{" code ":" RT "," name ":" 隞瑕 � 潸蓬 "," left ":" R "," right ":" T "," leftLabel ":" � 喟頂 � 滚𦛚 "," rightLabel ":" � � � 鈭斗 � "," leftDesc ":" � 滢犖 � � � 靽 ∩ 遙 � � � 摰𡁜 � � 𡝗 � � ∴ � � � � � 啣 � � 刻砭 / � � � / � 砍𧑐 � 滚𦛚 "," rightDesc ":" � 齿 � � � � � � 璅 ~ � � � � � � 憭滚 � 嚗偦 � � � � 萄 � / � � 捆IP / 頝典 � "},{" code ":" PF "," name ":" � � � 頧 � "," left ":" P "," right ":" F "," leftLabel ":" 霈 ∪ � 蝟餌 � "," rightLabel ":" � 菜暑摨𥪜 � "," leftDesc ":" � � SOP � � � 蝔卝 � � 䌊 � 典 � � � 虾憭滚 � 嚗偦 � � � � 砍𧑐 � 滚𦛚 / � 萄 � / � 啣 � 鈭批 � "," rightDesc ":" � 滚 � � 塩 � � � � 嫘 � � 緵 � 箔 � 撉䕘 � � � � � � 捆IP / � � � / 頝典 � "}]," personas ":[{" code ":" EVRP "," name ":" 韏 � � � 游 � � � "," tagline ":" 蝏 � � � � 犖 "," desc ":" � 穃 � 餈墧𦻖 + � X � � 唳㦤隡 � + � 滢犖 � 滢縑隞 � + � 厩頂蝏麄 � � � � 賣 � 銝滚 � � � 犖 � 諹 � 皞鞉僼 � � � � 䔶 � 撘删 � 獢䔶 � 嚗 � 予 � 罸 � � � � 𡁜像 � 啜 � � � � � � � 游 � � 讠 � � 譌 � � "," openPath ":" 雿删 � OPC � 枏 � � 孵 � 嚗𡁜 � � 諹 � � 亥 � � � 㵪 � � 𡃏 � 皞鞟 � 蝏 � � 撟喳蝱 � 𣇉 � � � � � 𧶏 � 霈拍頂蝏 � 𤜯雿㰘蓮 � � "},{" code ":" EVRF "," name ":" 憌𤾸藁 � 閙 � "," tagline ":" 餈賣鰵 � � 犖 "," desc ":" � 穃 � 餈墧𦻖 + � X � � 唳㦤隡 � + � 滢犖 � 滢縑隞 � + 摨𥪜 � 敹怒 � � � 撖寞鰵 � 箔 � � � � � 菜 � 嚗 � � � � 鵭撣血𢆡鈭綽 � � � � 蝷曄黎 � 卝 � � � 撉 � � � � 翰 � � � � � 鰵韏偦 � � � "," openPath ":" 雿删 � OPC � 枏 � � 孵 � 嚗𡁜 � 甇亙翰頝穃 � 蝷曄黎銝𦒘 � 撉䕘 � � 惩 � 蝟餃 � � 剖漲皛𡁜𢆡韏瑟䔉 � � "},{" code ":" EVTP "," name ":" � 条裦 � 滨 � � � "," tagline ":" 撣 � � � � 犖 "," desc ":" � 穃 � 餈墧𦻖 + � X � � 唳㦤隡 � + � 齿 � � � + � 厩頂蝏麄 � � � � 賣 � � 唳㦤隡𡁏 � � 𣂼虾憭滚 � � � 頂蝏 � � � � � � 𡁜像 � 唳沲 � � � � 䌊 � 典 � � 曉之 � � � � 譌 � � "," openPath ":" 雿删 � OPC � 枏 � � 孵 � 嚗𡁻 ▲ 撅 � 挽霈 � + 蝟餌 � 憭滚 � 嚗𣬚鍂 � 箄 � 雿枏𣪧 � � � 閫 � 芋 � 帋 � � 颯 � � "},{" code ":" EVTF "," name ":" � 箔 � � 𤾸仍 "," tagline ":" � X貍 � � 犖 "," desc ":" � 穃 � 餈墧𦻖 + � X � � 唳㦤隡 � + � 齿 � � � + 摨𥪜 � 敹怒 � � � � � � � 閙 � 蝒堒藁 � 麄 � � 翰 � 笔 � � 堆 � � � � 瘚 � � � 𤘪 � � � 鰵 � � 掩 � X貍 � � "," openPath ":" 雿删 � OPC � 枏 � � 孵 � 嚗𡁜 � 甇亙翰頝㻫 � � � � 𤩺 � 瘜𤏪 � � 㮖 � 蝒堒藁敹恍 � 蠘 � � 踺 � � 翰 � 蠘翮隞 � � � "},{" code ":" EGRP "," name ":" 餈鮋 � 摨烾鵭 "," tagline ":" � 擧覔 � � 犖 "," desc ":" � 穃 � 餈墧𦻖 + � 賢𧑐摮㗛 � + � 滢犖 � 滢縑隞 � + � 厩頂蝏麄 � � � � � � � 𠹺 � 隞嗡 � � 典𧑐 � 笔 � � 𡁏楛 � 𡁻 � 𧶏 � � 典藁蝣穃 � � � � 憭滚 � � 拙 � � � "," openPath ":" 雿删 � OPC � 枏 � � 孵 � 嚗𡁜銁 � 砍𧑐 � 𠹺 � 摰嗅 � � � � 銝芯漣 � � � � 鞉 � � � � � 滢 � 摰嗅振憭滚 � � � "},{" code ":" EGRF "," name ":" � 啣㦤餈鞱𨯫摰 � "," tagline ":" � 硺 � � � 犖 "," desc ":" � 穃 � 餈墧𦻖 + � 賢𧑐摮㗛 � + � 滢犖 � 滢縑隞 � + 摨𥪜 � 敹怒 � � � � 𠹺犖瘞𠉛 � 蝏 � 絲 � 交糓憭拍 � 撘粹 ★ 嚗屸 � � � � 砍𧑐瘣餃𢆡 � � � 撉䎚 � � 冗蝢方 � � 乓 � � "," openPath ":" 雿删 � OPC � 枏 � � 孵 � 嚗𡁏 � 鈭箇 � 蝏 � 絲 � 交 � 鈭页 � � 其 � � 箏㦤瘣餃𢆡瘝㗇 � � � � 銝𤾸 � 韐准 � � "},{" code ":" EGTP "," name ":" 蝟餌 � 蝏讐 � 鈭 � "," tagline ":" � 𡁏 � � � � 鈭 � "," desc ":" � 穃 � 餈墧𦻖 + � 賢𧑐摮㗛 � + � 齿 � � � + � 厩頂蝏麄 � � � � 賣 � � 砍𧑐 � � � � 𡁏 � � 臬 � � 嗆 � � � � � � � 隞 � � � 乓 � � � � � � � � OP � � � � � "," openPath ":" 雿删 � OPC � 枏 � � 孵 � 嚗𡁏 � � 滚𦛚 SOP � 硔 � � � � � � 嚗𣬚鍂蝟餌 � � 餅 � � ⊥ 凒憭𡁏𧋦 � 啣 � 摰嗚 � � "},{" code ":" EGTF "," name ":" 皜𣳇 � � 桀恥 "," tagline ":" � 刻蓮 � � 犖 "," desc ":" � 穃 � 餈墧𦻖 + � 賢𧑐摮㗛 � + � 齿 � � � + 摨𥪜 � 敹怒 � � � � � 鵭靽 ⊥ � 撌柴 � � 僼 � � � � � � 枏𪂹頧穿 � � � � � � � � � 誨餈鞱𨯫 � � 笆 � 亙 � � � � � � "
const RULE _MAP = { } ;
RULES . forEach ( ( r ) => { RULE _MAP [ r . id ] = r ; } ) ;
export const ADAPT _DIMS = [ 'IND' , 'RISK' , 'DRIVE' , 'SOLO' , 'AI' , 'STABLE' ] ;
export const ADAPT _LABELS = { IND : '� 祉� � 芯蜓' , RISK : '憌𡡞埯� 踹� ' , DRIVE : '� 芷店� 典� ' , SOLO : '� 訫� 憭𡁻𢒰' , AI : 'AI � 𤩺� ' , STABLE : '摰匧� � � ' } ;
export const AXIS _PAIRS = [ [ 'E' , 'I' ] , [ 'V' , 'G' ] , [ 'R' , 'T' ] , [ 'P' , 'F' ] ] ;
export const AXIS _NAMES = { EI : '� 賡� ' , VG : '閫� � ' , RT : '隞瑕� � ' , PF : '� � � ' } ;
export const SECTIONS = {
P1 : '蝚砌� � 典� 繚 � 𥕢� � � 瓲嚗� 𡠺蝡� / 憌𡡞埯 / � 芷店 / � 訫� / AI / 摰匧� � 恬� ' ,
P2 : '蝚砌� � 典� 繚 � 寡捶� 曉� 嚗� � � � / 閫� � / 隞瑕� � / � � � 嚗� ' ,
P3 : '蝚砌� � 典� 繚 韏偦� � 誩末嚗� � � � / � � 捆IP / � 刻砭 / � 萄� / 頝典� / � 砍𧑐嚗� ' ,
P4 : '蝚砍� � 典� 繚 閫坿𠧧� 誩� 嚗� 漣� � / � � 捆 / � � 𦛚 / 餈鞱𨯫 / � 嗆� 嚗� ' ,
P5 : '蝚砌� � 典� 繚 鈭箸㦤� 譍� 嚗� 笆霂� / � 芸𢆡� � / � 箄� 雿� / 憭硋� 嚗� '
} ;
export function currentQuestions ( version ) {
return version === 'quick' ? QUESTIONS . filter ( ( x ) => x . quick ) : QUESTIONS ;
}
/** 霈∪� 嚗帋� 霈曇恣� � ﹝銝� � � � 婙� � � � � � � 㺭(6蝏渡� � � ) + 蝐餃� � � (4頧� ) + 韏偦� /閫坿𠧧/撌亙� (share of votes) */
export function calculate ( answers , version = 'full' ) {
const ids = currentQuestions ( version ) . map ( ( x ) => x . id ) ;
const counts = { } ;
ids . forEach ( ( id ) => {
const ans = answers [ id ] ;
if ( ans !== 'A' && ans !== 'B' ) return ;
const rule = RULE _MAP [ id ] ;
if ( ! rule ) return ;
const code = ans === 'A' ? rule . A : rule . B ;
if ( code ) counts [ code ] = ( counts [ code ] || 0 ) + 1 ;
} ) ;
const adaptDims = [ ] ;
let adaptSum = 0 ;
ADAPT _DIMS . forEach ( ( dim ) => {
let max = 0 ;
ids . forEach ( ( id ) => { const r = RULE _MAP [ id ] ; if ( ( r && r . A === dim ) || ( r && r . B === dim ) ) max ++ ; } ) ;
const votes = counts [ dim ] || 0 ;
const score = max > 0 ? Math . round ( ( votes / max ) * 100 ) : 0 ;
adaptSum += score ;
adaptDims . push ( { code : dim , label : ADAPT _LABELS [ dim ] , score , votes , max } ) ;
} ) ;
const adaptIndex = Math . round ( adaptSum / ADAPT _DIMS . length ) ;
let adaptLevel = null ;
PROFILES . adaptLevels . forEach ( ( lv ) => { if ( adaptIndex >= lv . range [ 0 ] && adaptIndex <= lv . range [ 1 ] ) adaptLevel = lv ; } ) ;
const weakestDims = [ ... adaptDims ] . sort ( ( a , b ) => a . score - b . score ) . slice ( 0 , 2 ) ;
let typeCode = '' ;
const axesDetail = [ ] ;
AXIS _PAIRS . forEach ( ( [ left , right ] ) => {
const l = counts [ left ] || 0 , r = counts [ right ] || 0 , total = l + r ;
const letter = l >= r ? left : right ;
typeCode += letter ;
axesDetail . push ( { pair : left + right , left , right , leftPct : total > 0 ? Math . round ( ( l / total ) * 100 ) : 50 , rightPct : total > 0 ? Math . round ( ( r / total ) * 100 ) : 50 , winner : letter , lCount : l , rCount : r } ) ;
} ) ;
const persona = PROFILES . personas . find ( ( x ) => x . code === typeCode ) || null ;
function rank ( dims ) {
let total = 0 ;
dims . forEach ( ( d ) => { total += counts [ d ] || 0 ; } ) ;
return dims . map ( ( d ) => ( { code : d , votes : counts [ d ] || 0 , pct : total > 0 ? Math . round ( ( ( counts [ d ] || 0 ) / total ) * 100 ) : 0 } ) )
. sort ( ( a , b ) => b . votes - a . votes || a . code . localeCompare ( b . code ) ) ;
}
const tracks = rank ( PROFILES . tracks . map ( ( t ) => t . code ) ) . filter ( ( t ) => t . pct >= 10 ) . slice ( 0 , 3 ) ;
const roles = rank ( PROFILES . roles . map ( ( t ) => t . code ) ) . filter ( ( t ) => t . pct >= 5 ) . slice ( 0 , 2 ) ;
const tools = rank ( PROFILES . toolModes . map ( ( t ) => t . code ) ) . filter ( ( t ) => t . pct >= 5 ) . slice ( 0 , 2 ) ;
return { version , answeredCount : Object . keys ( answers ) . filter ( ( id ) => ids . includes ( Number ( id ) ) ) . length , typeCode , persona , adaptIndex , adaptLevel , adaptDims , weakestDims , axesDetail , tracks , roles , tools } ;
}
2026-08-21 16:20:29 +08:00
/**
* 撅訫� � 亙� 嚗𡁏� tracks / roles / tools 隞汿� 稪ode + 蟡冽㺭� 滩‘� 其蛹� � 鉄� 券� 霂� 祗/� 讛膩� � � � 游笆鞊∴�
* 餈蹱甅摰X� 蝡舀葡� 𤘪𥁒� 𦠜𧒄� 𣳇� � 齿� � � PROFILES � 砍𧑐� 舀𧋦嚗� � 霂剖� � 冽䔉� 芸� 蝡荔� � �
*/
export function expandResult ( r ) {
const find = ( list , code ) => list . find ( ( x ) => x . code === code ) || { } ;
return {
... r ,
tracks : ( r . tracks || [ ] ) . map ( ( t ) => ( { ... t , ... find ( PROFILES . tracks , t . code ) } ) ) ,
roles : ( r . roles || [ ] ) . map ( ( x ) => ( { ... x , ... find ( PROFILES . roles , x . code ) } ) ) ,
tools : ( r . tools || [ ] ) . map ( ( x ) => ( { ... x , ... find ( PROFILES . toolModes , x . code ) } ) )
} ;
}