- Advent of Code 2020, jour 8: approche, solutions et bonus
- L'Advent of Code 2020 en Go, jours 11 à 15
Dans un précédent billet, j’écrivais au sujet du nombre de positions différentes au morpion, à savoir 5478 (en comptant séparément les positions équivalentes). Il est facile de représenter une position graphiquement, à l’aide d’une grille, comme suit :
+---+---+---+
| X | | O |
+---+---+---+
| | | X |
+---+---+---+
| | X | O |
+---+---+---+
Cependant, ce n’est pas très compact. Peut-on faire mieux ? Et surtout peut-on représenter de manière compacte toutes les positions d’un seul coup ?
C’est à ces questions que j’apporte une réponse dans ce billet.
Représenter une position par un nombre
Une représentation ternaire
La représentation graphique présentée en introduction contient pour chaque case l’information suivante : vide, contient une croix ou contient un cercle. Si on numérote les cases comme ci-dessous, il suffit de faire une liste ordonnée de neuf symboles pour représenter la position.
+---+---+---+
| 1 | 2 | 3 |
+---+---+---+
| 4 | 5 | 6 |
+---+---+---+
| 7 | 8 | 9 |
+---+---+---+
La position présentée en introduction est alors la suivante : X.O..X.XO
, où le vide est marqué par un point pour que ce soit plus lisible.
On a ainsi représenté une position par une liste de neuf symboles choisis parmi trois différents. Mais une liste de trois symboles différents… c’est tout simplement un nombre en base 3 !
On peut donc passer de la liste de symboles à un nombre grâce à la correspondance suivante :
.
pour 0,X
pour 1,O
pour 2,
On représente alors la partie X.O..X.XO
par le nombre en base 3 , le 3 en indice indiquant juste la base pour éviter les ambiguïtés avec la base 10 habituelle.
Stockage d’une représentation sans (trop) gâcher
Le plus grand nombre à 9 chiffres ou moins en base 3 est le suivant : , ou 19682 en base 10. Cela donne une borne supérieure aux entiers représentant des positions, bien que ce nombre lui-même ne représente pas une position valide.
Pour encoder ce nombre en binaire, il nous faut bits. Autrement dit, il faut au plus 15 bits. Le type standard le plus juste est le type uint16
(entier non signé sur 16 bits), qui nous offre même un bit en plus, et permet ainsi de stocker deux positions dans ces 16 bits.
Avec ce type de stockage assez simple, on arrive déjà à faire rentrer sans prise de tête 5478 positions dans 5478 octets. On gâche quand même 0,37 bits par position, soit environ 5% : c’est inacceptable.
Un nombre pour les représenter toutes
Dans le schéma de stockage précédent, on gâchait quelques bits, qui correspondent à des nombres inutilisés. En effet, Entre 19683 et 215 = 32768, il y a quelques milliers de nombres inutilisés. En fait, comme 216 = 65536, on pourrait stocker jusqu’à trois combinaisons dans ces 16 bits (car 65536/19682 fait environ 3,3), en stockant les nombres par tranches suffisamment fines.
La forme finale de cette idée, c’est de faire des tranches d’exactement la bonne taille, soit 19683. Mathématiquement, cela revient à écrire l’ensemble de toutes les positions comme un seul nombre écrit en base 19683. Comme on doit stocker 5478 positions, il aura 5478 chiffres en base 19683.
En base 10, cela fait un seul nombre… à 23523 chiffres. Il est caché ci-dessous et a été obtenu en énumérant toutes les positions puis en faisant une conversion bête et méchante.
102 998 262 357 203 153 412 050 213 692 735 645 015 378 989 217 330 728 759 646 898 021 168 944 431 570 031 240 783 856 919 205 283 417 168 637 268 465 021 723 369 275 689 000 851 860 889 672 187 626 364 605 470 099 347 441 927 840 149 292 278 039 056 368 944 479 897 046 000 669 957 110 394 832 545 393 964 793 916 956 512 920 293 033 770 707 270 686 052 279 922 259 353 183 426 004 348 285 968 646 980 354 641 329 352 489 750 901 279 002 772 959 045 199 462 195 437 976 712 073 829 804 668 244 203 289 966 354 937 070 689 720 869 787 276 646 907 423 118 067 678 175 836 900 321 521 808 068 412 411 250 394 422 153 654 266 369 600 436 600 305 546 609 595 516 914 792 208 022 310 036 924 731 311 438 422 539 057 411 878 765 585 621 671 414 093 970 094 108 152 952 108 133 908 485 489 505 145 044 076 472 460 678 940 941 508 178 270 866 885 708 439 587 309 906 528 119 033 015 051 505 653 395 718 214 527 819 775 998 789 232 450 812 658 346 906 842 622 591 105 651 233 473 429 494 527 880 596 730 969 490 814 098 127 598 263 601 613 064 993 718 368 231 091 139 400 112 761 199 584 141 845 454 178 908 565 078 950 208 318 303 622 188 347 241 034 792 717 891 472 804 025 575 512 728 210 941 710 968 777 407 326 277 487 198 005 676 501 255 668 598 318 067 364 786 550 308 921 140 181 052 005 348 308 301 870 041 925 500 077 675 920 040 170 325 002 463 360 360 923 690 817 744 372 408 303 507 762 607 468 645 906 898 982 369 475 170 519 909 201 418 887 176 479 328 952 469 534 882 446 587 632 824 946 403 645 252 486 234 656 363 774 131 041 603 928 128 589 056 096 062 257 427 675 814 648 632 952 706 390 420 802 913 343 599 476 743 710 856 429 608 081 987 682 098 348 776 265 537 902 368 079 102 717 492 946 668 403 090 554 143 779 514 675 798 523 860 096 521 224 973 727 080 155 365 117 405 454 750 756 323 849 549 004 394 613 356 092 068 220 330 838 372 164 234 148 119 775 313 994 628 569 599 069 868 778 011 310 477 079 415 640 089 385 145 387 612 624 824 746 382 102 588 638 666 028 744 902 095 756 645 660 774 296 617 821 324 784 225 759 703 873 228 769 144 643 997 832 543 837 374 607 146 328 049 399 321 993 661 947 031 236 937 084 498 004 573 904 339 006 162 630 369 203 024 882 416 447 909 190 943 904 685 399 006 705 243 599 376 424 440 331 384 741 168 974 675 470 308 123 812 656 860 692 160 246 548 032 140 334 518 128 088 708 813 591 829 663 864 316 763 902 831 700 298 595 248 817 754 731 910 381 715 243 357 001 694 136 549 736 283 772 567 033 463 701 673 936 766 375 785 138 376 196 939 095 997 295 454 351 862 547 408 759 648 382 961 194 247 243 095 758 708 201 959 209 468 376 946 497 389 008 582 385 234 995 914 761 444 918 673 597 676 327 961 475 205 546 955 279 039 857 953 995 485 767 495 760 432 207 817 043 378 328 764 870 464 585 128 525 205 031 145 042 521 013 112 164 561 299 191 960 907 993 222 169 386 185 412 795 452 867 386 452 971 928 284 548 994 146 848 533 494 960 096 762 417 419 134 934 238 269 826 305 292 576 478 268 872 730 335 527 877 605 035 505 678 263 769 466 893 245 776 118 377 606 263 988 459 806 597 348 969 755 864 993 739 734 810 022 530 393 432 057 986 930 544 924 109 880 128 018 495 570 711 763 091 060 721 840 417 336 445 835 694 423 369 493 604 888 302 852 642 041 441 189 401 610 988 146 108 714 312 471 559 753 014 465 789 166 252 646 487 886 344 621 866 277 168 022 049 874 686 484 999 437 477 369 968 439 097 198 559 135 733 297 132 483 838 239 236 964 556 496 818 949 208 992 649 385 114 071 362 480 996 729 693 304 566 468 298 377 332 665 474 834 433 576 035 047 550 069 531 358 424 793 807 801 934 140 881 199 708 754 459 161 389 693 409 122 219 885 428 716 080 722 642 713 094 224 834 969 424 089 433 999 492 048 404 181 108 773 292 169 660 165 823 058 703 098 621 283 688 818 859 960 693 387 310 663 693 576 333 005 973 902 469 139 520 501 837 902 535 357 401 612 084 266 183 192 179 049 842 447 717 760 835 773 534 262 974 506 788 282 399 448 417 469 038 962 598 936 425 650 116 804 374 456 238 374 388 568 898 330 311 274 081 524 089 858 983 432 665 559 252 857 756 728 530 596 193 662 609 884 125 932 047 409 887 977 195 029 281 012 794 451 826 728 231 726 731 581 503 601 070 120 977 746 886 102 850 436 931 560 040 098 784 678 970 170 876 757 682 254 706 382 894 404 782 704 958 219 198 052 559 154 941 040 234 146 170 177 453 184 492 654 395 811 662 654 349 303 182 158 478 789 567 653 223 533 621 736 303 208 236 197 002 894 320 822 923 341 917 087 847 799 485 574 340 458 725 812 317 260 336 521 687 375 912 174 574 913 821 385 825 378 920 131 225 538 500 801 701 167 122 230 020 363 360 805 647 303 313 128 369 572 220 997 684 311 084 870 821 177 533 789 991 896 771 228 024 070 789 755 623 843 219 133 031 625 412 050 325 206 140 591 122 581 557 997 489 064 940 277 522 994 762 170 054 674 079 546 566 623 945 365 669 854 062 090 085 691 666 807 591 897 154 691 544 462 955 653 901 466 185 022 922 443 012 048 400 177 669 499 291 393 423 930 099 881 633 775 003 284 953 402 514 618 452 505 833 546 809 608 591 464 916 287 748 401 974 942 632 216 819 465 032 153 306 971 145 755 255 763 905 451 567 679 697 608 569 112 222 236 500 679 177 551 335 633 575 354 968 028 576 006 553 634 734 767 811 444 870 066 849 651 891 003 833 143 365 385 839 730 667 329 151 668 437 704 982 195 759 126 085 268 416 332 842 473 633 167 378 802 398 426 244 277 793 657 472 102 780 463 665 550 218 275 428 652 104 488 908 835 718 593 226 726 914 950 285 212 290 285 906 995 352 464 939 153 841 042 789 005 462 500 512 054 519 102 683 840 066 009 182 631 398 049 183 351 475 297 236 783 132 953 329 255 960 306 766 884 862 812 540 804 513 771 389 516 955 596 550 113 116 422 694 649 864 751 516 389 495 631 710 614 082 560 482 785 519 268 274 552 736 776 327 518 002 093 512 286 148 308 164 134 989 603 131 574 215 744 256 471 120 963 620 175 156 433 423 673 354 155 261 734 964 346 044 622 802 048 281 906 977 520 494 236 617 385 448 623 939 794 681 184 477 644 773 954 279 640 230 658 303 367 471 992 922 491 759 099 437 646 043 626 997 389 933 551 588 749 755 356 619 758 809 421 670 282 722 101 550 708 472 138 329 853 085 517 270 262 997 527 776 618 064 128 272 425 380 718 601 841 857 737 747 530 892 113 342 326 386 011 859 960 250 932 992 969 161 728 512 534 199 223 213 413 059 806 843 687 036 850 896 286 178 093 005 014 667 576 903 233 034 818 819 116 931 926 534 996 473 303 006 907 581 936 203 183 003 175 837 354 691 640 607 186 748 214 440 746 459 773 449 295 058 072 524 835 525 892 598 055 766 626 920 863 583 566 922 567 306 360 790 310 617 547 640 501 259 162 252 118 934 783 141 748 042 745 876 913 676 191 899 975 545 326 849 403 629 747 138 433 911 026 465 723 620 118 607 749 560 822 260 654 926 437 136 418 468 621 116 832 781 377 660 546 958 791 917 839 638 872 420 598 275 533 386 758 713 946 108 852 949 615 318 041 171 866 781 014 245 610 704 734 062 561 179 150 450 500 830 031 345 707 825 502 743 286 909 463 059 191 042 388 563 031 273 019 866 204 527 328 063 730 433 246 763 359 745 966 646 899 538 291 728 672 748 344 416 589 495 867 960 048 501 305 686 506 048 341 124 020 454 714 475 399 713 366 359 689 583 013 058 603 345 765 751 134 865 490 119 694 863 974 180 778 441 998 601 912 392 339 437 171 169 130 177 982 670 300 076 885 198 748 292 244 776 865 234 742 556 608 381 159 820 799 222 500 689 087 490 187 350 650 578 299 153 688 784 084 430 323 157 043 920 564 600 327 335 613 763 324 686 894 856 762 430 080 384 672 918 756 341 196 384 100 228 545 560 786 924 011 954 445 197 113 019 464 636 930 437 493 368 173 927 925 446 940 013 245 918 569 327 912 884 867 425 259 857 065 817 770 976 317 141 113 965 972 406 629 405 713 830 706 547 040 692 582 769 472 115 972 542 432 909 801 629 101 467 163 700 914 723 713 594 653 076 691 094 863 436 401 575 099 757 500 411 247 728 581 384 349 968 024 482 864 015 422 765 637 027 089 299 161 191 915 449 689 660 613 174 005 619 131 357 748 942 018 256 520 945 874 938 414 815 084 218 600 847 345 546 275 372 126 824 937 369 856 652 554 008 655 844 245 992 396 597 676 674 690 798 972 314 491 264 958 412 084 168 366 082 190 089 603 897 984 969 477 939 074 110 749 112 633 230 857 906 467 053 642 298 349 359 724 776 678 966 782 485 731 035 662 459 199 734 399 593 028 634 003 747 614 029 535 504 967 381 613 957 838 322 974 848 943 808 152 324 165 404 423 848 217 083 508 477 252 380 133 819 117 870 391 266 129 959 113 528 743 846 356 240 952 754 506 191 024 913 365 328 470 178 508 457 569 733 274 702 775 751 370 710 813 181 080 884 934 848 298 258 650 809 283 530 613 789 520 569 399 382 598 857 828 705 721 992 003 730 287 867 882 030 883 649 165 607 362 282 285 823 588 494 268 326 291 603 305 292 581 849 458 232 162 659 832 875 946 506 443 844 556 714 972 720 127 980 655 330 838 022 685 672 388 307 357 283 047 618 641 027 435 229 939 841 082 013 631 680 980 378 725 418 155 536 185 050 385 396 223 261 456 291 573 018 122 783 073 433 784 646 384 482 230 158 605 689 043 473 247 301 885 018 041 989 823 485 941 535 555 899 043 909 960 180 339 406 608 536 359 177 449 661 623 361 886 582 071 220 093 337 132 891 596 858 010 437 564 517 690 652 379 487 283 685 116 858 791 636 290 689 359 484 165 108 154 780 949 750 720 587 873 204 992 904 010 469 160 447 898 767 448 593 642 878 135 801 868 941 242 425 680 708 044 263 568 776 295 641 781 337 257 440 402 018 784 839 760 809 858 459 796 018 206 670 150 109 044 576 561 670 648 044 970 931 720 866 686 649 308 104 635 696 575 720 392 716 832 590 768 615 636 591 621 875 009 850 532 703 786 271 111 368 135 639 557 223 903 649 945 817 614 654 484 077 629 545 022 644 203 863 002 485 346 697 421 657 165 553 184 259 662 585 452 149 970 185 183 392 417 265 076 590 134 643 923 719 209 115 735 487 054 713 053 669 789 243 051 227 977 662 029 953 393 152 209 839 555 979 951 085 837 654 153 814 912 801 540 386 791 541 392 875 616 451 898 461 845 029 983 130 675 077 372 178 313 055 841 088 949 057 248 427 675 283 050 119 716 305 806 657 064 772 244 089 946 705 426 801 682 615 008 218 652 796 090 622 409 185 564 772 123 540 677 329 733 614 678 502 609 103 977 846 989 095 820 930 397 191 833 080 990 864 677 225 790 291 392 054 536 484 980 043 121 593 399 846 510 257 585 194 507 759 023 485 920 336 741 315 748 394 452 398 406 469 466 864 468 379 950 159 399 917 743 402 170 834 017 756 500 190 324 287 902 489 674 523 040 767 281 239 025 566 141 407 081 387 517 168 257 920 292 719 201 079 301 525 487 852 473 507 065 389 392 398 527 051 771 661 494 546 931 372 261 308 200 874 359 361 373 344 877 974 867 773 080 047 985 632 620 540 322 253 523 039 539 385 356 960 416 059 407 987 317 526 207 469 211 973 362 211 317 612 419 541 085 477 493 934 116 597 672 407 789 791 646 401 017 698 020 451 458 884 539 293 713 659 316 926 991 301 420 959 967 432 625 140 084 011 648 420 718 695 709 734 817 811 465 282 750 390 868 476 816 389 922 463 653 151 228 723 477 408 362 830 631 726 609 989 980 423 330 979 645 207 761 137 884 927 775 620 159 210 743 462 487 659 361 784 271 560 603 092 043 936 711 228 998 307 807 165 847 999 696 811 004 160 567 504 289 390 702 183 904 946 852 396 728 537 342 762 389 018 290 784 738 924 390 981 843 976 295 586 366 833 524 361 507 088 991 756 793 975 629 219 797 673 142 569 280 285 233 479 266 966 343 832 338 684 991 323 070 076 598 260 117 288 485 039 386 946 275 387 213 519 252 991 298 847 116 668 296 684 212 425 262 449 417 935 271 547 101 295 865 792 329 333 815 151 569 815 198 216 213 765 768 438 170 610 620 496 168 516 061 302 696 203 901 232 404 682 484 921 604 675 263 816 828 598 044 460 173 048 356 443 714 850 660 945 164 898 382 816 077 816 389 060 606 662 769 915 257 389 173 272 384 431 035 991 827 883 046 781 274 875 451 952 274 099 653 906 468 136 030 708 774 699 399 747 726 831 751 641 833 805 310 538 112 675 277 993 785 265 105 343 308 162 372 091 641 036 531 358 964 735 891 537 117 900 852 690 525 496 775 425 116 464 467 068 504 586 581 369 324 959 062 371 951 600 971 367 416 054 507 032 826 895 330 229 794 987 751 780 889 760 198 308 286 447 405 539 983 471 766 071 774 711 429 985 028 040 780 334 889 210 775 998 725 838 627 954 808 338 435 775 436 621 981 163 815 319 455 296 245 803 196 559 602 401 030 280 365 953 912 061 559 735 537 252 571 607 247 250 350 186 926 733 053 062 561 906 817 550 845 348 899 513 250 637 101 173 612 382 520 125 177 017 469 949 722 387 378 181 313 343 690 832 078 304 700 870 898 529 049 028 311 418 386 471 869 492 077 036 494 024 249 703 390 347 163 623 910 077 018 008 100 131 655 002 819 808 732 969 070 743 999 903 742 478 746 169 517 572 530 047 320 938 080 996 685 753 387 689 405 175 542 137 424 676 061 366 381 557 147 052 722 706 857 809 480 055 379 760 207 244 197 410 562 548 402 707 205 046 121 675 570 227 892 525 529 372 140 916 896 809 435 569 070 969 312 128 968 143 108 418 123 787 516 249 898 493 814 471 177 308 803 184 053 381 943 242 925 055 539 562 241 479 688 458 070 386 014 584 477 938 157 067 993 323 147 011 823 962 629 043 062 583 308 307 589 098 797 208 718 344 255 617 926 391 376 363 574 031 832 862 337 191 062 875 059 406 517 014 028 991 893 423 633 292 933 793 755 670 962 065 427 530 739 533 541 954 745 602 446 949 607 589 026 548 726 265 991 972 986 464 718 641 932 734 146 924 046 177 985 170 281 626 516 639 131 546 004 094 140 848 787 897 594 258 936 600 845 939 053 805 862 734 146 476 317 166 369 781 808 216 372 150 195 193 799 196 834 095 556 847 367 328 426 124 572 118 175 013 111 521 797 526 147 573 333 258 963 286 110 381 317 178 724 177 288 187 049 480 704 614 136 043 772 613 658 460 303 252 386 721 672 353 066 106 165 092 984 504 530 213 033 516 617 208 681 760 873 120 954 771 826 341 859 785 439 235 107 573 866 180 521 673 702 610 184 874 693 774 711 778 500 275 460 776 613 703 750 464 467 047 886 563 424 289 623 007 539 417 602 632 208 994 522 268 734 925 631 172 798 970 180 714 045 124 726 090 709 588 879 839 774 078 379 749 809 978 904 375 826 059 086 685 046 728 083 963 839 229 840 398 140 314 495 763 311 931 453 434 612 721 995 747 783 010 269 159 169 283 630 563 049 354 695 249 754 842 081 855 974 633 826 054 481 571 605 941 577 629 629 726 693 986 748 603 439 759 288 484 637 019 490 396 241 594 743 276 418 255 210 078 845 043 508 845 847 923 747 846 890 179 684 957 331 292 784 716 151 566 329 966 398 453 736 589 083 237 012 639 163 903 457 179 643 126 765 942 166 384 415 514 976 014 252 345 896 986 071 745 447 975 610 075 118 573 194 390 860 640 866 015 712 001 108 698 374 867 700 342 441 409 252 334 224 617 253 115 813 197 677 349 304 791 315 895 180 482 358 248 840 424 120 404 988 385 231 425 047 315 901 667 925 721 447 263 205 470 701 427 703 476 453 262 274 602 678 597 580 480 732 269 695 528 275 851 289 155 843 356 048 474 595 578 425 610 164 494 320 608 640 903 272 308 970 496 136 957 183 392 015 333 277 680 694 107 175 919 642 781 944 137 702 244 352 357 907 538 390 810 901 860 990 978 613 120 897 367 272 730 559 279 585 331 385 995 588 481 575 560 290 497 315 613 156 494 561 275 796 988 372 237 278 686 193 175 250 174 541 959 759 337 237 193 910 891 792 699 223 793 201 210 653 191 344 614 234 975 021 062 358 384 746 990 629 029 558 418 434 607 250 745 886 045 528 151 957 323 658 904 790 237 975 127 803 864 936 073 062 141 052 470 588 158 500 924 747 843 723 076 721 003 571 486 335 082 214 876 778 273 999 140 441 936 823 709 955 463 221 704 625 575 027 899 919 579 166 661 396 957 507 838 245 854 586 252 719 699 323 669 520 232 537 313 310 521 969 354 941 125 636 107 862 147 235 735 758 555 640 500 294 662 103 845 227 673 762 070 647 737 031 188 432 284 472 531 077 826 555 485 690 988 249 412 675 128 986 528 555 003 599 052 494 947 818 467 527 813 401 533 420 787 809 359 114 599 920 087 159 523 291 129 977 675 186 796 745 347 327 641 427 584 514 842 296 291 260 252 467 206 702 842 161 245 529 144 518 599 151 832 932 843 444 790 821 195 634 125 984 849 554 255 565 017 364 657 214 770 053 560 374 574 555 892 938 311 262 872 370 413 337 525 840 492 426 659 790 367 470 311 300 526 044 857 144 314 710 430 390 903 289 072 087 698 568 193 542 018 494 374 351 590 793 971 917 873 083 645 243 780 635 624 358 097 802 004 998 926 422 454 637 236 539 926 098 447 911 058 290 005 297 289 063 730 014 086 651 214 207 977 371 277 299 842 968 912 398 010 297 747 165 496 453 849 465 805 405 350 177 477 142 693 672 427 624 781 128 344 288 363 347 919 257 762 314 001 033 561 525 108 717 377 560 451 298 441 380 770 974 704 662 651 228 784 529 263 296 939 836 206 776 181 574 101 706 098 772 321 828 649 613 601 723 134 336 978 253 540 249 240 953 528 532 776 356 174 826 967 665 214 416 280 272 205 209 597 126 657 973 006 314 086 590 869 088 126 382 212 803 719 118 432 903 974 986 810 835 405 015 363 530 776 892 906 313 167 406 754 403 146 044 406 537 754 605 983 901 630 988 108 031 673 873 666 493 543 972 585 322 878 707 231 314 897 167 468 923 670 708 946 917 754 515 384 023 043 937 115 690 181 558 907 924 037 053 814 868 393 124 126 207 155 636 445 505 196 989 181 657 197 869 886 426 732 010 600 881 117 153 865 138 778 378 031 611 854 293 275 604 445 108 848 141 834 970 344 957 113 991 391 054 006 044 592 271 154 766 850 335 835 187 712 074 933 583 491 477 649 229 829 864 759 057 449 647 510 226 995 749 879 100 348 253 410 841 931 093 316 755 735 212 974 508 530 005 195 723 756 868 656 842 264 553 861 058 330 442 890 569 310 508 571 063 709 698 647 105 056 699 190 057 795 573 059 381 375 401 067 303 395 075 313 902 210 527 983 216 007 235 694 578 565 492 210 535 643 157 163 700 578 450 139 775 601 159 529 609 823 599 294 358 307 594 206 496 919 547 759 387 080 527 810 304 833 220 468 475 024 178 629 706 322 438 147 973 342 656 425 324 186 713 503 266 645 730 435 081 462 394 335 442 831 630 368 509 225 161 468 849 379 229 242 083 417 896 003 351 214 851 940 673 456 519 921 695 579 411 194 335 414 191 896 261 610 500 836 104 095 877 303 386 760 982 384 910 687 184 024 449 265 385 951 982 026 202 804 375 602 014 215 515 416 265 812 679 060 214 374 620 415 176 250 327 457 311 946 395 162 801 113 004 883 410 790 199 047 179 989 651 789 436 658 342 517 442 243 262 641 217 085 771 815 479 448 963 294 851 391 159 276 872 915 140 458 716 603 997 996 881 725 402 443 010 125 908 101 118 581 736 203 216 972 562 034 061 066 446 093 881 484 340 528 059 124 720 271 600 539 939 169 898 271 350 260 858 302 261 991 702 126 052 153 008 697 998 697 706 916 824 555 288 730 329 125 689 079 341 498 367 367 758 410 405 050 820 612 542 883 974 772 267 648 509 277 476 607 663 349 335 075 044 117 680 271 979 123 156 093 761 650 183 920 721 656 087 183 254 960 933 332 918 676 909 646 685 092 423 270 694 655 994 588 518 160 724 687 305 264 666 999 722 725 051 153 898 337 451 433 621 377 633 832 066 031 328 413 067 484 738 475 893 089 674 210 750 565 370 360 566 205 607 801 314 243 316 369 175 741 459 402 469 265 020 605 815 390 699 997 755 746 507 505 187 035 094 813 057 561 227 030 675 042 794 647 807 087 442 797 889 714 158 079 636 447 220 173 103 304 356 244 570 580 702 249 362 501 121 233 337 853 946 852 394 214 471 811 260 741 713 402 511 561 619 994 214 644 195 665 474 902 629 556 759 979 902 570 272 186 339 422 881 488 986 942 090 456 779 248 860 963 450 691 523 759 675 674 204 256 727 603 290 887 135 007 659 476 673 317 178 980 699 307 988 275 123 983 418 775 452 055 368 934 577 157 196 751 761 813 477 634 533 382 722 611 127 173 074 344 241 417 169 028 164 039 086 333 185 786 742 623 957 210 477 870 564 183 658 976 300 592 070 433 902 229 442 025 087 189 011 847 554 520 614 730 073 672 095 751 970 655 773 486 207 288 311 912 858 049 393 014 722 495 662 687 187 248 294 611 349 807 529 454 556 561 319 298 351 838 590 756 361 568 601 081 194 407 164 810 792 172 848 966 889 177 215 756 141 431 126 166 698 494 058 811 839 112 485 578 406 758 768 697 826 833 447 743 204 358 020 675 803 184 875 642 349 975 409 438 580 184 654 771 700 850 653 886 870 911 754 383 116 055 208 350 467 130 926 756 894 760 632 587 984 818 875 683 075 181 445 535 129 118 092 363 891 012 988 053 520 971 648 354 802 063 897 057 551 448 130 080 039 503 369 989 754 677 387 352 314 587 356 373 659 565 135 781 687 127 899 294 244 823 122 984 200 499 500 740 801 214 274 862 692 994 194 710 225 638 155 745 643 952 900 173 122 356 586 481 337 875 836 012 649 043 526 946 791 203 984 549 059 474 104 034 762 412 312 303 780 416 387 948 395 289 580 279 782 436 036 569 127 304 253 891 281 886 726 260 913 203 445 028 704 615 996 041 507 734 105 874 259 491 788 475 271 929 337 835 356 308 836 490 530 225 944 254 170 090 211 889 953 958 401 307 997 100 243 912 033 106 391 504 559 652 652 931 307 414 483 284 943 320 314 988 300 254 993 776 723 871 912 770 008 290 397 959 460 684 222 929 863 444 811 223 421 896 714 213 199 642 137 714 306 209 417 585 428 827 340 024 415 454 161 938 197 693 644 312 911 490 981 976 601 224 734 961 680 707 074 969 988 469 486 507 527 911 346 458 470 214 302 310 668 661 728 130 048 478 986 969 474 578 775 576 325 353 344 482 550 782 964 899 617 412 870 376 129 229 060 106 174 778 717 906 553 781 120 703 449 032 199 833 964 995 034 621 926 889 118 309 736 392 123 438 597 462 269 972 268 616 169 639 962 054 879 230 233 142 159 689 354 766 726 872 087 258 489 829 254 611 705 029 621 848 784 949 731 337 509 805 022 803 198 631 466 175 523 268 254 759 988 795 280 679 526 673 707 409 673 998 125 298 395 851 494 797 582 716 636 926 787 903 736 864 526 386 080 477 668 422 506 596 783 926 694 167 798 128 735 592 881 024 545 916 036 091 448 100 056 305 059 877 847 046 079 887 028 939 784 359 098 097 714 776 479 430 689 629 140 538 661 170 667 667 663 927 142 123 271 421 896 137 058 476 555 361 836 948 614 472 517 153 848 127 064 580 953 051 113 887 242 401 280 424 427 258 976 784 684 862 453 087 916 864 922 754 175 577 717 729 245 082 581 591 743 340 210 111 908 997 000 377 294 422 284 495 349 166 832 826 147 358 274 909 575 429 418 954 575 234 051 507 311 005 704 103 953 526 391 287 335 239 362 177 912 847 003 925 881 839 342 879 248 085 700 679 259 431 173 870 542 498 309 254 049 006 582 391 357 482 713 183 238 964 510 482 048 982 618 467 226 499 529 860 594 624 399 174 858 540 676 025 812 336 348 076 159 709 005 790 370 731 487 035 153 288 507 881 915 655 998 171 374 267 645 355 300 013 381 275 519 088 775 253 364 839 849 791 049 968 809 288 569 601 682 693 270 402 293 092 329 684 348 471 527 135 027 468 171 151 051 198 593 194 101 073 472 247 043 561 582 299 685 691 877 700 833 062 325 346 684 057 350 246 666 112 273 622 574 935 986 878 725 891 144 697 310 429 260 600 471 427 872 335 623 887 314 413 981 229 730 297 417 836 379 000 753 316 209 936 107 731 141 318 854 127 160 516 687 052 032 019 619 082 418 400 026 020 532 253 155 750 755 770 485 808 983 851 964 711 437 987 787 517 061 219 192 005 322 809 084 072 349 970 129 451 054 205 948 955 010 023 849 294 136 058 277 134 498 226 033 937 794 672 559 003 395 692 547 201 672 409 493 990 217 083 231 765 497 667 887 626 100 956 918 853 470 174 729 822 813 786 715 434 826 291 380 157 193 870 975 769 916 368 668 154 230 800 893 686 308 530 560 050 411 740 938 207 513 932 922 063 248 117 380 484 757 966 170 821 955 810 359 084 453 258 950 693 243 889 081 000 269 724 499 680 843 839 841 111 517 551 029 877 337 631 504 935 404 156 560 417 461 546 305 043 739 480 006 519 865 213 342 826 498 420 265 818 138 056 045 707 486 688 695 984 776 769 546 972 284 359 879 832 645 623 899 359 319 353 412 362 467 740 577 115 185 078 141 624 942 660 284 099 644 608 185 474 007 888 629 008 132 491 550 419 133 839 456 981 339 056 624 624 871 478 466 005 728 094 468 392 242 218 193 541 056 546 402 187 944 657 423 186 877 653 260 555 390 761 442 904 110 032 954 572 107 446 341 262 921 658 883 481 480 900 045 594 702 330 680 060 893 869 799 461 240 640 126 039 797 540 483 132 613 768 125 201 951 096 821 659 683 839 197 305 136 021 153 861 199 169 194 811 654 930 032 081 095 892 350 507 733 623 287 464 474 406 782 723 014 804 078 113 552 316 585 254 891 745 556 675 583 240 425 697 603 747 686 630 606 394 801 261 983 915 760 246 857 612 139 021 324 653 943 272 605 834 562 988 220 855 009 713 654 690 520 634 238 917 868 339 859 573 759 331 215 745 590 718 983 130 561 706 484 647 567 426 203 542 755 110 404 282 129 789 748 985 633 783 972 394 516 279 151 699 655 632 529 132 995 421 423 405 808 620 696 112 752 164 133 731 711 326 509 140 353 953 301 061 769 186 316 147 180 369 496 527 974 642 040 993 518 928 755 467 630 005 312 790 621 645 622 797 938 239 341 129 798 605 796 069 743 379 809 781 018 838 235 770 788 247 125 281 365 625 774 001 694 100 671 160 689 549 148 484 958 410 282 207 931 775 183 286 096 957 808 482 355 395 029 446 790 614 506 814 598 992 498 770 758 152 227 704 720 609 882 459 597 250 203 491 169 149 669 484 727 577 406 618 389 290 950 549 093 530 990 714 017 096 343 959 648 628 267 812 934 983 423 568 981 990 019 577 211 139 206 655 387 315 576 429 683 956 606 142 520 091 951 120 928 639 007 590 821 864 283 018 328 908 749 117 154 495 167 134 016 212 031 419 946 842 359 269 648 993 727 179 455 755 105 820 671 001 157 505 979 878 628 028 414 266 969 399 112 567 769 308 530 049 484 105 186 391 571 980 846 023 318 969 126 309 341 027 741 187 680 705 844 280 841 787 456 536 842 557 951 375 470 796 477 794 130 229 074 985 633 056 155 984 894 810 981 327 894 969 282 744 239 856 221 033 684 358 129 927 275 095 823 597 469 654 817 033 188 979 346 037 422 825 608 178 342 979 275 665 758 455 472 093 389 143 100 584 400 060 247 532 096 481 339 985 321 039 703 424 754 015 741 969 773 602 991 209 394 309 904 959 805 501 153 762 487 003 024 275 517 772 309 243 165 596 604 390 073 742 317 026 647 350 760 539 528 608 117 625 189 694 610 223 837 599 605 337 810 306 183 985 365 138 690 773 573 295 616 124 580 701 708 909 775 272 202 807 446 045 750 893 115 760 943 198 878 027 101 240 224 201 364 674 704 106 793 483 825 197 664 224 373 777 265 456 276 799 042 092 665 780 097 763 467 092 400 616 615 542 570 608 414 330 384 088 587 745 701 616 565 449 408 836 823 118 285 152 164 634 365 093 602 875 205 514 019 729 181 723 500 826 590 644 456 683 692 049 925 703 990 985 968 555 394 070 539 107 668 366 635 144 640 349 331 191 311 242 547 127 672 614 840 386 384 380 228 871 008 053 990 106 906 042 580 239 410 817 768 407 987 208 145 480 824 462 556 953 573 618 610 741 035 587 792 141 265 341 945 024 116 527 521 254 483 781 299 977 145 229 611 964 575 991 659 864 819 822 053 856 242 971 009 526 022 951 339 402 844 224 737 320 402 595 290 094 594 567 912 452 137 712 430 540 466 657 949 819 784 855 639 662 839 819 969 385 120 908 155 889 048 894 551 340 002 037 055 446 742 334 474 342 503 371 343 279 086 647 274 108 954 592 973 641 832 683 023 591 838 306 873 388 221 651 336 710 431 918 148 224 388 003 264 957 576 927 590 628 817 414 117 802 306 205 756 156 396 382 164 193 539 452 875 807 971 937 878 601 725 596 977 447 535 657 829 077 219 284 443 747 571 590 110 479 658 526 003 194 786 859 217 562 729 282 902 559 470 163 752 534 179 685 678 705 286 834 910 571 719 952 258 710 362 764 089 049 765 915 027 661 621 298 583 948 895 214 027 321 252 621 381 951 202 446 368 939 223 894 948 954 822 635 813 428 046 269 848 556 756 462 850 213 283 166 034 737 191 352 550 346 936 948 129 166 792 816 830 797 820 814 659 598 053 814 502 339 264 091 328 878 406 928 275 746 495 624 696 599 085 069 635 292 204 347 607 852 440 931 988 872 671 286 439 399 810 827 958 295 584 284 918 379 999 238 057 729 683 076 226 486 981 879 505 724 702 453 831 286 244 853 883 218 511 887 905 369 977 118 617 930 338 307 122 805 618 455 155 065 189 063 788 493 870 192 583 282 278 265 339 636 138 352 879 015 109 127 788 357 145 834 304 206 059 225 187 903 506 877 169 137 389 409 825 526 078 945 742 452 486 140 865 041 483 696 243 916 989 930 187 117 380 959 428 421 666 634 920 258 961 774 045 846 396 436 493 462 624 500 246 201 342 428 145 350 712 326 890 848 663 487 991 995 784 383 869 970 256 768 435 947 900 629 112 325 862 551 833 184 664 025 931 866 248 708 804 314 194 883 458 448 816 026 618 973 424 755 073 263 013 321 441 478 993 835 502 558 344 372 188 337 624 743 102 833 876 671 233 982 245 020 579 237 972 186 263 573 092 330 162 618 044 301 708 347 551 361 043 961 945 452 676 766 983 179 650 542 960 339 587 553 816 730 322 515 497 616 412 445 932 820 688 317 342 993 312 398 718 290 340 511 154 568 453 705 143 189 189 203 799 095 926 626 992 898 729 804 585 034 722 996 146 352 963 780 242 238 938 566 263 046 221 775 953 843 771 377 336 135 472 235 422 884 292 745 383 684 537 986 768 428 694 077 140 608 472 597 678 420 978 169 488 590 398 164 855 595 472 567 134 604 009 093 438 718 120 838 968 607 931 903 784 744 779 701 619 894 497 621 451 843 793 435 687 817 043 308 094 969 888 898 711 135 542 559 781 634 962 530 308 611 566 527 001 889 621 119 933 072 640 667 626 589 800 953 330 584 211 160 547 137 149 601 527 412 621 094 141 641 597 919 236 533 425 664 103 216 294 932 853 699 267 203 497 272 943 961 527 760 937 951 439 746 600 313 599 603 745 789 079 473 326 166 662 402 119 862 036 471 764 301 775 980 157 921 872 243 437 084 363 999 983 279 806 826 442 433 733 326 132 920 159 041 375 453 510 413 980 323 280 326 125 769 873 039 751 831 009 295 219 345 593 703 691 784 280 197 594 949 593 362 930 391 013 637 763 569 046 646 042 942 082 208 319 063 694 195 554 161 061 269 771 431 211 142 806 792 210 920 029 020 153 459 134 149 209 791 671 528 625 779 251 174 784 972 888 599 310 050 552 500 277 628 502 521 909 468 756 949 476 162 932 515 657 066 012 771 728 903 103 825 357 681 783 740 718 979 637 518 823 187 908 369 607 304 026 015 615 827 943 588 283 756 056 564 699 937 907 828 927 307 977 099 782 239 072 698 945 975 331 069 564 428 783 289 435 144 591 902 637 840 060 320 562 667 854 954 803 528 557 945 514 963 053 583 164 852 996 392 964 670 770 940 222 519 815 565 112 704 604 268 263 297 347 970 014 793 179 206 425 229 154 061 964 498 817 399 038 510 291 509 532 449 806 826 175 302 270 907 470 099 767 629 844 902 709 852 112 337 934 056 836 201 083 084 564 081 168 119 909 571 263 856 649 181 376 200 239 993 377 872 603 247 067 994 724 523 134 351 520 738 143 240 830 807 054 592 536 070 721 261 726 356 824 371 465 304 932 961 716 311 558 329 845 610 133 277 503 200 235 336 390 641 020 484 581 906 478 750 565 324 821 581 060 834 988 391 960 035 709 879 499 239 432 649 766 031 361 526 474 876 299 725 063 410 140 667 269 248 722 871 025 494 404 206 371 499 817 184 349 153 204 070 229 006 871 948 493 164 719 424 007 602 617 859 273 506 427 512 800 325 448 130 114 475 122 268 083 903 905 006 182 079 950 943 431 080 182 664 343 205 724 301 341 904 962 284 362 881 020 928 961 465 850 879 295 614 707 741 802 635 458 366 235 868 365 515 093 538 008 938 190 296 390 364 069 948 736 907 123 390 031 055 971 744 648 772 147 142 422 850 782 814 982 506 065 495 273 201 154 594 359 835 900 562 684 094 361 840 730 701 870 008 827 216 259 420 095 694 677 996 342 116 016 727 988 175 861 711 317 821 740 690 732 466 893 040 165 918 884 985 824 558 474 469 210 796 205 740 924 017 776 854 911 804 523 878 979 094 405 849 695 282 601 581 424 717 114 684 839 175 137 306 355 044 539 252 561 216 597 422 065 306 103 147 453 467 824 230 494 227 969 665 843 516 162 638 521 749 109 099 977 547 336 046 482 874 082 520 426 271 122 704 241 573 412 342 988 865 877 379 490 538
Avec ça, on ne gâche (presque) rien ! Je vous épargne le calcul qui permet de le vérifier.
Voilà, vous avez toutes les positions du morpion dans un seul nombre.
Bien que compact, ça ne sert presque à rien. . Entre autres choses, on peut citer les défauts suivants :
- le décodage et l’encodage est beaucoup plus complexe et coûteux que juste stocker deux positions dans un
uint16
, pour un gain faible d’environ 5% ; - c’est difficilement indexable (la représentation dans des
uint16
se fait avec un simple tableau) ; - si on cherche la compacité maximale, il suffit de stocker un programme qui recalcule les positions (c’est rapide et le programme prend déjà deux fois moins de place).
Note : Merci à @artagis pour le soutien technique nécessaire à la réalisation de ce billet. Photo souvenir ci-dessous. Merci aussi à @Stalone… je crois.