解答・コメントを送る方法
コメントを送るには2つの方法があります。
- 匿名でコメントを書くログインせずにコメントを書くことができます。 名前は「匿名」となります。
- アカウントを作成してコメントを書くアカウントを作成すると、記名での投稿ができます。 また、プロフィールページが作成され、 簡単なプロフィールや 統計情報が表示されるようになります。
投稿ボタンを押す前に以下の文章を確認してください
- 当サイトへの投稿は クリエイティブ・コモンズ・ライセンス BY(表示)および、その解釈に同意するものとみなされます。各ページには下のようにライセンス表示が行われます。
- あなたの投稿したコード・コメント・トピックが再利用・添削されることを望まない場合は、投稿をお控えください。
- 自分が書いていない、ウェブサイトや書籍などからの無断コピーは著作権の侵害です。著作権者の了解を得るか、自分で0から書いてください。
- 著作権の侵害、名誉毀損、など投稿内容に問題がある場合、削除することがあります。
- これらのことにあなたはあらかじめ同意したものとみなされます。
Post comment
Post a comment to the following challenge:
マルバツゲーム:賢いプレイヤー
(Nested
Flatten)
As a reply to the following comment: まさぽん: 先攻の場合は、リーチされてなければ、でき...(#6456) [show]

まさぽん
#6456()
[
Arc
]
Rating0/0=0.00
後攻の場合は、相手の初手に合わせて戦略を変えています。
思った以上の勝率でちょっとビックリしました。
実行結果:
arc> (nplay-ox 10000 smart-player)
smart-player win: 9919
random-player win: 0
draw: 81
nil
arc> (nplay-ox 10000 random-player)
smart-player win: 8428
random-player win: 0
draw: 1572
nil
(= lines '((1 2 3) (1 4 7) (1 5 9) (2 5 8) (3 5 7) (3 6 9) (4 5 6) (7 8 9))) (def lsets<= (s1 s2) (all [mem _ s2] s1)) (def reach? (line mark pool) (let marked (map [if (mem _ mark) t nil] line) (if (and (is (count nil marked) 1) (mem (line (pos nil marked)) pool)) (line (pos nil marked)) nil))) (def random-player (smark rmark pool) (if (is pool nil) 'd (withs (picked (random-elt pool) rm (cons picked rmark) rp (rem picked pool)) (if (some [lsets<= _ rm] lines) 'r (smart-player smark rm rp))))) (def smart-player (smark rmark pool) (if (is pool nil) 'd (let rr (rem nil (map [reach? _ rmark pool] lines)) (if (isnt nil (rem nil (map [reach? _ smark pool] lines))) 's (isnt nil rr) (random-player (cons (car rr) smark) rmark (rem (car rr) pool)) (odd (len pool)) (senkou smark rmark pool) (koukou smark rmark pool))))) (def senkou (smark rmark pool) (if (is (len pool) 9) (random-player (cons 1 smark) rmark (rem 1 pool)) (is (len pool) 7) (let m (if (lsets<= '(2 3) pool) 3 7) (random-player (cons m smark) rmark (rem m pool))) (is (len pool) 1) 'd (let m (if (lsets<= '(4 7) pool) 7 9) (random-player (cons m smark) rmark (rem m pool))))) (def koukou (smark rmark pool) (let rf (last rmark) (if (mem rf '(1 3 7 9)) (pat1379 smark rmark pool) (mem rf '(2 4)) (pat24 smark rmark pool) (mem rf '(6 8)) (pat68 smark rmark pool) (pat5 smark rmark pool)))) (def pat1379 (smark rmark pool) (if (is (len pool) 8) (random-player (cons 5 smark) rmark (rem 5 pool)) (is (len pool) 6) (let m (if (some [mem _ rmark] '(2 6)) 3 (some [mem _ rmark] '(4 8)) 7 2) (random-player (cons m smark) rmark (rem m pool))) (is (len pool) 4) (let m (if (some [mem _ rmark] '(2 8)) 4 2) (random-player (cons m smark) rmark (rem m pool))) (let picked (random-elt pool) (random-player (cons picked smark) rmark (rem picked pool))))) (def pat24 (smark rmark pool) (if (is (len pool) 8) (random-player (cons 1 smark) rmark (rem 1 pool)) (is (len pool) 6) (let m (if (lsets<= '(2 9) rmark) 7 (lsets<= '(4 9) rmark) 3 5) (random-player (cons m smark) rmark (rem m pool))) (is (len pool) 4) (let m (if (lsets<= '(2 4 9) rmark) (if (mem 5 pool) 5 (mem 3 pool) 3 7) (lsets<= '(2 5 9) rmark) 7 (lsets<= '(5 4 9) rmark) 3) (random-player (cons m smark) rmark (rem m pool))) (let picked (random-elt pool) (random-player (cons picked smark) rmark (rem picked pool)))))) (def pat68 (smark rmark pool) (if (is (len pool) 8) (random-player (cons 9 smark) rmark (rem 9 pool)) (is (len pool) 6) (let m (if (lsets<= '(1 6) rmark) 7 (lsets<= '(1 8) rmark) 3 5) (random-player (cons m smark) rmark (rem m pool))) (is (len pool) 4) (let m (if (lsets<= '(1 6 8) rmark) (if (mem 5 pool) 5 (mem 3 pool) 3 7) (lsets<= '(1 5 8) rmark) 3 (lsets<= '(1 5 6) rmark) 7) (random-player (cons m smark) rmark (rem m pool))) (let picked (random-elt pool) (random-player (cons picked smark) rmark (rem picked pool)))))) (def pat5 (smark rmark pool) (if (is (len pool) 8) (random-player (cons 1 smark) rmark (rem 1 pool)) (is (len pool) 6) (random-player (cons 3 smark) rmark (rem 3 pool)) (let picked (random-elt pool) (random-player (cons picked smark) rmark (rem picked pool))))) (def nplay-ox (n sente) (let wl (map (fn (_) (sente nil nil (range 1 9))) (range 1 n)) (prn "smart-player win: " (count 's wl)) (prn "random-player win: " (count 'r wl)) (prn "draw: " (count 'd wl)) nil))Rating0/0=0.00-0+
[ reply ]