Le Sat, 07 Nov 2009 18:34:48 +0100
zwim a écrit
>Le Sat, 07 Nov 2009 11:26:24 +0100
>caribou@server.invalid a écrit
>>Bonjour
>>
>>dans le chapitre des mathématiques récréatives, je suis tombé sur un
>>problème que je ne sais pas par quel bout empoigner, alors si vous pouviez
>>me donner un lien vers un peu d'aide ce serait sympa.
>>
>>On a n crapauds et n grenouilles sur une ligne avec un espace entre eux
>>
>>par exemple pour n=2
>>
>>CC_GG
>>
>>Les crapauds peuvent se déplacer vers la droite d'une case si la case à leur
>>droite est vide ou sauter par dessus une grenouille si la case à droite de
>>la grenouille est vide (symétriquement pour les grenouilles).
>>
>>La question qui est posée est : combien de déplacements sont nécessaires si
>>on a n bestioles de chaque type pour "renverser" la situation initiale.
J'ai repris le problème par programmation, et il s'avère que j'avais
faux
précédemment.
Voici le programme pour ceux que ça intéresse :
Code:
Content visible to registered users only.
En gros je code en base 3, C=0, G=1 et _=2
Donc CC_GG vaut 00211.
Et j'utilise un immense tableau pour stocker le graphe des voisins, un
voisin étant une position pouvant être obtenue à partir d'une autre
position grâce aux 4 mouvements légaux :
_a vers a_
a_ vers _a
01_ vers _10
_01 vers 10_
L'algo s'arrête quand les 1 et les 0 ont changé de place.
Voici ce que donne l'execution pour n=2
$ ./grenouilles.exe 2
----- NIVEAU 0 -----
22 : 00_11 : 0 -1
----- NIVEAU 1 -----
16 : 001_1 : 1 22
58 : 0_011 : 1 22
----- NIVEAU 2 -----
14 : 0011_ : 2 16
34 : 010_1 : 2 58
64 : 0_101 : 2 16
166 : _0011 : 2 58
----- NIVEAU 3 -----
32 : 0101_ : 3 34
46 : 01_01 : 3 34
172 : _0101 : 3 64
----- NIVEAU 4 -----
38 : 0110_ : 4 46
48 : 01_10 : 4 32
100 : 10_01 : 4 172
190 : _1001 : 4 46
----- NIVEAU 5 -----
42 : 011_0 : 5 38
66 : 0_110 : 5 48
88 : 100_1 : 5 100
92 : 1010_ : 5 100
136 : 1_001 : 5 100
192 : _1010 : 5 48
----- NIVEAU 6 -----
86 : 1001_ : 6 88
96 : 101_0 : 6 92
138 : 1_010 : 6 192
174 : _0110 : 6 66
----- NIVEAU 7 -----
102 : 10_10 : 7 86
114 : 110_0 : 7 138
144 : 1_100 : 7 96
----- NIVEAU 8 -----
110 : 1100_ : 8 114
126 : 11_00 : 8 114
198 : _1100 : 8 144
Avec pour chaque impression, le nombre en base 3, sa représentation
visuelle, le niveau et la position parente au niveau
précédent.
Et voici donc le résultat cherché, le plus court chemin de la potion
de départ à la position d'arrivée (ici
présenté en ordre rétrograde).
##################### n=0
_ : 0 -1
##################### n=1
1_0 : 3 11
10_ : 2 19
_01 : 1 7
0_1 : 0 -1
##################### n=2
11_00 : 8 114
110_0 : 7 138
1_010 : 6 192
_1010 : 5 48
01_10 : 4 32
0101_ : 3 34
010_1 : 2 58
0_011 : 1 22
00_11 : 0 -1
##################### n=3
111_000 : 15 1071
1110_00 : 14 1143
11_0100 : 13 1305
1_10100 : 12 873
101_100 : 11 825
10101_0 : 10 821
101010_ : 9 829
1010_01 : 8 901
10_0101 : 7 1549
_010101 : 6 577
0_10101 : 5 145
001_101 : 4 97
00101_1 : 3 103
0010_11 : 2 175
00_0111 : 1 67
000_111 : 0 -1
##################### n=4
1111_0000 : 24 9774
11110_000 : 23 9990
111_01000 : 22 10476
11_101000 : 21 9180
1101_1000 : 20 9036
110101_00 : 19 9024
1101010_0 : 18 9048
11010_010 : 17 9264
110_01010 : 16 11208
1_0101010 : 15 15582
_10101010 : 14 3918
01_101010 : 13 2622
0101_1010 : 12 2478
010101_10 : 11 2462
01010101_ : 10 2464
0101010_1 : 9 2488
01010_011 : 8 2704
010_01011 : 7 4648
0_0101011 : 6 1732
00_101011 : 5 436
0001_1011 : 4 292
000101_11 : 3 310
00010_111 : 2 526
000_01111 : 1 202
0000_1111 : 0 -1
##################### n=5
11111_00000 : 35 88371
111110_0000 : 34 89019
1111_010000 : 33 90477
111_1010000 : 32 86589
11101_10000 : 31 86157
1110101_000 : 30 86121
11101010_00 : 29 86193
111010_0100 : 28 86841
1110_010100 : 27 92673
11_01010100 : 26 105795
1_101010100 : 25 70803
101_1010100 : 24 66915
10101_10100 : 23 66483
1010101_100 : 22 66435
101010101_0 : 21 66431
1010101010_ : 20 66439
10101010_01 : 19 66511
101010_0101 : 18 67159
1010_010101 : 17 72991
10_01010101 : 16 125479
_0101010101 : 15 46747
0_101010101 : 14 11755
001_1010101 : 13 7867
00101_10101 : 12 7435
0010101_101 : 11 7387
001010101_1 : 10 7393
00101010_11 : 9 7465
001010_0111 : 8 8113
0010_010111 : 7 13945
00_01010111 : 6 5197
000_1010111 : 5 1309
00001_10111 : 4 877
0000101_111 : 3 931
000010_1111 : 2 1579
0000_011111 : 1 607
00000_11111 : 0 -1
##################### n=6
111111_000000 : 48 796554
1111110_00000 : 47 798498
11111_0100000 : 46 802872
1111_10100000 : 45 791208
111101_100000 : 44 789912
11110101_0000 : 43 789804
111101010_000 : 42 790020
1111010_01000 : 41 791964
11110_0101000 : 40 809460
111_010101000 : 39 848826
11_1010101000 : 38 743850
1101_10101000 : 37 732186
110101_101000 : 36 730890
11010101_1000 : 35 730746
1101010101_00 : 34 730734
11010101010_0 : 33 730758
110101010_010 : 32 730974
1101010_01010 : 31 732918
11010_0101010 : 30 750414
110_010101010 : 29 907878
1_01010101010 : 28 1262172
_101010101010 : 27 317388
01_1010101010 : 26 212412
0101_10101010 : 25 200748
010101_101010 : 24 199452
01010101_1010 : 23 199308
0101010101_10 : 22 199292
010101010101_ : 21 199294
01010101010_1 : 20 199318
010101010_011 : 19 199534
0101010_01011 : 18 201478
01010_0101011 : 17 218974
010_010101011 : 16 376438
0_01010101011 : 15 140242
00_1010101011 : 14 35266
0001_10101011 : 13 23602
000101_101011 : 12 22306
00010101_1011 : 11 22162
0001010101_11 : 10 22180
000101010_111 : 9 22396
0001010_01111 : 8 24340
00010_0101111 : 7 41836
000_010101111 : 6 15592
0000_10101111 : 5 3928
000001_101111 : 4 2632
00000101_1111 : 3 2794
0000010_11111 : 2 4738
00000_0111111 : 1 1822
000000_111111 : 0 -1
##################### n=7
1111111_0000000 : 63 7172631
11111110_000000 : 62 7178463
111111_01000000 : 61 7191585
11111_101000000 : 60 7156593
1111101_1000000 : 59 7152705
111110101_00000 : 58 7152381
1111101010_0000 : 57 7153029
11111010_010000 : 56 7158861
111110_01010000 : 55 7211349
1111_0101010000 : 54 7329447
111_10101010000 : 53 7014519
11101_101010000 : 52 6979527
1110101_1010000 : 51 6975639
111010101_10000 : 50 6975207
11101010101_000 : 49 6975171
111010101010_00 : 48 6975243
1110101010_0100 : 47 6975891
11101010_010100 : 46 6981723
111010_01010100 : 45 7034211
1110_0101010100 : 44 7506603
11_010101010100 : 43 8569485
1_1010101010100 : 42 5735133
101_10101010100 : 41 5420205
10101_101010100 : 40 5385213
1010101_1010100 : 39 5381325
101010101_10100 : 38 5380893
10101010101_100 : 37 5380845
1010101010101_0 : 36 5380841
10101010101010_ : 35 5380849
101010101010_01 : 34 5380921
1010101010_0101 : 33 5381569
10101010_010101 : 32 5387401
101010_01010101 : 31 5439889
1010_0101010101 : 30 5912281
10_010101010101 : 29 10163809
_01010101010101 : 28 3786517
0_1010101010101 : 27 952165
001_10101010101 : 26 637237
00101_101010101 : 25 602245
0010101_1010101 : 24 598357
001010101_10101 : 23 597925
00101010101_101 : 22 597877
0010101010101_1 : 21 597883
001010101010_11 : 20 597955
0010101010_0111 : 19 598603
00101010_010111 : 18 604435
001010_01010111 : 17 656923
0010_0101010111 : 16 1129315
00_010101010111 : 15 420727
000_10101010111 : 14 105799
00001_101010111 : 13 70807
0000101_1010111 : 12 66919
000010101_10111 : 11 66487
00001010101_111 : 10 66541
0000101010_1111 : 9 67189
00001010_011111 : 8 73021
000010_01011111 : 7 125509
0000_0101011111 : 6 46777
00000_101011111 : 5 11785
0000001_1011111 : 4 7897
000000101_11111 : 3 8383
00000010_111111 : 2 14215
000000_01111111 : 1 5467
0000000_1111111 : 0 -1
Au delà de n=7, ça devient problématique au niveau conso mémoire

Oh le joli serpentin de _ !
La suite magique est donc : 0,3,8,15,24,35,48,63,...
Cette fois la recherche est positive sur l'encyclopédie
Code:
Content visible to registered users only.
f(n) = n(n+2)
Reste plus qu'à le démontrer pour les courageux, ce que je ne suis pas
ce soir...
--
zwim.
Rien n'est impossible que la mesure de la volonté humaine...