4つ組神経衰弱の紹介

この記事は「数学ゲーム Advent Calendar 2018」9日目の記事です。

こんにちは、わんどです。 普段は数字について考えたり、コードを書いたり、謎解きを作ったりしてます。

今日は、5年前に作った4つ組神経衰弱を紹介します。 その前に、ネタ元のドブルの話から。

ドブルの話

ドブルとは、2009年に発売されたボードゲームで、 8種類の絵柄が描かれたカードを順番にめくっていき、 共通する絵柄を見つける反射神経ゲームです。

可愛い見た目ですが、組み合わせ理論のカークマンの女学生問題に着想を受けて数学者が作ったゲーム、 (もっと正確に言うと、そのゲームに影響を受けたゲームデザイナーとその数学者が作ったゲーム)で、

どの2枚のカードにも共通する絵柄がただ一つ存在するという特徴を持っています。

ドブルの性質については以下のブログで詳しく語られています。

カードゲーム ドブル(Dobble)の数理 https://amori.hatenablog.com/entry/2016/10/06/015906

一般化の話

ドブルでは1枚のカードに8種類、全部で57種類の絵柄が描かれており、 57枚のカードを構成できるところ、なぜか2枚のカードが抜かれて55枚で発売されてます。

一般に1枚のカードに書かれている絵柄の数をnとすると 構成できるカードの枚数と種類の数は n2 - n + 1となります。

一般化の話

具体的な構成としてはn = 3の時

(1 2 3)
(1 4 5)
(1 6 7)
(2 4 6)
(2 5 7)
(3 5 6)
(3 4 7)

n = 4の時

(1 2 3 4)
(1 5 6 7)
(1 8 9 10)
(1 11 12 13)
(2 5 8 11)
(2 6 9 12)
(2 7 10 13)
(3 5 9 13)
(3 6 10 11)
(3 7 8 12)
(4 5 10 12)
(4 6 8 13)
(4 7 9 11)

また、他の組み合わせも、これらの数字の置き換えで構成することができます。

数字の置き換え用スクリプト https://gist.github.com/wand125/8545387 https://ideone.com/9pXiRk

n = 4の時、13種類でトランプのランクの数と同じになります。 1枚のカードに13のランクが4つずつ書かれている、 圧縮版トランプと言えるかもしれません。

このカードを使って、4つ組神経衰弱をすることを考えます。

Quadruplet ルール

ゲームの目的

  • 伏せられたカードの中から、同じ数字が書かれている4枚のカードを引き当てる

ゲームの準備

  • 場に13枚の4つ組カードと、13枚の数字タイルを用意します。

ターンの開始

  • カードを1枚ずつめくっていきます。
  • 2枚目のカードをめくったタイミングで、共通する数字が1つあります。

  • 3枚目にめくったカードにその数字が書かれていれば、4枚目のカードをめくります。

  • 4枚目のカードにもその数字が書かれていれば場の数字タイルを取得し、ターンを終了します。

  • 3枚目、4枚目にめくったカードに、1,2枚目のカードに共通する数字が書かれていなければ、 その時点でターンを終了します。

ターンの終了

  • カードを伏せて、次のプレイヤーの手番に移ります
  • 神経衰弱と違い、タイルを取っても取らなくても、次のプレイヤーへ手番を回します。
  • また、場のカードの枚数はゲームを通して変化しません。

細かいルール

  • 2枚目をめくったタイミングで、共通するカードのタイルが既に存在しない、 もしくは1枚目をめくったタイミングでどの数字のタイルも存在しない場合、 その時点でターンを終了します。

ゲームの終了

13枚すべてのタイルがなくなった時点で獲得したタイルの数の多い人を勝者とします。

ゲーム性

  • 初期状態で、1ターンでめくられるカードが最低3枚なので、 3-4人プレイで一周すればほとんどのカードの中身を目にすることになります。

露骨に記憶力で差がつくゲームになりそうですが、 メモリースポーツプレイヤー同士の戦いでなければ、 忘れてしまっても何度も覚え直す機会があるので意外となんとかなります。

ゲームを遊んでみて。

一番簡単な覚え方としては、 一つ数字を決めて、その数字の含まれたカードが開かれた時に場所を覚えるのが良いでしょう。 慣れてくると、2つ、3つと増やしていくことができそうです。

自分の前の手番の人が同じ数字を覚えようとしていた場合 潰されて無駄になるので、相手がどの数字を覚えようとしているのか読んで、 その数字を避ける、などの心理戦が発生しました。 一度に1つの数字しか覚えていなくても、 他人と違う数字を覚えていれば戦えるという点で 神経衰弱より戦略性が高い記憶ゲームと言えるかもしれません。

1枚目をめくったタイミングでターンを終了する「ドボン」は まさか起こらないかと思っていたけれども、やってみると何度か発生しました。 中盤以降は禁止カードを覚える、 後半は残っているカードを覚える、と ゲームの序盤と中盤、後半で覚え方が変わっていくのが楽しい。

また、数字の書かれたカードのペア、トリオの単位で覚えていくことになるので、 数字を覚えるというより共通する配置の形を覚えるようになったので、 エッジではなくノードを覚えていくような、組み合わせ理論を感じることができました。 この辺りも、色々な覚え方ができそうです。

ゲームの欠点

カードの種類が13枚しかないので、 カードの組み合わせを覚えてしまうと 52個の数字を覚えるゲームから、 13枚のカードを記憶すれば良いだけ のゲームになってしまいます。

欠点を解消するには 毎回違うカードを使う、1回きりとして遊ぶ、 電子ゲーム化するなど。

現状、遊びには耐えうるが、ボードゲームとして市販は厳しく 自宅でのみ遊べる幻のゲームとなっています。

まとめ

戦略性や、心理戦が発生するように進化した神経衰弱の可能性を掘りたい気持ちがありますが、 突き詰めようとすると結局メモリースポーツの方向に人類が進化してしまうのが難しいかなと思ってます。 戦略性+記憶というと、カウンティングが発生するタイプのゲームなどが考えられますが、 この辺りも数学ゲームとして、可能性がありそうですね。

また、「圧縮トランプ」の可能性も探りたいところです。 ここまで読んでくださってありがとうございます。


明日は、「サイコロコロンブスの卵」作者のkurodataroさんです。 「サイコロコロンブスの卵」は以前ゲームマーケットで購入しました。 拡張でタワー表記があるのが素敵。

楽しみです。

三角比の覚え方から近似値を導出してみる

三角比の覚え方から近似値を導出してみる

Twitterをみていると、三角比の覚え方についてのPostが流れてきました。

togetter.com

 

f:id:w125:20171204003937j:plain

  


三角比でよく出てくる角度0°,30°,45°,60°,90°に0,1,2,3,4と割り振ると、ルートをつけて2で割るだけでsinの値が求まる!簡単!

画期的だと言う声もある一方

三角定規の比率1:1:√21:2:√3を覚えた方が本質的では?

角度を恣意的に決めており、三角関数と何の関係もないから数学でやる意味がない

との批判の声もあります。この覚え方を教えることの是非はここでは論じませんが、

 

等間隔でない数列に意味がないわけではないし、もしかしたらここから良い三角関数の近似式が求められ、そこからさらに三角関数への理解が深まる可能性があります。

 

続きを読む

31の次に長い31,331,3331,...型素数

31 ←素数
331 ←素数
3331 ←素数
33331 ←素数
333331 ←素数
3333331 ←素数
33333331 ←素数
333333331 ←素数じゃない

型の素数について、31の次に長く素数が続く数はなんだろうと思ったので

  • 偶数、3の倍数、5の倍数でない2桁の数
  • 一の位と十の位のどちらか一方は3の倍数

という二桁の数字について調べてみました。

13 ← 素数 133 ←素数じゃない

19 ← 素数 199 ← 素数 1999 ← 素数 19999 ← 素数じゃない

23 ← 素数 233 ← 素数 2333 ← 素数 23333 ← 素数 233333 ← 素数じゃない

29 ← 素数 299 ← 素数じゃない

37 ← 素数 337 ← 素数 3337 ← 素数じゃない

43 ← 素数 433 ← 素数 4333 ← 素数じゃない

49 ← 素数じゃない

53 ← 素数 533 ← 素数じゃない

59 ← 素数 599 ← 素数 5999 ← 素数じゃない

61 ← 素数 661 ← 素数じゃない

67 ← 素数 667 ← 素数じゃない

73 ← 素数 733 ← 素数 7333 ← 素数 73333 ← 素数じゃない

79 ← 素数 799 ← 素数じゃない

83 ← 素数 833 ← 素数じゃない

91 ← 素数じゃない

97 ← 素数 997 ← 素数 9997 ← 素数じゃない


上記以外の並べ方の場合、途中で3の倍数をまたぐので最長でも2連続です。

以上より、31,331,3331,型で、31の次に素数が連続する二桁の数は、4連続の23という結果に。 31が7連続で素数になっていることと比べると短いですね。

1000x1000のNクイーン問題を解く

元々はいくつかのクイーンが置かれた状態で、残りのクイーンを置くことができるかどうかの判定問題が NP完全、#P完全だと主張する論文についての話のようですが、どうしてこんな記事になってしまったのか。

Ian P. Gent, Christopher Jefferson and Peter Nightingale (2017) Complexity of n-Queens Completion

上記のギズモード記事では、1000x1000のNクイーン問題がまるで万物の答えのように書かれていますが、

過去に

PKU3239 Solution to the n Queens Puzzle 3239 -- Solution to the n Queens Puzzle

を解いた際の使ったコードを利用したら、 1000x1000サイズのn-queenが18秒ぐらいで解が1つ出力されました。

バックトラッキングと乱択の組み合わせアルゴリズムになっています。

#include<iostream>
#include<vector>
#include<algorithm>
#include<utility>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<ctime>
using namespace std;
typedef pair<int,int> PII;
typedef long long ll;

const int NUM = 1001;
int board[NUM];
int perm[NUM];
int cnt = 0;
int limit;

bool put(int k,int n){ 
    if(cnt>limit) {
      return false;
    }
    cnt++;
    if(k==n) { return true; }
    bool flag[n];

    memset(flag,1,sizeof(flag));

    for(int i=0;i<k;i++){
        flag[board[i]] = false;
        if(board[i]-(k-i) >= 0) {
            flag[board[i]-(k-i)] = false;
        }
        if(board[i]+(k-i) < n) {
            flag[board[i]+(k-i)] = false;
        }
    }

    for(int i=0;i<n;i++){ 
        if(flag[perm[i]]){
            board[k] = perm[i];
            if(put(k+1,n)) { return true; }
        }
    }
    return false;
}

int main(){
  int n = 1000;

  for(int i=0;i<n;i++) {
    perm[i] = i;
  }

  limit = 1500; //limit回探索しても見つからなければもう一度置く順番を入れ替え
  do{
    //バックトラックで置く順番をランダムに定める
    random_shuffle(perm,perm+n);
    cnt = 0;
  }while(!put(0,n));

  for(int i=0;i<n-1;i++){
    printf("%d ",board[i]+1);
  }
  printf("%d\n",board[n-1]+1);
  return 0;
}

出力結果

% time ./a.out
354 455 657 762 764 870 656 996 115 647 944 799 792 108 941 497 120 702 711 424 283 74 962 365 300 937 498 343 297 64 296 325 208 797 391 28 470 127 822 546 787 245 14 547 277 282 710 650 648 398 322 508 777 669 52 124 286 855 732 88 188 504 499 437 274 949 635 593 101 22 927 901 626 612 555 938 779 299 636 10 462 608 57 54 279 836 289 479 126 773 971 859 439 493 513 294 978 967 197 20 599 768 646 738 831 747 561 305 664 617 819 579 329 288 988 235 342 766 684 832 566 302 981 471 420 952 782 942 606 222 846 821 221 730 512 874 79 776 888 189 529 987 488 806 868 700 760 310 601 123 538 469 427 728 58 772 697 500 46 903 257 397 375 231 567 936 873 585 485 502 681 556 290 292 340 56 552 155 614 463 676 183 634 989 55 630 172 521 335 861 955 947 259 137 539 419 421 194 735 881 620 602 920 857 909 363 173 461 443 898 609 411 610 919 407 631 530 266 580 563 18 489 753 584 61 186 432 860 103 140 853 824 699 994 31 871 911 794 410 896 472 232 791 17 320 157 87 511 935 258 4 577 900 318 377 592 769 62 624 595 248 316 164 518 65 813 865 370 633 344 239 161 382 119 736 817 347 838 812 750 741 76 622 262 540 230 454 9 308 27 170 643 827 387 442 823 149 677 212 351 402 490 32 717 270 147 616 446 333 600 138 82 770 673 800 378 195 670 714 476 156 662 191 464 53 742 452 843 572 582 35 91 255 219 596 722 473 752 912 204 893 783 815 729 102 293 658 653 198 565 253 690 86 744 116 598 637 275 168 223 209 81 891 718 328 814 478 972 524 965 705 146 337 625 199 396 383 847 910 591 693 3 185 767 401 818 33 523 505 324 409 534 29 525 166 349 37 510 809 694 418 203 979 939 1 993 206 959 570 268 715 78 528 652 879 246 825 632 26 263 468 135 514 413 830 326 399 597 651 559 460 458 844 237 261 319 134 932 256 233 301 820 628 400 180 228 94 153 449 70 13 751 784 252 210 385 25 364 918 641 317 202 642 660 894 84 796 448 264 961 704 487 841 678 867 726 40 691 483 883 605 484 957 445 558 272 125 629 775 958 885 515 875 384 285 404 109 755 554 906 187 96 357 175 659 826 991 708 687 890 66 128 1000 851 247 905 668 309 331 519 930 587 696 334 803 244 107 568 388 284 808 553 371 997 433 899 453 549 496 804 271 48 849 321 361 588 940 743 840 224 672 2 763 707 441 491 118 759 436 852 506 105 129 456 111 315 943 291 352 348 945 110 604 904 537 426 12 49 975 575 45 139 907 689 71 430 535 698 428 181 184 964 466 921 536 922 998 544 970 884 923 706 6 889 933 39 977 790 739 723 980 254 236 551 801 174 60 757 85 16 336 176 121 160 793 243 950 234 132 50 674 999 144 465 260 104 196 908 307 501 545 171 386 543 63 586 531 811 925 229 459 287 667 178 265 241 876 303 447 41 982 749 795 372 19 594 774 745 897 330 603 862 880 93 798 227 615 34 829 928 24 576 695 215 80 746 666 816 359 963 781 193 451 526 915 516 97 756 771 683 150 306 788 934 162 358 562 435 7 854 366 95 414 304 665 882 727 480 895 434 217 42 154 645 38 748 618 778 913 581 431 136 412 833 444 394 712 902 267 892 68 986 92 807 327 569 785 192 211 122 83 571 492 179 682 482 837 623 77 214 276 542 43 51 557 638 985 177 946 517 842 152 856 151 780 948 312 969 148 269 368 415 564 679 533 200 360 30 835 251 190 845 976 218 373 425 917 655 834 422 573 589 685 701 866 639 89 475 133 509 737 131 225 130 640 709 163 332 278 627 59 143 201 924 995 167 703 142 613 429 213 929 280 169 968 724 393 719 440 350 106 250 850 877 273 675 765 353 503 805 36 205 380 688 992 416 494 527 408 713 956 238 381 574 654 864 417 338 953 423 621 686 158 590 313 560 886 914 99 457 67 374 720 887 810 872 973 295 828 786 960 974 346 583 716 113 848 481 376 72 926 117 984 207 44 951 406 671 367 474 141 734 369 226 733 112 75 550 216 405 548 858 355 983 477 467 740 298 607 863 114 242 990 522 802 311 450 663 680 249 954 789 15 47 379 761 758 21 339 220 520 240 11 100 403 90 619 649 878 389 611 5 165 362 392 541 532 839 395 495 356 692 725 8 182 145 931 159 721 341 314 73 323 661 281 345 731 754 486 507 69 578 916 869 644 438 98 390 966 23
./a.out  17.80s user 0.05s system 99% cpu 17.922 total

ボードゲーム版SASUKE -SASUGE-で遊んだ

一人で遊べる脳トレボードゲームを以下の順で連続してプレイし、制限時間内の完走を目指します。

内容は以下

SASUGE 1st Stage

制限時間: 12分

  1. Spot It(ドブル) 20枚
    • 場のカードを裏返してスタート、手元と共通するものの名前を言いながら重ねる
  2. ワードバスケット 5枚
    • 通常のワードバスケットと同様のルール
    • パスをして場にカードを出して+1枚引くことも可能
    • リーチを言い忘れてあがったら+2枚
    • 特殊カード上がり禁止、手元が特殊カードだけになれば1枚ドロー可能
  3. ウボンゴTrigo
    • カードの難しい方の面
    • 3つのカードが置かれるので、その中から1つクリア
  4. ウボンゴExtreme (3つより1つずつ)
    • 上に同じ
  5. おばけキャッチ (10枚)
    • ミスをするとカードをすべて引き取り、シャッフルし、1枚目からスタート
  6. おばけキャッチ2.0 (10枚)
    • 上に同じ
  7. ゴキブリサラダ 20枚
    • 場に1枚目とゴキブリカードが置かれている状態からスタート
    • 手元の山札にはゴキブリカードも含まれる
    • 失敗したら場に出ているゴキブリカード以外を手元に戻し、やり直し
  8. ハイパーロボット最短手発見 (8〜10手)
    • 事前にソルバーを使って最短手が8〜10手になる問題を作成する
    • ロケットはすべてどこかの壁に接した状態よりスタート

制限時間はざっくりとウボンゴ2分、ハイパーロボット3分、他1分というノリで決めましたが、 他の方で余裕を作ってウボンゴやハイパーロボットに時間を充てるのがオススメっぽい。

自分は完走に失敗しましたが、 花岡さんが11分15秒でクリアしたので2ndステージ以降も考えないといけませんね。 直近7月中に他の人にもプレイしてもらうことを考えてます。 興味のある人はぜひ。

続く。

ルール追加大富豪2

二度とやりたくないゲーム。

ルールだけ載っけときます。何が起こったかは想像にお任せします。

悪夢

基本ルール

  • トランプは1セット52枚+Joker2枚を使用する
  • ダイヤの3を持っている人から時計回りにカードを出す
  • カードの強さは3→4→5→...→10→J→Q→K→1→2→Jokerの順で規定される。
  • 2枚以上のカードは同じ数であれば同時に出すことができる。
    • この時、次のプレイヤーは前に出されたカードと同じ枚数で、強いカードを出すことが出来る
    • 複数枚カードを同時に出す時は、Jokerはワイルドカードとして扱うことができる
  • パスを行うことができる、パスを行ったプレイヤーはそのターン、カードを出さずに次の人にターンを回す。
  • 全員がパスを行うと場は流れ、次のラウンドに進む。
    • その際、最後にカードを出したプレイヤーが次に好きなカードを出すことが出来る
  • 手元のカードをなくした人が現れた時点で時点でゲームを終了し、その人が大富豪となる。
  • 大富豪は次の試合のルールを一つ追加する。
    • 提案者以外の全プレイヤーが反対した場合、その提案は受理されない。
  • ルールを追加する時はそのルールに命名する

ルール1: ずっと俺のターン

追加者 傘猫

適用: #2〜

出せる限り、自分のターンの後に自分のターンを続けても良い。

ルール追加の流れ

傘猫「はやくしたいかな」って

鏡「反対します」

花岡「実験してみる」

おもむろに13枚引く花岡、一度もターンを回すことなく上がる。

「これは...」

わんど「今回最初にぶっ飛んだルールにして頑張ってリカバーしてみよう」

反対が全員でなかったので受理されました。

ゲーム #2

  • 1ターンで終わりました。
  • 勝者、スタートプレイヤーの花岡
  • 積み込み疑惑

ルール2: ワードバスケット

追加者: 花岡

  • このゲームはターン制ではなく、真ん中の箱に最も早くカードを入れた人が出せる。

間違ったカードを入れてしまった場合は手札を元に戻して、 立ち上がって思い思いの一回転をする

  • [補足] カードは1ユニットごと出す
  • [補足] ラウンドの開始プレイヤーが「ワードバスケット」と言いながら、 最初に箱に入れたらゲームを開始する。

ゲーム #3

  • スタートプレイヤーは花岡
  • 鏡の勝ち
  • 初めての大富豪アクション

ルール3: 小競り合い

追加者: 鏡

  • カードを2枚以上同時に出した場合、革命が起こり、カードの強さが逆転する
  • 革命を起こしたプレイヤーは革命プレートをひっくり返す
  • 革命プレートを裏返し忘れたプレイヤーもその場で立って一回転する

ゲーム #4

花岡が積み込みを疑われたので鏡がシャッフルし、カードを配る 鏡が勝つ * 2枚だしがひたすら続くゲーム

ルール4: 仲裁

追加者: 鏡 奇数のカード(J,Kを含む)の2枚以上同時出しの時は革命が起きない

ゲーム #5

スタプレは傘 勝者花岡

ルール5: トリプル

追加者: 花岡 * 大富豪の両隣の人間を富豪とし、ルールを追加する。 * 追加順は大富豪、大富豪の左、大富豪の右

ゲーム #6

鏡がスタートプレイヤーになる 勝者わんど

ルール6 (#7-): ワードバスケット

追加者: わんど * ダイヤの3以外のカードをワードバスケットに変える * 場のカードで始まって手札のカードで終わる言葉を出しながら言う。 * [補足] 2文字のカードを言っても良い。 * 特殊カードはワードバスケットのルールで出すことが出来る。 * 言った言葉の最後の文字が50音順で後ろにある方が強い。 * ダイヤの3はワードバスケットのルールで認める、 3文字の言葉を言えるカードとして扱う

ルール7 (#7-): 常春

追加者: 花岡 * 6文字以上の言葉の場合、誰も知らない言葉を言葉として扱っても良い。 * [補足] ダイヤの3、5のカードには適用されない

ルール8 (#7-): 選抜

追加者: 傘猫 * スタートプレイヤーが10面ダイスを振って出た目の+1数だけ、 全員手札を選抜し、残りは捨て札とする。

ゲーム7

ダイス目は8 わんどの勝利

ルール9 (#8-): トランプ

追加者: わんど * カードをトランプに変える。記号カードは取り除く。 * 出し方はワードバスケットの特殊カードに準じる。

ルール10 (#8-): 8切り

追加者: 花岡 * 自分の出したカードの中に8が含まれている場合、カードは流れる

花岡、ここでやめていれば良かったと後悔。

ルール11 (#8-): 逆選抜

追加者: 傘猫 カードを選抜した後、それを右隣の人に渡して、ゲームを開始する。

ルール12 (#9-) リーチ

追加者: 鏡 * 次のゲームの勝者がこのゲームの名前をつけて、このゲームに勝利する

ルール13 (#9-) わさびはからくてうまい

追加者: 傘猫 最後にカードを出したとき、最後のカードが「わ」だった場合、 出した人は続けて「わさびはからくてうまい」と言い、 このラウンドの次の文字は「い」から始まる。

ルール14 (#9-)

追加者: 花岡 * スタートプレイヤーがダイスを振った後、その目を2として扱う

花岡「脳がこのゲームをすることを拒否している」

新語: インバラーバーバラア

  • アホみたいなルールを投げて他の人に必死にルール調整をさせる人のこと
  • インバラと呼ばれる。
  • [形容詞]インバラい
  • 100万年に1度のクソゲー

ゲーム #9

素数チンチロ

これは何

ルール追加大富豪の合間に一言で生まれたゲーム

ルール

  • 10面ダイスを3個振る。
  • 並び替えて3桁の数を作る。その中に素数になるものがあれば、その数を目と宣言して、手番を終える。
  • どう並び替えても素数にならなかったら三投まで振り直す。
  • 3回ともすべての順列が合成数だった場合、目なしとなり、強制的に負けとなる。
  • 目の宣言振り直しは申告制とする。
  • 場のダイスを並び替えて素数になる組があるにも関わらず、振り直しを行った場合、 その場で即負けとなる。
  • 負けとなる判定はジャッジが行う。
  • 合成数である数を素数と宣言した場合でも、一旦手番を終了する。
  • 勝敗は全員の目が出そろったタイミングで、まず、合成数であるものを強制的に負けとし、 目の大きい者を勝ちとする。

必要に迫られて作ったジャッジツール https://dl.dropboxusercontent.com/u/11102933/game/dice_prime/index.html

Prime Smashがうまくなりそうですね。