GDD 2010 Dev QuizのしりとりをPrologで解いてみた 
金曜日, 8月 27, 2010, 08:59 PM - プログラム
GDD 2010 Dev QuizのしりとりをPrologで解いてみた。
ソースはこんな感じ。

/* 単語一覧 */
word('cjhexybf','c','f').
word('fwhsrnfmfwl','f','l').
word('fwmclnpgv','f','v').
word('fcqyykmcz','f','z').
word('fzizucydrln','f','n').
word('lzrolv','l','v').
word('lealqfhwvz','l','z').
word('vllumjtw','v','w').
word('veamp','v','p').
word('vombftpxjn','v','n').
word('vcqdfhx','v','x').
word('wjccgnhsp','w','p').
word('weetdzq','w','q').
word('wjfppjiq','w','q').
word('plguqhggea','p','a').
word('pqlmgfcbhcs','p','s').
word('pqdosvooi','p','i').
word('atlywms','a','s').
word('acolnpnk','a','k').
word('sqtfqle','s','e').
word('skmhxd','s','d').
word('skrpmkbu','s','u').
word('espslutsd','e','d').
word('epmzsxkey','e','y').
word('ejddiy','e','y').
word('eqtwaowso','e','o').
word('dxxhioj','d','j').
word('drzckcjo','d','o').
word('jtpvc','j','c').
word('zcznklih','z','h').
word('hhkzgq','h','q').
word('qtlwm','q','m').
word('mlkqlqek','m','k').
word('kuouldmt','k','t').
word('krzfwmdjxi','k','i').
word('tcwjjzfnhde','t','e').
word('ttihzemy','t','y').
word('yhrgnymb','y','b').
word('bpheoteg','b','g').
word('geyvr','g','r').
word('nrpex','n','x').
word('xzetvnrrwq','x','q').
word('idsnumnbno','i','o').
word('odijxqhihu','o','u').
word('uqslajc','u','c').
word('cfrdzsr','c','r').

/* 述語 */
member(X, [X|_]).
member(X, [_|L]) :- member(X, L).

nextWord([L|A], W) :-
word(L,_,T),word(W,T,_),not(member(W,[L|A])).

solvePath(PATH,PATH) :-
not(nextWord(PATH,_)).
solvePath(PATH,RESULT) :-
nextWord(PATH,W),
solvePath([W|PATH],RESULT).

goodMyPath(PATH,PATH) :-
not(nextWord(PATH,_)).
goodMyPath(PATH,RESULT) :-
not(badMyPath(PATH)),
nextWord(PATH,W1),
nextWord([W1|PATH],W2),
goodMyPath([W2|[W1|PATH]],RESULT).

badMyPath(PATH) :-
nextWord(PATH,W1),
not(nextWord([W1|PATH],_)).
badMyPath(PATH) :-
nextWord(PATH,W1),
not(nonBadEnemyPath([W1|PATH])).
nonBadEnemyPath(PATH) :-
nextWord(PATH,W),
goodMyPath([W|PATH], _).

solveGamePath(START,RESULT) :-
nextWord(START,W),
goodMyPath([W|START],RESULT).


実行すると全解探索して絶対勝てるパスを
バックトラックしながら全部だしてくれます。

?- solveGamePath(['cjhexybf'],RESULT).
RESULT = [cfrdzsr, jtpvc, dxxhioj, espslutsd, sqtfqle, atlywms, plguqhggea, wjccgnhsp, vllumjtw, lzrolv, fwhsrnfmfwl, cjhexybf] ;
RESULT = [geyvr, bpheoteg, yhrgnymb, epmzsxkey, sqtfqle, atlywms, plguqhggea, wjccgnhsp, vllumjtw, lzrolv, fwhsrnfmfwl, cjhexybf] ;
RESULT = [geyvr, bpheoteg, yhrgnymb, ejddiy, sqtfqle, atlywms, plguqhggea, wjccgnhsp, vllumjtw, lzrolv, fwhsrnfmfwl, cjhexybf] ;
RESULT = [cfrdzsr, uqslajc, odijxqhihu, eqtwaowso, sqtfqle, atlywms, plguqhggea, wjccgnhsp, vllumjtw, lzrolv, fwhsrnfmfwl, cjhexybf] ;
RESULT = [cfrdzsr, uqslajc, skrpmkbu, atlywms, plguqhggea, wjccgnhsp, vllumjtw, lzrolv, fwhsrnfmfwl, cjhexybf] ;
RESULT = [cfrdzsr, uqslajc, odijxqhihu, idsnumnbno, krzfwmdjxi, acolnpnk, plguqhggea, wjccgnhsp, vllumjtw, lzrolv, fwhsrnfmfwl, cjhexybf] ;
RESULT = [cfrdzsr, uqslajc, odijxqhihu, idsnumnbno, pqdosvooi, wjccgnhsp, vllumjtw, lzrolv, fwhsrnfmfwl, cjhexybf] ;
RESULT = [cfrdzsr, uqslajc, odijxqhihu, idsnumnbno, krzfwmdjxi, mlkqlqek, qtlwm, weetdzq, vllumjtw, lzrolv, fwhsrnfmfwl, cjhexybf] ;
RESULT = [cfrdzsr, uqslajc, odijxqhihu, idsnumnbno, krzfwmdjxi, mlkqlqek, qtlwm, wjfppjiq, vllumjtw, lzrolv, fwhsrnfmfwl, cjhexybf] ;
RESULT = [cfrdzsr, uqslajc, odijxqhihu, idsnumnbno, krzfwmdjxi, mlkqlqek, qtlwm, xzetvnrrwq, vcqdfhx, lzrolv, fwhsrnfmfwl, cjhexybf] ;
RESULT = [cfrdzsr, uqslajc, odijxqhihu, idsnumnbno, krzfwmdjxi, mlkqlqek, qtlwm, hhkzgq, zcznklih, lealqfhwvz, fwhsrnfmfwl, cjhexybf] ;
false.


組み方は我ながら雑だけど、これでLv3まで全部いけました。
(Lv3は予め枝狩りをしておかないと無理でしたが。)
Prolog恐るべし…


  |  0 trackbacks   |  このエントリーのURL   |  related link   |   ( 3 / 982 )

悩むことと考え込むこと 
日曜日, 8月 8, 2010, 06:52 PM - 戯れ言
悩むことと考え込むことは違う。
前者は放っておいても解決するが後者は解決しない。

進めなくなって立ち止まっているなら、
考えないといけないことか、
悩む必要のあることなのか、
そこの分別ができなければ拗らせることになる。

考えないことを悩んでも解決しない。
悩んでいるものを考えても解決しない。
そんなことを続けていれば、
心を磨り減らすだけだ。

まぁ悩むのを楽しんでいられることなら
いいんだけどね(´・ω・)

  |  0 trackbacks   |  このエントリーのURL   |  related link   |   ( 3 / 1057 )

前向きに見せること 
日曜日, 7月 18, 2010, 11:48 PM - 戯れ言
小中高とニヒっていたからどういう行動を取れば
前向きに見えたり後ろ向きにするかは判る。
だから前向きに見えるように立ち振る舞えば、
当然周りからは前向きに見える。

でも見えるだけで、当人が本当に前向きかはわからない。
根っから真面目でそうしているのかもしれない。
人によく見て欲しいからそうしてるのかもしれない。
敵を作りたくないからそうしてるのかもしれない。
前向きでないといけないという強迫観念からかもしれない。

まぁ、どうでもいい。

  |  0 trackbacks   |  このエントリーのURL   |  related link   |   ( 3 / 733 )

Debian Linux(Lenny)とHT-03Aの接続トラブル 
日曜日, 7月 11, 2010, 03:49 PM - Android
Debian Linux(Lenny)でAndroid SDKを触っていて、
USB接続のHT-03Aをddmsから見ようとすると
例外が出て見れない現象が起こった。

37:32 E/DDMS: device (????????????) request rejected: insufficient permissions for device
java.io.IOException: device (????????????) request rejected: insufficient permissions for device
at com.android.ddmlib.AdbHelper.setDevice(AdbHelper.java:726)
at com.android.ddmlib.AdbHelper.executeRemoteCommand(AdbHelper.java:363)
at com.android.ddmlib.Device.executeShellCommand(Device.java:280)
at com.android.ddmuilib.SysinfoPanel.loadFromDevice(SysinfoPanel.java:156)
at com.android.ddmuilib.SysinfoPanel.deviceSelected(SysinfoPanel.java:123)
at com.android.ddmuilib.SelectionDependentPanel.deviceSelected(SelectionDependentPanel.java:52)
at com.android.ddms.UIThread.selectionChanged(UIThread.java:1662)
at com.android.ddmuilib.DevicePanel.notifyListeners(DevicePanel.java:753)
at com.android.ddmuilib.DevicePanel.notifyListeners(DevicePanel.java:741)
at com.android.ddmuilib.DevicePanel.access$1100(DevicePanel.java:56)
at com.android.ddmuilib.DevicePanel$1.widgetSelected(DevicePanel.java:360)
at org.eclipse.swt.widgets.TypedListener.handleEvent(Unknown Source)
at org.eclipse.swt.widgets.EventTable.sendEvent(Unknown Source)
at org.eclipse.swt.widgets.Widget.sendEvent(Unknown Source)
at org.eclipse.swt.widgets.Display.runDeferredEvents(Unknown Source)
at org.eclipse.swt.widgets.Display.readAndDispatch(Unknown Source)
at com.android.ddms.UIThread.runUI(UIThread.java:484)
at com.android.ddms.Main.main(Main.java:105)


どうやらUSB接続を見るのに権限が足りていないようだ。
よくよく考えれば大抵のデバイスはrootでないと
接続できないので当然といえば当然だ。

で、調べてみると本家のサイトにも記載があった。
Setting up a Device for Development

このサイトの通り、/etc/udev/rules.d/51-android.rulesを作って、
# For Gusty/Hardy, edit the file to read:
SUBSYSTEM=="usb", SYSFS{idVendor}=="0bb4", MODE="0666"
# For Dapper, edit the file to read:
SUBSYSTEM=="usb_device", SYSFS{idVendor}=="0bb4", MODE="0666"

chmodしてudevを再起動して、
# chmod a+r /etc/udev/rules.d/51-android.rules
# /etc/init.d/udev reload

HT-03Aを差し直した。

・・・

でも相変わらず見えないままだった・・・。
様子からすると権限が正しく見えてない様子。
ふと思ってudevのrulesを"usb"でgrepをかけると・・・
/etc/udev/rules.d# grep -H "usb" *.rules

(略)
51-android.rules:SUBSYSTEM=="usb", SYSFS{idVendor}=="0bb4", ATTRS{idProduct}=="0c02", MODE="0666"
51-android.rules:SUBSYSTEM=="usb_device", SYSFS{idVendor}=="0bb4", ATTRS{idProduct}=="0c02", MODE="0666"
(略)
91-permissions.rules:SUBSYSTEM=="usb_device", MODE="0664"
(略)


91-permissions.rulesで上書きしてるがな・・・(´・ω・)
というわけで51-android.rules→92-android.rulesにリネームすることで対処した。

やっと実機でデバッグができる。
しかしディストリビューションごとのこの辺りの差異は厄介だなぁ。

  |  0 trackbacks   |  このエントリーのURL   |  related link   |   ( 3 / 831 )

若年層の雇用不安 
水曜日, 6月 23, 2010, 10:36 PM - 戯れ言
若年層のワーキングプアが深刻だが、
それは雇用が少ないため不安定な環境に身を置かざるを得ないからだ。

なぜ雇用が少ないのかは企業にお金が少ないからだ。
お金が少ないと多くの人は雇えない。
何故なら最低賃金が法律で決まっているからだ。
最低賃金を下げることが出来れば各人の賃金は減るが雇用を増やせる。

また別の問題もある。
現状ではサービス残業に代表される、
最低賃金を下回る賃金しか支払われていない人が居る。
これは労働基準法に罰則が弱すぎることと、
労働基準監督署が仕事をしていないことに起因する。

これらの2つを重ねると、
まず最低賃金を下げ、法的な罰則を強化し、
労働基準監督署の怠慢を締め上げることで解決する。

でも、これを選挙で言うと
最低賃金を下げるといえば国民の票は失い、
法的な罰則の強化は経営者の票を失い、
労働基準監督署の怠慢を締め上げると公務員の票を失い、
悪いことずくめになってしまう。

だから何処の政党もどこぞの馬鹿政党のように
「最低賃金を引き上げます」などと
出来もしないお花畑のようなことしかいわない。
でもそういう政党が政権を取れてしまう。
まぁ、人間なんて所詮その程度なのかもしれない。


国を乗っ取るにはメディアを乗っ取って情報操作し、
教育を乗っ取って国民を馬鹿にするというが、
まさにその通りだと思う。

難儀だなぁ・・・(´・ω・)

  |  0 trackbacks   |  このエントリーのURL   |  related link   |   ( 3 / 130 )


Back Next