ver0.2版很快就出來了。
1 2 3 4 5 6 7 8
1 13 108 622 1784 1856 609 47
(1 + 26 + 324 + 2488 + 8920 + 11136 + 4263 + 376) / 5040
= 27534 / 5040 = 5.463095238
code: http://codepad.org/6rTBUQ3h
小改:
以權重的方式,初始每個可能解的權重為1
假設找到1A2B,那麼一組可能解的前4 - 1 = 3位數若符合2B,權重加1。
假設找到2A2B,那麼一組可能解的前2位數若符合2B,權重加1。
以此類推。
priority_queue的top是權重最重的,表示最有可能是正解。
比起前一版的重要改進是至多8次非9次。
==========================================================
終於跑完了,未survey任何資料的非隨機1次結果:
1 2 3 4 5 6 7 8 9
1 13 108 603 1704 1820 693 95 3
1*1 + 2 * 13 + 3 * 108 + 4 * 603 + 5 * 1704 +
6 * 1820 + 7 * 693 + 8 * 95 + 9 * 3
= 1 + 26 + 324 + 2412 + 8520 + 10920 + 4851 + 760 + 27
= 27841
27841 / 5040 = 5.524007936507937
果然很糟糕,survey後再寫看看。
code: http://codepad.org/wbz29TlY
algorithm(其實也談不上):
1.開2組各10個priority_queue,先把5040種可能依首字放入。
2.找這10個priority_queue數量最多的top猜nAmB,猜完後pop。
3.如果n = 4,返回猜測次數。跳至5.
4.假設 nA mB,在這10個priority_queue裡的候選字組與這個top猜n2Am2B,
猜完後pop。如果 n2 = n && m2 = m,則放入第二組首字相同的priority_queue
交換兩組priority_queue。然後跳至2.
5.結束。
※ 引述《SocketAM2 (AM2)》之銘言:
: 前陣子在python版看到有人討論到這個當年煞到我的遊戲,
: 一下子熱血舊夢又被重燃...
: 我還算有能力把我手上的想法用C弄出來,
: 幾個程式設計相關的板這裡也算是人氣較旺,
: 來這裡搞搞看有沒有人願意一起來玩玩瘋瘋
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.32.177.97
※ 編輯: bleed1979 來自: 114.32.177.97 (09/22 16:38)