2008年8月28日 星期四

電腦猜數字....

最近無聊上班太無聊
所以開始研究些有的沒的東西
於是想說研究看看電腦猜數字的程式的演算法是怎麼做到的
昨天大概想了一下還是不知道該如何下手
於是上Google找了一下...結果還真的是很多丫....
而且還人家還附上原始碼呢!!
參考網址:http://www.javaworld.com.tw/jute/post/view?bid=35&id=35423&sty=1&tpg=1&age=0

其實這方法的邏輯非常的簡單...
只分幾個步驟如下

Step1:

產生一個陣列存放所有可能的答案
如:{0123,0124,0125,.......,9875,9876}

Step2:

從所有可能中找出一個數來猜
如:第一個0123

Step3:

由玩家所填入的?A?B去判斷所有答案中符合這條件的所有的數
因為....由正解和你猜的數分析會是?A?B那也表示反推也是一樣的答案
然後將不符合條件的數設為-1
如:假設答案是5432
則0123得到0A2B
如果把0123當解答的話 你猜5432得到的也是0A2B
所以說你現在是反推的方式去想...只有和0123比較會得到0A2B的數才有可能是解答
也就是說其他不可能的數就可以刪除掉了

Step4:

重覆Step2~Step3就可以很快的得到答案了


所以一切就是這麼的簡單....

2008年8月22日 星期五

[Python]用DBus和Pidgin通訊

要用Python呼叫正在執行中的Pidgin其實非常的簡單
只要你的Pidgin的DBus的Function正常執行
可以用這行程式檢查

$dbus-monitor type=signal interface="im.pidgin.purple.PurpleInterface"


這是監聽DBus上由"im.pidgin.purple.PurpleInterface"所發出的訊號
看得到回應就是有,看不見就是沒有

如果你的DBus Function正常執行的話
你只要在Python 的前面import 進dbus
再加點設定就OK了
就像這樣

import dbus bus = dbus.SessionBus()
obj = bus.get_object("im.pidgin.purple.PurpleService", "/im/pidgin/purple/PurpleObject")
purple = dbus.Interface(obj, "im.pidgin.purple.PurpleInterface")


接著就能在程式中呼叫pidgin中的Dbus函式了

如以下是一個登入的function
def login(account_protocol, account_name, account_pass):
account = purple.PurpleAccountNew(account_name, account_protocol)
purple.PurpleAccountSetPassword(account, account_pass)
purple.PurpleAccountsAdd(account) purple.PurpleAccountSetEnabled(account,"gtk-gaim",1)
purple.PurpleBlistSetVisible(1)



其他的參考資訊可在Pidgin官網查到
http://developer.pidgin.im/wiki/DbusHowto