2018年6月25日 星期一

如何在手機上的九宮格密碼上繪出最長距離?




A:這樣的九宮格,如何才能畫出最長線條??注意不能跨點。。。。



Q:精確值應該是


這個確實是最長路徑




其實這個答案也不難想到,不過證明還是要靠計算機窮舉。



當然根據對稱性,這八種都可以:


限定連接 n 個點的話,最短不用說應該都會構造,最長的話如下:



附對比代碼:


FindPatterns[pattern_List]:=Block[


,


If[moves===,Sow[pattern],


Scan[If[



pattern===||!MemberQ[moves,Mean[]],


FindPatterns[Append[pattern,#]]


]&,moves]]


];


AllPatterns=With[


]][[2,1]]},


Table[FullPatterns[[All,Range[dots]]]//Union,]


];


Length/@AllPatterns


(*



AllPatterns2=Block[


,


AllPermutations=Permutations[Range[1,9],];


InvalidSegments=,,,,,,,,,,,,,,,;


InvalidPattern=],___};


ValidPermutations=DeleteCases[AllPermutations,InvalidPattern];


ToGrid=Thread[Range[9]->Tuples[Range[3],2]];


Table[Select[ValidPermutations,Length[#1]==i&],]/.ToGrid


];


Length/@AllPatterns2



*)


GetDistanceTotal[EuclideanDistance@@@Partition[#,2,1]]&


TableForm[


Table[Join[,MinMax[AllDistance[[i]]],],],


TableHeadings->}


]


cs=Circle[#,0.3]&/@Tuples[Range[3],2];


AllDistance=Array[GetDistance/@AllPatterns[[#]]&,9];


AntiGrid=Thread[Tuples[Range[3],2]->Range[9]];


ToGrid=Thread[Range[9]->Tuples[Range[3],2]];



MaxPath=Extract[AllPatterns[[#]],Position[AllDistance[[#]],Max[AllDistance[[#]]]]]/.AntiGrid&;


FromDigits/@MaxPath[9]


First /@ Table[FromDigits /@ MaxPath[i], ]



我這個代碼比顧森那個快兩倍,而且也不用列什麼禁止列表(畢竟4*4列到死也不知有沒有漏)


然而並沒有什麼卵用,畢竟還是沒法算4*4棋盤…



我還見到了一種神奇的全程模式匹配解法,Mathematica的多種玩法真是令人窒息:


https://qiita.com/math_nakagawa/items/a83f43b2319ed6229e8a


本文由超級數學建模編輯整理


資料來源於醬紫君(知乎):


https://www.zhihu.com/question/30437539/answer/407468585


——這裡是數學思維的聚集地——


「超級數學建模」(微信號supermodeling),每天學一點小知識,輕鬆了解各種思維,做個好玩的理性派。50萬數學精英都在關注!


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 超級數學建模 的精彩文章:



http://www.kubonews.com/2018062522637.html

每日即時更新新聞,請上:http://www.kubonews.com

沒有留言:

張貼留言