wassup?

プログラミング、ボドゲ、ボカロ

15枚のデックでロイヤルテキサスホールデム

テキサスホールデムの変種に、ロイヤルホールデム(royal hold'em)があります。

これはAKQJTの5枚4スート、合計20枚のショートデックを使います。

あとは、普通のホールデムと同様にゲームを行います。

ランダムハンドの役出現確率は下のようになります。

5枚 5枚% 7枚 7枚%
royal 4 0.025 420 0.54
4oak 80 0.50 2800 3.6
full 480 3.0 29280 37.8
straight 1020 6.6 27740 35.8
3oak 1920 12.3 0 0
2pair 4320 27.9 17280 22.3
1pair 7680 50.0 0 0

7枚だと3oakが必ずfullになるので、出現頻度がfull>straightになるようです。

クレイジーロイヤルホールデム

デックは「sAhAdAcAsKhKdKcKsQhQdQsJhJsT」+Jokerの合計15枚です。

ホールデムをする場合バーンカード3枚含めるとmax 3人。バーンをしなければmax 5人です。

Jokerは任意のスートのAとして扱います。

デックはAが5枚、Kが4枚、Qが3枚、Jが2枚、Tが1枚で覚えてください。

役の強さは通常の順番でも良いですが、 頻度順の場合以下の順で役の強さが定義されます。

5枚 5枚% 7枚 7枚%
5oak 1 0.0034 45 0.70
royal 2 0.067 81 1.2
flush 5 0.16 189 2.9
4oak 61 2.0 750 11.7
straight 118 3.9 1316 20.5
full 173 5.8 2049 47.4
3oak 563 18.7 0 0
2pair 878 29.2 1005 15.6
1pair 1202 40.0 0 0

7枚引くとほぼ半分がfullになります。

flushは、royalになっていない形のため、Jokerを含む1pairかつflush形だけです。

このゲームの良さは、自分のハンドの情報がデックに対してあまりにも大きい所です。 例えばTを持っていれば他人にstraightを完成されることはありません。

楽しく遊べるショートデックポーカーの最小形の1つだと思われます。

ブラックバイスクル

ブラックバイスクル

本当のコントラクトブリッジの始め方・遊び方

4人集まったときにするトランプゲーム、何してますか? ハーツですか?スペードですか?

そういう4人が集まることができるなら、コントラクトブリッジの名前は聞いたことがあると思います。

ただ、ネット上にはコントラクトブリッジの情報が本当に少ない!

ブリッジをやったことがない4人でも始められる情報をまとめました。私はコントラクトブリッジを初めて1ヶ月の初心者なので、間違いがあったら指摘をお願いします。

Let's play bridge

f:id:wass80:20181226062056p:plain

http://www.jas.org.sg/aboutus/bridge/letsplaybridge.pdf

ミニブリッジの遊び方と、コントラクトブリッジの遊び方が書かれています。 このPDFに従えば、とりあえずブリッジを遊ぶことが出来ます。

f:id:wass80:20181226062356p:plain

このカラム。このビッディングの言葉がコントラクトブリッジを複雑にし、そして面白くしている所です。

交流ラウンジでのビッドから

コントラクトブリッジの遊び方がわかったら、ビッディングシステムについて知りたくなるはずです。

日本語で最も丁寧にまとまっているサイトはここだと思われます。

hp.vector.co.jp

SAYC summary

特に、このSAYCビットサマリーは日本語で最もまとまっているものに思います。 とりあえずこれを印刷してプレイすることも出来ます。 ただ、あくまでサマリーであり、ゲームの目的と専門用語がわかるまでは使いこなすことは出来ません。説明を読んでいることが前提ですね。

ブリッジ教室

ダミープレイの基本とビッドの基本が書かれています。 こちらは逆引き的には便利です。

コントラクトブリッジ教室

京都大学コントラクトブリッジクラブwiki

2/1 FGの例として便利です。

オープニングビッド - 京都大学コントラクトブリッジクラブwiki

こちらのPDFも説明が丁寧です

HANAのワンポイントレッスン

ビッディングシステムで心折れないために

正直最初は心が折れます。当然でしょう。サマリーと見せられた紙がA4で裏表5枚もあったら、誰でもドン引きします。しかもそのサマリーに書かれていないケースもたくさん発生するとなるとやばいですね。

ビッドには「ナチュラル」と「アーティフィシャル」の2つがあります。 初めは「ナチュラル」なビッドの意味を考えることができれば70%の状況に対応できるはずです。 そのために覚えるべきことは実は割と少ないです。 丁寧に整理していきましょう。

その上でビッドを言語化するのが大事です。例えば

「オープナー」のスートを「レイズ」したから「強さを主張していない」

というふうに整理されていくはずです。

ダミープレイで心折れないために

いや、普通の人間だと26枚のカード見せられていきなりかっこよくプレイできるはずないんですよ。 間違って当然です。 個人的に、ブリッジは間違って当然のゲームと思っています。 間違うことを恐れないで、それから学習すればいいと思います。

あと、プレイを言語化できるとだいぶ楽になります。プレイされたか確認すべきカードが明示的になるので。

ディフェンスで暇にならないために

まあもともと暇じゃないんですが。 一応シグナルというのがあります。 カードのプレイングによって絵札の有無とか枚数とかを伝えるやつです。 きっちり使えるとかっこいいので調べてみてください。

情報に困ったら

英語でググりましょう。Wikipediaも丁寧です。

1人でも遊びたい

FunBridgeが良いです。(50ボード無料。以降定期的に無料ボードが得られる)

Play bridge online for free with Funbridge

f:id:wass80:20181226073057p:plain

3人のCPUとブリッジが出来ます。

プレイ後に、同じボードをプレイした人と得点の比べ合いが出来ます。 つまり、デュプリケートブリッジが手軽に楽しめます。 プレイの練習や、ビッドの慣れには十分使えるのでおすすめです。 実はチュートリアルもあり、英語が読めるなら悪くない奴です。

人をブリッジに誘いたい

ビッディングボックスが超便利です。

Bridge bidding sequence.jpg
By KoeppiK - 投稿者自身による作品, CC 表示-継承 3.0, Link

ボドゲコンポーネントに興味を持ってもらえることがありますよね? そのノリで誘うといいと思います。 ただこれ、4400円とちょっとお高いんですよね‥ 写真の真ん中にあるボードとトランプを4セット買うと、合計でボドゲ2、3つ分の値段がします。高い

ボドゲ『ハイパーロボット』の(気の狂った)バリアントルール

ボドゲが好きなwass80です。

デジタルゲームでは難しいが、ボードゲームだと手軽にできることは何でしょうか。それはルールを改変することです。

今回はプログラマの間でそこそこ知名度のある『ハイパーロボット』において、サークルで生まれたバリアントルールを紹介します。

ハイパーロボットとは

  • 壁の書かれたボード
  • 4色のロボット
  • ロボットの内の1色の書かれたゴール地点
  • 砂時計(30秒?) を準備します。

f:id:wass80:20181225142704j:plain

  • ゴールの色のロボットがそのゴールに到達するのに何手かかるかを暗算します。
  • 1手とは任意のロボットを上下左右に動かすことです。壁かロボットにぶつかるまで途中で止まる事はできません。
  • 下の状態だと(おそらく)4手ということになります。

f:id:wass80:20181225142809j:plain

  • 求めたらその手数を宣言し、砂時計をひっくり返します。
  • 砂時計が落ちるまで、他の人も宣言が出来ます。
  • 砂時計が落ちたら、最も少ない宣言をより早くした人がその証明をします。
  • 証明に成功で1点です。失敗した場合、同じ手数で次に早く宣言した人、居なければ次に小さい手数を宣言した人に証明する権利が移ります。
  • 以上を繰り返し、最も得点の高い人が優勝です。

マルチロボット

  • ゴールを4色分出るまでめくり続けます。
  • 目的を「全部のゴールにすべてのロボットが同時に存在する」に変更します。

f:id:wass80:20181225143252j:plain

手数がかなり増えます。数えるだけでしんどい。 だいぶハードになるので、普通のロボットに飽きた人におすすめです。

天竺ロボット

  • 8枚のボードすべてを並べます。
  • 中央のボードのないところは通行不可です。
  • ボードの接続部分にあるもともと外側の壁だった部分は無視します。
  • ゴールとなる場所が複数ある場合は、ロボットの現在位置から任意の空間で遠い方をゴールとします。どちらもゴールとしても良いでしょう。
  • 本来内側の灰色の部分は写真とは逆で、外向きにするほうが楽しいマップになります。
  • 虹色のゴールはゴールの役割をやめ、ワープにすると良いです。ワープを踏むと0手で必ず反対側のワープに移動し、慣性を保存するように移動を続けます。

f:id:wass80:20181225143457j:plain

これはロボットの動きがめっちゃ伸びるので楽しいですね。 右回りか左回りか、どっちが早いかの直感がまず勝負どころになります。

ミニロボット

  • 1枚のボードだけ並べます

f:id:wass80:20181225143648j:plain

案外出来ます。

トーラスロボット

  • ロボットが外側の壁にぶつかった時、そこで止まらず反対側の壁から出現します。
  • ループして止まれない場合はその動きは不正です。

ワープするときに1行ずれたりしてめっちゃむずいです。

ミニトーラスロボットもおすすめです。

天竺マルチロボット

f:id:wass80:20181225143919j:plain

なんでこれサークルの人々サクサクプレイできるの?

マイクロロボット

マイクロロボット

SpreadSheetでトランザクションを管理してポーカー大会をした

この記事はSpreadsheets/Excel Advent Calendar 2018の最終日の記事です。

adventar.org

tl;dr

  • Google Spreadsheetにポーカーチップのやり取りを書く。
  • Google Apps Scriptでポーカーチップの変化とランキングをかっこよく出す。

f:id:wass80:20181222230118p:plain

ポーカー

ポーカーをご存知ですか?トランプゲームのやつです。日本で広く知られているのは5枚配られ、1回交換して、強い役を作って楽しむゲームです。または、1枚配ってのインディアン・ポーカーのほうが有名かもしれません。

海外において主流なのはテキサスホールデムポーカーです。 世界で最も賞金の高い大会としても知られています。 積み上がっているお札がやばい。 www.youtube.com

ポーカー大会

というわけでサークルでポーカー大会をすることにしました。 1日でやっても良かったのですが、2時間程度のテーブルを14日開催する形式にしました。

チップのやり取りの管理のために、Spreadsheetの力を借りました。 別の手の抜き方として、Firebaseを使うことも考えましたが、 やり取りの入力をするのが自分だけであることからOverkillな感じがしました。参加者も20人程度だったので大丈夫でしょう。

見た目

セキリュティーやプライバシーのためにサイトそのものの公開はしませんが、見た目はこんな感じです。

f:id:wass80:20181222231134p:plain

Spreadsheetそのものよりは遥かにかっこいいですね。 僕がSpreadsheetをいじることでこのサイトが自動で更新されます。

その下には個別のゲームの結果がずらずらと並びます。 f:id:wass80:20181222231316p:plain

トランザクションを手で書く

新しいシートを作り、トランザクションを手で書きます。 f:id:wass80:20181222231520p:plain

全体シートに1行追加して、シート名を書きます。 f:id:wass80:20181222231632p:plain

関数で頑張っているので、更新はこれで終わりです。 DBとしては正規化が効いていなくて最悪な感じもしますが、使い捨て&楽なので良しとします。

Apps script側

あまり真面目に解説はしません。デプロイなどの仕方は他の記事を見てください。割と力技です。自分だけが入力する以上、汚染されたデータが一切存在しないと考え、セキリュティーについては考えていません。

注意点としては、doGetで処理をするとレスポンスに時間がかかります。 そのため、データを取得するところは別の関数(getData)にして非同期に呼び出しましょう。

//コード.gs抜粋
function doGet() {
  return HtmlService
      .createTemplateFromFile('index')
      .evaluate();
}

function getData() {
  const db = getDB();
  const tbl = getTable(db, "Stack");
  const res = {};
  res.stack = [];
  for (var i = 1; i < tbl.length; i++){
    res.stack.push({user:tbl[i][0], stack:tbl[i][1]});
  }
  
  const tnms = tbl[0].slice(2, -1);
  res.tnms = []
  for (var i = 0; i < tnms.length; i++){
    var tnm = getTable(db, tnms[i]);
    res.tnms.push({name: tnms[i], desc: tnm[0][0], result: tnm.slice(2)});
  }
  Logger.log(res);
  return res;
}
//index.html抜粋
<script>
// The code in this function runs when the page is loaded.
$(function() {
  google.script.run.withSuccessHandler(show).getData();
});

function show(data) {
  const list = $('#ranking');
  const stack = data.stack.sort((a, b)=>b.stack - a.stack);
  for (var i = 0; i < stack.length; i++) {
    const c = Math.max(0, Math.floor((stack[i].stack - 1000) / 100));
    list.append(`<tr><td>${i + 1}`+
                    `<td>${stack[i].user}`+
                    `<td>${stack[i].stack}`+
                    `<td>${c}:${(new Array(1 + c)).join("🍫")}`);
  }
  const tlist = $("#tlist");
  for (let tnm of data.tnms) {
    let table = `<h3>${tnm.desc} (${tnm.name})</h3><table><tr><th>Rank<th>Name<th>Pay<th>Get`;
    const result = tnm.result;//.sort((a,b)=>b[2]-a[2]);
    for (var i = 0; i < result.length; i++) {
      table += `<tr><td>${i + 1}`+
                    `<td>${result[i][0]}`+
                    `<td>${result[i][1]}`+
                    `<td>${result[i][2]}`;
    }
    table += `</table>`
    tlist.append(table);
  }
}
</script>

この部分と、getDataの実装をすれば終わりでした。 とても手軽ですね。 最初に出てきたわけのわからないグラフも、Spreadsheetで作ったグラフを埋め込むだけです。楽ちん。

運営してみて

一番めんどくさいところはやはりトランザクションの入力です。 でもこれはそもそもどうしようもない手間です。 これ以上楽するためにはポーカーチップにチップ埋め込むしかないでしょう。

トランザクションの出入りが釣り合わないときに上にSum関数を書くだけでValidation出来たのはSpreadsheet様様という感じでした。

f:id:wass80:20181222233026p:plain

Slack

Apps Scriptなので、毎日スクリプトを走らせることが出来ます。 ついでにサークルのSlackに今日現在のランキングを流していました。 f:id:wass80:20181223000113p:plain

ところで、

ランキングに書かれていた🍫は、インセンティブでした。最終日がバレンタインデーだったわけです。 「max(0, floor((stack - 1000) / 100))チョコをwass80からプレゼント🍫」 という文言を終わり際になって用意しておきました。(初期stack = 1000)

最適戦略は全チップを他人に譲り渡してその人とチョコを分け合うことになります。もし起こったら悲しかったですが、そうはならなかったです。

これのために初めて人にチョコを包む経験をしました。 中身はフルタの安いけど美味しいチョコレートです。 人によっては外側の袋のほうが高い感じになります。 それでも、袋に包むとめっちゃ良いものに見えるのでおすすめです。 f:id:wass80:20181222233139p:plain

僕は19位/20人という結果に終わりました。精進が必要です。

次回予告

最近はコントラクトブリッジにハマっているので、次はデュプリケートブリッジの大会をしたいですね。 f:id:wass80:20181223020314p:plain

プライムポーカー 100枚セットA

プライムポーカー 100枚セットA

京都小旅行 大徳寺→たこ焼き→船岡温泉→ステーキ

突発的な観光のお時間です。

今回は船岡温泉周辺のスポットに行きました。

まず大徳寺龍源院を眺めました。 このサイズ感、ボドゲ枯山水にそっくりですね。(拝観料350円)

f:id:wass80:20181223211356p:plain 大徳寺はめちゃくちゃ敷地が広く、拝観できる場所も4つあるらしいです。それぞれ拝観料が取られるので諦めて龍源院だけ見ました。龍源院には、日本に伝来した最古の火縄銃や、蒔絵の碁盤などが飾られていました。歴史的ですね。

西に出て堀川通にあるたこ焼き屋「すずや」(8個500円) 関西にはあまりない大ぶりのタコが入っていて満足度が高い。ソースが旨味が強くて美味しい。 f:id:wass80:20181223211259p:plain

雨が降ってきたので更に北上するのをやめて船岡温泉に向かいます。 船岡温泉の最高さは他の記事を見てください。京都で最も格式の高い銭湯です。彫り物とタイルがものすごく立派です。写真を取りたくなるんですが、脱衣所内は撮影禁止。 (湯料430円)

www.kyo1010.com

1時間ゆっくり風呂に入った後は、お待ちかねのステーキです。

tabelog.com

この12月にできた新店舗らしいですね。 +250円でカレーが食べ放題になってすごい。

食べ放題のカレーはこんな感じです。4杯食べてしまったのでとても反省しています。 f:id:wass80:20181223212753p:plain

(アンガスステーキ150g 980円+ご飯カレースープ食べ放題250円) f:id:wass80:20181223212858p:plain

肉とカレーを手に入れたら当然こうなります。 f:id:wass80:20181223213035p:plain 美味しかったです。

スパワールドからの串カツが最高

スパワールドをご存じでしょうか。 知りたい人は次の記事を見ると速いです。

srdk.rakuten.jp

朝、出町柳駅に集合し、京阪でまっすぐ大阪へ。

昼ごはんは「ほまれ」に行った。

最近だとVTuberの日雇礼子さんが紹介してはったような。少なくとも中の人はやる夫スレで紹介していたはず。500円の天丼がすごい。物価の崩壊を感じる。 www.youtube.com

その後は、新世界で昔夢見たスマートボールをプレイ。未成年は遊べないんですよねこれ。 結果は惨敗。300円吸い込まれた。 友人は勝ちまくってとんがりコーンを手に入れていた。すごい。

お待ちかねのスパワールドは最高だった。平日の昼に行くとものすごく快適。10年ぶりだったが昔のまま変わらずという感じだった。塩サウナから滝湯までたっぷり2時間も堪能した。

そういえば昔行ったときもヨーロッパゾーンで、もう一方のゾーンには未だ行ったことがない。

スパワールドで何が便利かというと、入場料1000円以外 はクレカで払えるんですよね。しかも出場時払い。手首に巻いたやつで自販機から牛乳を買うことができる。

ただコインロッカーが100円硬貨式なんですよね。そこだけが悔やまれる。

そのあとは新世界で串カツですよ、串カツ。 とりあえずどこかに吸い込まれておけば串カツを食うことには困らないはず。

風呂上がりのゆったりした気分で京阪で京都に帰る。最高ですね。

ふらっと京都旅「一乗寺(詩仙堂・狸谷不動院)」

京都にずいぶん長くいるんですが、実はほとんど観光したことがありません。 そのため、最近また京都観光の気分が高まっています。

今回は紅葉の始まった時期に行った詩仙堂と狸谷不動院の写真たちです。

詩仙堂

京都に数多ある紅葉の名所の一つ。 名前の由来は三十六詩人を飾った詩仙の間によるらしい。*1

山荘に入るとすぐに目の前の庭を見ることが出来ます。この景色がメインです。 f:id:wass80:20181222204945p:plain

その後、庭に降りることが出来ます。この時は斑紅葉でしたが、これはこれで趣がある。 f:id:wass80:20181222205605p:plain

鹿威しを威すことができます。紅葉が乗っていて風流ですね。 f:id:wass80:20181222205523p:plain

八大神社

すぐ西、山の上側には八大神社があります。宮本武蔵がいました。 f:id:wass80:20181222205814p:plain

狸谷不動院

今回特に行きたかった所です。 詩仙堂の前の坂をさらにさらに登ると辿り着きます。 自転車を押して登りました。

f:id:wass80:20181222210016p:plain

入り口には狸の名前の通りたくさんのたぬきの信楽焼があります。

ここに来たかった理由は、『有頂天家族』の聖地巡礼というやつです。矢三郎のお母さんのパネルが建物の中にありました。

不動明王を祀る本殿がこちらです。中は撮影禁止でした。 f:id:wass80:20181222210212p:plain

この建物の不動明王を祀ってあるところは洞窟になっています。どういうことかというと、この建物を逆側から見たのが下の写真です。 f:id:wass80:20181222210251p:plain

このように崖に接しています。この崖にあった洞窟の目の前に本堂を建て、洞窟の中に不動明王を祀ったらしいです。

この日は特別にその洞窟の中まで入れました。人も居なかったのでその洞窟の静けさを味わうことができました。