對網易雲性格主導色實現與演算法的簡要分析

Chenrt發表於2021-05-27

網易雲性格主導色實現與演算法的簡要分析

昂神盛情相邀,遂有此文

  • 測試過程

    • 簡單測試

      • 多次選擇固定選項,觀察結果,發現存在結果不同的情況
      • 具體的,筆者選擇位於螢幕最上方的選項,發現答案可能是橙綠或藍紫,且藍紫機率較大
    • 抓包測試

      • 初始化完成後,採用Fiddler進行請求攔截,如下圖
      • 對網易雲性格主導色實現與演算法的簡要分析
      • 發現不需要聯網,可以做完全部題目(但圖片和音訊無法載入,可能是存在懶載入機制),直到獲取結果時無法繼續
      • 對網易雲性格主導色實現與演算法的簡要分析
      • 獲取結果時,發現兩個必須的關鍵POSTweblogantispam
      • 使用Fiddler解密,可以發現weblog用於握手
      • 對網易雲性格主導色實現與演算法的簡要分析
      • 使用Fiddler解密,antispam傳輸未知字串,但詭異之處在於返回值並不是測試結果
      • 對網易雲性格主導色實現與演算法的簡要分析
    • Network分析

      • 通過Networkantispam進行分析,如下圖所示,既然加密在前端進行,我們就有機會找出被加密前的內容
      • 對網易雲性格主導色實現與演算法的簡要分析
      • 搜尋字串encSecKey,可以找到下面的JavaScript,並利用Chrome對進行格式化
      • 對網易雲性格主導色實現與演算法的簡要分析
      • 對網易雲性格主導色實現與演算法的簡要分析
      • 在格式化後的JavaScript中搜尋encSecKey,找到下圖所示的程式碼段,對相關程式碼打斷點後重新整理
      • 對網易雲性格主導色實現與演算法的簡要分析
      • 通過前端單步除錯,可以獲取加密前的內容,去除無關內容後,發現傳輸的只是姓名字串,如下圖所示
      • 對網易雲性格主導色實現與演算法的簡要分析
    • 本機JavaScript分析

      • 由上述內容可知,我們的選擇沒有被上傳,那隻可能在本地處理,為此只需要分析全部click事件(也可以從別的角度分析,click事件是筆者選擇的切入點)
      • 通過分析可以找到以下JavaScript,格式化後瀏覽其中的內容可以明顯看出端倪,閱讀此JavaScript中的程式碼即可得到測試演算法,如下圖
      • 對網易雲性格主導色實現與演算法的簡要分析
      • 對網易雲性格主導色實現與演算法的簡要分析
  • 演算法解析

    • 演算法流程描述如下

      • 第一階段

        • 每一題的的每個選項打若干顏色標籤(使用下面給出的表1),統計前七題對應選項七個標籤集的顏色頻率和
          • 以第一題選擇A為例,第一題A選項的標籤是["金", "綠"],如果選擇了第一題A選項,那麼金綠兩個顏色的頻率分別加一
          • 這一段的程式碼如下
            var n, r, o, t = e.length,
            	i = {};
            if (e.slice(0, t - 1).forEach(function(e, t) {
            		return v(i, e, t)
            	}), ...
            
          • 其中e是選項id陣列,e.slice(0, t - 1)實現了對陣列除最後一項的拷貝
          • v函式如下所示
            function v(t, e, n) {
            	p[n][e - 1].forEach(function(e) {
            		t[e] = t[e] ? t[e] + 1 : 1
            	})
            }
            
          • 這裡的t是傳入的ii是一個dict,類似Python中的dictCPP中的unordered_map或者java中的HashMap,實現keyvalue的對映,這一段程式碼的意思是如果存在就加一,不存在就置一
        • 從顏色到頻率的對映改為從頻率到顏色的對映,如果存在重複,隨機保留一個
          • 這一段的程式碼如下,理解了上一段的話,這一段是比較好理解的
            n = i,
            r = !1,
            o = {},
            Object.keys(n).forEach(function(e) {
            	var t = n[e];
            	o[t] && (r = !0),
            		o[t] = e
            }),
            
          • 這裡沒有顯式的隨機,而是隻保留了遍歷dict時最先遍歷的結果
        • 如果沒有遇到頻率重複,額外更新第八題的頻率
          • 這一段的程式碼如下,這裡利用的短路求值特性
            r && v(i, e[t - 1], t - 1),
            
          • 短路求值是指,AB若A為,不執行B直接返回,AB若A為,不執行B直接返回,接下來的程式碼中這一性質被多次使用
      • 第二階段

        • 上面的程式碼全部在一個if的條件中,而if的條件以下面的程式碼結束,彼此以逗號連線
          • 這一段的程式碼如下
            2 !== e[7]
            
          • 逗號表示式的性質,逗號表示式的返回值是最後一個逗號之後的表示式的返回值,即最終決定執行哪一分支的,是第八題的結果
        • 考慮第八題結果,如果選A
          • 遍歷下面給出的表2,尋找項內兩元素頻率和最大者,將兩元素拼接作為結果
            • 表內的項有兩個元素,形如["粉", "金"]
            • 這一段的程式碼如下,通過傳入一個函式定義計算獎勵值的方式
              (a = N(m, function(e) {
              		return i[e[0]] + i[e[1]]
              	}).join(""))
              
            • 被呼叫的N函式如下,選擇獎勵值即項內兩元素頻率和最大者
              function N(e, n) {
              	var r, o = -1;
              	return e.forEach(function(e, t) {
              			e = n(e);
              			o < e && (o = e,
              				r = t)
              		}), e[r]
              }
              
          • 如果得到的結果是橙綠,有0.5的機率變為藍紫
            • 這一段的程式碼如下,實現時依舊使用了短路求值逗號表示式的特性
              return "橙綠" === (a = N(m, function(e) {
              	return i[e[0]] + i[e[1]]
              }).join("")) && .5 < Math.random() && (a = "藍粉"), a;
              
        • 考慮第八題結果,如果選B
          • 遍歷下面給出的表3,尋找頻率最大者,將其作為結果
            • 表內的項有一個元素,形如"綠"
            • 這一段的程式碼如下,依舊通過傳入一個函式定義計算獎勵值的方式
              var a = N(h, function(e) {
              	return i[e]
              });
              
            • 被呼叫的N函式同上,N函式設計的精妙之處在於傳入一個函式引數,這種設計思想在C語言的qsortbsearch函式中也有使用
          • 如果得到的結果是綠,有0.5的機率變為藍,與上面的內容無本質區別,不再贅述
            • 這一段的程式碼如下
              return "綠" === a && .5 < Math.random() && (a = "藍"), a
              
      • 演算法最終返回一個字串,作為dictkey使用(測試的最終結果一共16種,已全部附於文後)
    • 演算法補充分析如下

      • 大量使用短路求值/函式引數,命名經過了混淆處理,閱讀理解障礙較大
      • 一個比較直觀的結果,最後一題選上面的選項,得到雙色,否則得到單色
    • 給出上文提到的三個表

      • 1(擷取自上述JS,進行了格式化)
        p = [
        	[["金", "綠"], ["紫", "銀", "橙"], ["粉", "藍"]],
        	[["藍", "紫"], ["粉", "橙"], ["銀", "金", "綠"]],
        	[["銀", "紫", "橙"], ["藍", "綠"], ["金", "粉"]],
        	[["銀", "橙"], ["紫", "金", "綠"], ["粉", "藍"]],
        	[["綠", "紫"], ["橙", "粉"], ["銀", "金", "藍"]],
        	[["綠", "紫", "銀"], ["藍", "橙"], ["金", "粉"]],
        	[["綠", "金", "紫"], ["橙", "粉"], ["銀", "藍"]],
        	[["紫", "橙", "綠", "銀"], ["藍", "金", "粉"]]
        ],
        
      • 2(擷取自上述JS,進行了格式化)
        m = [
        	["粉", "金"],
        	["金", "橙"],
        	["粉", "紫"],
        	["金", "藍"],
        	["金", "紫"],
        	["橙", "粉"],
        	["藍", "粉"],
        	["金", "綠"],
        	["橙", "綠"]
        ],
        
      • 3(擷取自上述JS,進行了格式化)
        h = ["綠", "橙", "銀", "紫", "藍", "金", "粉"]
        
    • 給出實現中的三個關鍵函式

      • 函式1(擷取自上述JS,進行了格式化)
        function v(t, e, n) {
        	p[n][e - 1].forEach(function(e) {
        		t[e] = t[e] ? t[e] + 1 : 1
        	})
        }
        
      • 函式2(擷取自上述JS,進行了格式化)
        function N(e, n) {
        	var r, o = -1;
        	return e.forEach(function(e, t) {
        			e = n(e);
        			o < e && (o = e,
        				r = t)
        		}), e[r]
        }
        
      • 函式3(擷取自上述JS,進行了格式化)
        function y(e) {
        	var n, r, o, t = e.length,
        		i = {};
        	if (e.slice(0, t - 1).forEach(function(e, t) {
        			return v(i, e, t)
        		}),
        		n = i,
        		r = !1,
        		o = {},
        		Object.keys(n).forEach(function(e) {
        			var t = n[e];
        			o[t] && (r = !0),
        				o[t] = e
        		}),
        		r && v(i, e[t - 1], t - 1),
        		2 !== e[7])
        		return "橙綠" === (a = N(m, function(e) {
        				return i[e[0]] + i[e[1]]
        			}).join("")) && .5 < Math.random() && (a = "藍粉"), a;
        	var a = N(h, function(e) {
        		return i[e]
        	});
        	return "綠" === a && .5 < Math.random() && (a = "藍"), a
        }
        
    • 全部從顏色到完整結果的定義如下

      "藍": {
      	singleName: "天空藍",
      	percent: "20.03",
      	peoplecount: 5,
      	otherPeople: "藍",
      	otherPeopleText: "外在藍色的人擁有大局觀和戰略思維!\n你向外界舒適地展示著自我,在規則世界中自在穿行!\n藍色的人聰明有靈氣,總能輕易得到大家的欣賞和支援!",
      	infact: "藍",
      	infactText: "極端的藍色,是非常少見的組合!\n你最強大的力量在於感知,洞察和直覺!\n藍色以其深邃靈魂和智慧,帶給自己和他人幸運和奇蹟!",
      	oneWord: "魅力超凡的藝術家",
      	attracted: ["橙粉", "粉金"],
      	keepAway: ["金", "銀"],
      	songName: "Mia & Sebastian's Theme",
      	songId: "499771852",
      	songUrl: "https://m7.music.126.net/20890607234532/9beabe0be8d76c36101056502612d875/ymusic/obj/w5zDlMODwrDDiGjCn8Ky/9049775496/aed6/ea0d/61ae/9d2b81cd492231c1fc21b2d15a82550a.mp3?infoId=1348305",
      	keywordOther: "冷靜、睿智、縱覽全域性",
      	keywordInfact: "感性、浪漫、以人為本",
      	percentGlobal: "2.47"
      },
      "金": {
      	singleName: "閃耀金",
      	percent: "26.46",
      	peoplecount: 4,
      	otherPeople: "金",
      	otherPeopleText: "外在金色的人,是領導者的代名詞。\n在複雜的問題面前,金色總能夠迅速掌握全域性。\n金色的人永遠在努力,永遠可靠,永遠幫得上忙!",
      	infact: "金",
      	infactText: "極端金色是極具天賦、極其罕見的組合!\n他們有能力讓混亂和崩潰的事情重回正軌。\n雖然你處事低調沉穩,但你總是人群中的焦點。",
      	oneWord: "夏日初升的太陽",
      	attracted: ["粉紫", "金橙"],
      	keepAway: ["藍", "橙粉"],
      	songName: "building a family ",
      	songId: "17239379",
      	songUrl: "https://m8.music.126.net/20890608132050/fa39b280732b262920fe28d3d170562a/ymusic/obj/w5zDlMODwrDDiGjCn8Ky/9060408876/b43b/597d/a3fb/5a44927f5b28e9eed8fc136ead5dbd4e.mp3?infoId=1348308",
      	keywordOther: "領導力、正義、勤奮",
      	keywordInfact: "勇氣、無私、責任心",
      	percentGlobal: "3.04"
      },
      "橙": {
      	singleName: "活力橙",
      	percent: "51.86",
      	peoplecount: 2,
      	otherPeople: "橙",
      	otherPeopleText: "外在橙色的人 是高能量的樂觀主義者!\n橙色的人天生聰明,有才能,有資源!\n你自帶元氣,可以在複雜世界裡闖蕩得遊刃有餘!",
      	infact: "橙",
      	infactText: "極致橙色的氣質是世間少有的!\n行動是橙色的核心,你對想做的事情有無限的驅動力!\n你是個百分百的生活冒險家,也總能獲得命運的偏愛!",
      	oneWord: "雲隙射下的陽光",
      	attracted: ["金綠", "粉"],
      	keepAway: ["金藍", "紫"],
      	songName: "warm zephyr",
      	songId: "1486146637",
      	songUrl: "https://m8.music.126.net/20890608132006/fdcf8561e0f1bcf6d4c4ac527e53f8c9/ymusic/obj/w5zDlMODwrDDiGjCn8Ky/9060403238/cde8/ca24/598f/f1775c16109ef477e3008bc5839b8432.mp3?infoId=1345282",
      	keywordOther: "熱忱、高能量、有朝氣",
      	keywordInfact: "有趣、溫暖、幸福",
      	percentGlobal: "4.33"
      },
      "綠": {
      	singleName: "森林綠",
      	percent: "19.89",
      	peoplecount: 5,
      	otherPeople: "綠",
      	otherPeopleText: "外在綠色的人渾身散發著知性的優雅!\n你自在地穿梭在知識的海洋中,有很強的領悟能力!\n綠色善於思考,經常提出驚豔全場的新觀點!",
      	infact: "綠",
      	infactText: "極端綠色的人是非常少見的!\n只有極端綠色的人才能在危機中保持清醒,解決問題!\n綠色是最有安全感的顏色,大家都在尋找極端綠色當夥伴!",
      	oneWord: "智慧非凡的開拓者",
      	attracted: ["橙", "藍粉"],
      	keepAway: ["粉金", "金藍"],
      	songName: "夏末的心願",
      	songId: "1492668093",
      	songUrl: "https://m8.music.126.net/20890607234949/f93daf3f1b2749806bb5c7eab39ff188/ymusic/obj/w5zDlMODwrDDiGjCn8Ky/9049868606/e7af/a4bd/c5d6/07bf410d12a5e56f85c7080204f6b6ac.mp3?infoId=1345281",
      	keywordOther: "冷靜、獨立、有邏輯",
      	keywordInfact: "清醒、舒適、包容",
      	percentGlobal: "3.92"
      },
      "銀": {
      	singleName: "太空銀",
      	percent: "33.71",
      	peoplecount: 3,
      	otherPeople: "銀",
      	otherPeopleText: "外在銀色的人,身上有與生俱來的高貴氣質!\n你舉手投足間優雅大方,自帶閃亮光環!\n銀色的人品味很高,不斷為自己和他人的生活提升質感!",
      	infact: "銀",
      	infactText: "極端的銀色是極其罕見的!\n你優雅克制的背後,有著很強的洞察和創造力!\n極端銀色是宇宙的禮物,你的心中自有星辰與月光!",
      	oneWord: "漫步銀河的夢想家",
      	attracted: ["金橙", "橙綠"],
      	keepAway: ["藍", "橙粉"],
      	songName: "Cornfield Chase",
      	songId: "29734857",
      	songUrl: "https://m7.music.126.net/20890613011419/2780fefd131d4343524bc1eaef0c63d0/ymusic/obj/w5zDlMODwrDDiGjCn8Ky/9123098244/5727/8c94/768c/89ebf9ac9d08ccdeedd7aa1e30b4dadc.mp3?infoId=1348317",
      	keywordOther: "高貴、優雅、有質感",
      	keywordInfact: "洞察、創造力、有天賦",
      	percentGlobal: "4.53"
      },
      "粉": {
      	singleName: "玫瑰粉",
      	percent: "59.26",
      	peoplecount: 2,
      	otherPeople: "粉",
      	otherPeopleText: "外在粉色的人內心純粹而溫暖!\n你簡單而敏銳,世間美好都逃不過你的眼睛!\n你用單純、體貼、無條件的愛,讓世界明亮起來!",
      	infact: "粉",
      	infactText: "極端粉色的人群是極其罕見的!\n你純潔有信念,擁有所有顏色中最神奇的治癒能力!\n其他顏色忙於操縱結果,但奇蹟往往發生在極端粉色中!",
      	oneWord: "世間美好收藏家",
      	attracted: ["橙", "金藍"],
      	keepAway: ["金綠", "金橙"],
      	songName: "和煦的糖果風",
      	songId: "439142564",
      	songUrl: "https://m701.music.126.net/20890607233630/32defc3ba8c28bfdd28d4f01e38fb38d/jdymusic/obj/w5zDlMODwrDDiGjCn8Ky/1528388451/dd07/8dd3/56f7/db1b88989c40393b730277972e7a52bb.mp3?infoId=1346360",
      	keywordOther: "單純、體貼、溫暖",
      	keywordInfact: "純粹、柔和、治癒",
      	percentGlobal: "2.57"
      },
      "紫": {
      	singleName: "夢幻紫",
      	percent: "31.56",
      	peoplecount: 3,
      	otherPeople: "紫",
      	otherPeopleText: "外在紫色的人氣場神祕而夢幻!\n你通常很精緻,而且風格多變、難以捉摸!\n紫色的人彷彿被命運偏愛,有著令人嫉妒的藝術天賦!",
      	infact: "紫",
      	infactText: "極端的紫色相當少見! \n你與浪漫的氣質撞個滿懷,是人群之中最耀眼的存在!\n極端紫色的人從不循規蹈矩,能將創造力發揮到極致!",
      	oneWord: "\n浪漫的神祕主義者\n",
      	attracted: ["粉金", "粉紫"],
      	keepAway: ["橙", "金紫"],
      	songName: "under the stars",
      	songId: "1814213458",
      	songUrl: "https://m8.music.126.net/20890608132145/d7867ed638b6284752022180f3c49ddc/ymusic/obj/w5zDlMODwrDDiGjCn8Ky/9060418519/a288/7f59/86b9/1e2f5b392f4c4286adc6a3e389f33551.mp3?infoId=1346364",
      	keywordOther: "神祕、優雅、耀眼",
      	keywordInfact: "浪漫、剋制、夢幻",
      	percentGlobal: "4.14"
      },
      "金藍": {
      	percent: "22.45",
      	peoplecount: 4,
      	otherPeople: "金",
      	otherPeopleText: "外在的金色百分百努力,是一路前行的奮鬥家!\n你有很高的預設目標,以不斷突破為行為準則!\n金色的人永遠在努力,永遠可靠,永遠幫得上忙!",
      	infact: "藍",
      	infactText: "內在藍色是真正屬於智者的靈魂!\n你最強大的力量在於感知,洞察和直覺!\n藍色以其深邃靈魂和智慧,帶給自己和他人幸運和奇蹟!",
      	oneWord: "夜空中的璀璨星海",
      	attracted: ["粉", "橙綠"],
      	keepAway: ["橙", "綠"],
      	songName: "Historiette #5",
      	songId: "17239379",
      	songUrl: "https://m7.music.126.net/20890607234038/d14b750c61c06d5054b41a68297c6157/ymusic/obj/w5zDlMODwrDDiGjCn8Ky/9049666252/7646/3696/69cf/32132bbed9479ed9e6a36a224b5fe16f.mp3?infoId=1345279",
      	keywordOther: "領導力、正義、勤奮",
      	keywordInfact: "感性、浪漫、以人為本",
      	percentGlobal: "2.93"
      },
      "金橙": {
      	percent: "37.46",
      	peoplecount: 3,
      	otherPeople: "金",
      	otherPeopleText: "外在金色的人是天生的領導者!\n你總能在危機中保持鎮靜的頭腦,帶領大家前進!\n認真威嚴的金色有時候會有距離感,但責任感超強!",
      	infact: "橙",
      	infactText: "內在橙色的人,專業嚴肅的背後藏著一顆童心!\n你看起來一絲不苟,內心卻燃燒著活力和創新的能量!\n橙色的人具備超乎常人的膽識,是行動力最強的顏色!",
      	oneWord: "黎明閃耀的霞光",
      	attracted: ["銀", "金藍"],
      	keepAway: ["粉", "藍粉"],
      	songName: "被時光移動的城市",
      	songId: "26524326",
      	songUrl: "https://m7.music.126.net/20890608132321/5c3d9ee60e22560c7c0a498d600e9d7a/ymusic/obj/w5zDlMODwrDDiGjCn8Ky/9060433920/9355/6bba/d452/3ae2d230bd66999b58eb57f4bb36ec98.mp3?infoId=1348309",
      	keywordOther: "領導力、正義、勤奮",
      	keywordInfact: "有趣、溫暖、幸福",
      	percentGlobal: "3.92"
      },
      "金綠": {
      	percent: "17.44",
      	peoplecount: 5,
      	otherPeople: "金",
      	otherPeopleText: "外在金色的人,有一點工作狂傾向!\n你能保證規則的順利執行,是值得信賴的同事和朋友!\n金色的人注重細節,渾身散發著可靠的魅力和高階質感!",
      	infact: "綠",
      	infactText: "內在綠色的人,少年氣永不過期!\n你充滿熱愛且勇於追求理想,純粹的讓人妒忌!\n綠色的人生活既有靈性的深度,又有世俗的成功!",
      	oneWord: "充滿遠見的哲學家",
      	attracted: ["橙", "金紫"],
      	keepAway: ["粉", "藍粉"],
      	songName: "leaves in the wind",
      	songId: "19934760",
      	songUrl: "https://m7.music.126.net/20890608131937/385f06b52f6fe09a8a689cc08697e7b1/ymusic/obj/w5zDlMODwrDDiGjCn8Ky/9060397244/54eb/5146/3f5e/4525352be66786c7ed34000a1fa74d14.mp3?infoId=1346362",
      	keywordOther: "領導力、正義、勤奮",
      	keywordInfact: "清醒、舒適、包容",
      	percentGlobal: "2.29"
      },
      "橙粉": {
      	percent: "41.59",
      	peoplecount: 2,
      	otherPeople: "橙",
      	otherPeopleText: "外在橙色的人,是高能量的樂觀主義者!\n你能為團隊帶來驚奇的貢獻!是人群中的聚光燈!\n橙色的人被充沛的精力包圍,你的無限活力令人驚歎!",
      	infact: "粉",
      	infactText: "內在粉色的人,心思敏感而柔軟!\n無限活力的背後,細膩和安靜是你對待世界的另一面!\n粉色在體察浪漫上有獨家天賦,是最溫柔善良的顏色!",
      	oneWord: "海平面初升的陽光",
      	attracted: ["橙綠", "藍粉"],
      	keepAway: ["金", "銀"],
      	songName: "lazy afternoon",
      	songId: "29049489",
      	songUrl: "https://m7.music.126.net/20890607233849/0e96612a759def67fbda27bc1c878eaf/ymusic/obj/w5zDlMODwrDDiGjCn8Ky/2593302435/7a79/7078/2352/2ff263188f0ff4d3e4d4957fcf04e7e8.mp3?infoId=1347334",
      	keywordOther: "熱忱、高能量、有朝氣",
      	keywordInfact: "純粹、柔和、治癒",
      	percentGlobal: "3.6"
      },
      "藍粉": {
      	percent: "59.99",
      	peoplecount: 2,
      	otherPeople: "藍",
      	otherPeopleText: "外在藍色的人,註定要扮演引領全域性角色!\n你向外界舒適地展示著自我,慷慨地向同伴提供支援!\n藍色的人眼光長遠,總能用實力書寫成功和美好!",
      	infact: "粉",
      	infactText: "內在粉色的人,眼睛裡充滿溫柔氣息!\n你對待他人和自我都很貼心,容易讓人感受到溫暖!\n雖然你一路披荊斬棘,但不影響你成為一個仁慈善良的人!",
      	oneWord: "天邊透亮的星",
      	attracted: ["綠", "橙粉"],
      	keepAway: ["金橙", "金綠"],
      	songName: "13 jours en France / Piano Solo",
      	songId: "1343379745",
      	songUrl: "https://m8.music.126.net/20890607234458/dec8b682232e1ef6697294f284f82c74/ymusic/obj/w5zDlMODwrDDiGjCn8Ky/9049762452/4932/829f/8e6d/b8779c96f4b25c9b6770627742ae34b4.mp3?infoId=1345280",
      	keywordOther: "冷靜、睿智、縱覽全域性",
      	keywordInfact: "純粹、柔和、治癒",
      	percentGlobal: "2.56"
      },
      "粉金": {
      	percent: "34.61",
      	peoplecount: 3,
      	otherPeople: "粉",
      	otherPeopleText: "外在粉色的人,舉手投足是溫柔!\n你善於發現大自然的美好,是浪漫和氛圍感的化身!\n粉色的人充滿關切,不斷向周圍人散播著溫暖與愛!",
      	infact: "金",
      	infactText: "內在金色的人,是與生俱來的帶頭人!\n你關注細節與規則,有一點完美主義,努力且高產!\n內在金色的人已臻成熟,內外統整,能成為自己生命主宰!",
      	oneWord: "絢麗奪目的晚霞",
      	attracted: ["藍", "紫"],
      	keepAway: ["綠", "金紫"],
      	songName: "遇晴",
      	songId: "1495115654",
      	songUrl: "https://m7.music.126.net/20890607234631/8f915cb6203b84305c4e1c6b74b7b355/ymusic/obj/w5zDlMODwrDDiGjCn8Ky/9049794516/7894/7df9/b202/b4f33e7aabe9a00face7dd00b64120f4.mp3?infoId=1348306",
      	keywordOther: "單純、體貼、溫暖",
      	keywordInfact: "勇氣、無私、責任心",
      	percentGlobal: "2.43"
      },
      "粉紫": {
      	percent: "51.78",
      	peoplecount: 2,
      	otherPeople: "粉",
      	otherPeopleText: "外在粉色的人善於傾聽,渾身散發著治癒的能量!\n你待人誠懇,與你共處的時光讓人覺得心曠神怡!\n粉色的人共情力很強,很少有你不能理解的立場和觀點!",
      	infact: "紫",
      	infactText: "內在紫色的人,是最神祕難以捉摸的顏色!\n思想深邃的你,最強大的力量在於感知,洞察和直覺!\n紫色的人就是魔法師,往往能實現不可思議的願望!",
      	oneWord: "神祕溫柔的療愈師",
      	attracted: ["金", "紫"],
      	keepAway: ["橙綠"],
      	songName: "dane street",
      	songId: "2640613",
      	songUrl: "https://m8.music.126.net/20890607234128/62abf412c5eb36f8269df617c3301e11/ymusic/obj/w5zDlMODwrDDiGjCn8Ky/9049683842/19f4/da95/5c5e/b141bc3fa02a0daaec72a0d13f5a0cb8.mp3?infoId=1347335",
      	keywordOther: "單純、體貼、溫暖",
      	keywordInfact: "浪漫、剋制、夢幻",
      	percentGlobal: "3.13"
      },
      "橙綠": {
      	percent: "26.57",
      	peoplecount: 4,
      	otherPeople: "橙",
      	otherPeopleText: "外在橙色的人,是高能量的樂觀主義者!\n你能為團隊帶來驚奇的貢獻!是人群中的聚光燈!\n橙色的人被充沛的精力包圍,你的無限活力令人驚歎!",
      	infact: "綠",
      	infactText: "內在綠色的人擁有真正智者的靈魂,邏輯至上!\n綠色是最機敏聰慧的顏色,熱愛思考,有真知灼見!\n你善於解決問題並不斷創造新的觀點,總是令人振奮!",
      	oneWord: "絢爛而璀璨的極光",
      	attracted: ["金", "銀"],
      	keepAway: ["粉紫"],
      	songName: "Belonging",
      	songId: "1823125",
      	songUrl: "https://m7.music.126.net/20890612232945/17fe4c2dd4026c7751ad8ffb95012739/ymusic/obj/w5zDlMODwrDDiGjCn8Ky/9121633586/bc14/de3b/2cc0/7554e49ff87b49b8072afdbb8c526e85.mp3?infoId=1348315",
      	keywordOther: "熱忱、高能量、有朝氣",
      	keywordInfact: "清醒、舒適、包容",
      	percentGlobal: "2.88"
      },
      "金紫": {
      	percent: "33.67",
      	peoplecount: 3,
      	otherPeople: "金",
      	otherPeopleText: "金色是所有顏色中最值得信賴的!\n你有著奢侈品般的高標準,自己就是自己的品牌!\n金色的人認真可靠,拜託你的事情可以安心等待好訊息!",
      	infact: "紫",
      	infactText: "內在紫色的人,擁有渾然天成的洞察力和浪漫基因!\n你彷彿被命運偏愛,有著令人嫉妒的藝術天賦!\n紫色的人就是魔法師,總能實現不可思議的願望!",
      	oneWord: "流光溢彩的鑽石",
      	attracted: ["綠", "金綠"],
      	keepAway: ["紫", "粉金"],
      	songName: "バラのように咲く",
      	songId: "1992713",
      	songUrl: "https://m8.music.126.net/20890612230932/946e18167dcba479846d54a134d4901e/ymusic/obj/w5zDlMODwrDDiGjCn8Ky/9121399218/5fc6/bbc9/9a7c/152d0243d164515b75f0a28709086b5c.mp3?infoId=1346372",
      	keywordOther: "領導力、正義、勤奮",
      	keywordInfact: "浪漫、剋制、夢幻",
      	percentGlobal: "4.26"
      }
      
  • 結語

    • 如下圖,大師不愧是大師,構造的演算法憑藉精妙的隨機讓一般人歎為觀止,事實上,隨機是演算法中重要的一環
    • 對網易雲性格主導色實現與演算法的簡要分析
    • 我想,這位大師一定非常喜歡Treap吧,把FHQ Treap奉為信仰的我和這位大師也算是心有靈犀呢
    • 最後,讓我們心懷敬仰的寫出如下程式碼,結束本文
      std::mt19937 generator(0x114514);
      

相關文章