Il s'agissait donc d'aider notre héroïne, Sophia Flegg, à réaliser un tour du monde sans escale. Pour cela, on te demandait donc l'expression d'une fonction définissant l'itinéraire en question.
Rien que dans l'énoncé de ce concours, tu avais d'énormes indices destinés à t'aider dans ta quête, et il est grand temps de les révéler :
Et oui car Sophia Flegg n'était que l'anagramme de Phileas Fogg, gentleman anglais héros du célèbre roman de Jules Verne de 1872, Le tour du monde en 80 jours.
La lecture du roman t'apportait nombre d'indices si tu décidais de contourner l'Eurasie par le sud, notamment en longeant la botte italienne, empruntant le canal de Suez, puis traversant la mer Rouge dans toute sa longueur.
De plus, on découvre au collège que le plus court chemin est la ligne droite, et lorsqu'il y a des contraintes une trajectoire qui peut se ramener par transformations à une ligne droite.
Enfin, on étudie en fin de collège les fonctions affines, et une idée pouvait donc être une fonction affine par morceaux.
Voici ci-contre une trajectoire respectant ces trois derniers points, et qui permettait déjà sans optimisation bien poussée de terminer le tour du monde avec encore 2428,4€ dans la tirelire !
- Code: Select all
(X≥0 et X<0.13)(1.1538462(X-0)+0)+(X≥0.13 et X<1.1)(0.83505155(X-0.13)+0.15)+(X≥1.1 et X<1.2)(0(X-1.1)+0.96)+(X≥1.2 et X<1.37)(2.4117647(X-1.2)+0.96)+(X≥1.37 et X<1.5)(13.307692(X-1.37)+0.55)+(X≥1.5 et X<2.14)(1.28125(X-1.5)+1.18)+(X≥2.14 et X<2.45)(1.6129032(X-2.14)+2)+(X≥2.45 et X<3.9)(0.49655172(X-2.45)+2.5)+(X≥3.9 et X<4.13)(2.9565217(X-3.9)+3.22)+(X≥4.13 et X<4.25)(2.0833333(X-4.13)+3.9)+(X≥4.25 et X<5.1)(1.8(X-4.25)+4.15)+(X≥5.1 et X<5.7)(0.26666667(X-5.1)+5.68)+(X≥5.7 et X<12.4)(0.38507463(X-5.7)+5.52)+(X≥12.4 et X<14.1)(0.17647059(X-12.4)+8.1)+(X≥14.1 et X<15.13)(0.33980583(X-14.1)+7.8)+(X≥15.13 et X<15.41)(1.1785714(X-15.13)+7.45)+(X≥15.41 et X<30.76)(0.074918567(X-15.41)+7.12)+(X≥30.76 et X<30.91)(2(X-30.76)+5.97)+(X≥30.91 et X<32.1)(0.98319328(X-30.91)+5.67)+(X≥32.1 et X≤40)(0.51898734(X-32.1)-4.5)
Voyons donc maintenant comment les participants ont fait et jusqu'où ils sont allés.
10ème, Bartmaniaque a choisi de mettre le cap plein sud, et une fois le continent africain franchi le reste est une promenade de santé.
Son trajet fait 54784km dont un remorquage non négligeable de 7768km. Il lui reste au final 2287,5€.
- Code: Select all
(X≤2)*(2.5X-6.7)+(X>2)*(0.1X-11.1)*(X<20)+(X≥20)*(0.7X-27)*(X<37.84)+(X≥37.84)*0.514
9ème, Clifward pour sa part choisit de contourner l'Eurasie par le nord, puis de mettre la barre au sud pour aller franchir l'Amérique centrale sans escale au niveau du canal de Panama.
Son trajet reste donc conséquent avec 52059km, mais dont seulement 869km de remorquage. Il termine avec 2373,7€.
- Code: Select all
(X≤0.286)*(0.5X)+(X≥0.286 et X≤0.57)*(1.529X-0.294)+(X≥0.57 et X≤1.833)*(1.847X+0.947)+(X≥1.833 et X≤7.571)*(0.494X+3.428)+(X≥7.571 et X≤11)*(7.167)+(X≥11 et X≤11.5)*(0.666X-0.167)+(X≥11.5 et X≤14)*(0.067X+8.267)+(X≥14 et X≤16)*(0.166X+9.667)+(X≥16 et X≤19)*(0.673X+17.77)+(X≥19 et X≤21.33)*(0.574X+15.81)+(X≥21.33 et X≤21.5)*(13.714X+296.11)+(X≥21.5 et X≤22)*(2.57X+56.57)+(X≥22 et X≤25.714)*(0.808X+17.769)+(X≥25.714 et X≤30.286)*(0.75X+16.286)+(X≥30.286 et X≤32.571)*(1.125X-40.5)+(X≥32.571)*(0.519X-20.769)
8ème, vince960 met lui aussi d'abord le cap au nord, mais ose à la différence affronter le grand nord canadien où il n'effectue qu'une très courte escale.
Son voyage ne fait donc que 47543km, dont 1419km de remoquage. Il nous revient avec 2433,4€.
- Code: Select all
(1.4X)(X≥0)(X<.7)+(1.5X+1.4)(X≥.7)(X<2.2)+(.474X+3.657)(X≥2.2)(X<7.7)+(.04X+7)(X≥7.7)(X<11)+(.16X+5.6)(X≥11)(X<12)+(.096X+8.673)(X≥12)(X<26.26)+(.197X+11.266)(X≥26.26)(X<27.02)+(.6564X+23.68)(X≥27.02)(X<27.47)+(.0984X+2.9429)(X≥27.47)(X<28.98)+(5.8)(X≥28.98)(X<29.9)+(5.7)(X≥29.9)(X<31.55)+(5.5)(X≥31.55)(X<32)+(5.3)(X≥32)(X<32.75)+(1.89X+66.6)(X≥32.75)(X<34.5)+(.353X+13.567)(X≥34.5)(X<39)+(.5)(X≥39)(X<39.9)+(.4)(X≥39.9)(X<39.95)+(.35)(X≥39.95)(X<40)+(0)(X=40)
7ème, Grosged adopte pour sa part un trajet similaire à celui de Clifward, n'osant pas braver les conditions extrêmes du Canada.
Il fait légèrement mieux puisqu'il lui reste à l'arrivée 2478,8€.
- Code: Select all
2.83X(X<1.5)+(3.93+.53(X-1.5))(X≥1.5 et X<7.8)+7.2(X≥7.8 et X<11.2)+(X≥11.2 et X<12)(2.8+.4X)+(8.4-.1X)(X≥12 et X<16.2)+(X≥16.2 et X<21.2)(10.4-.628(X-10.4))+(X≥21.2 et X<21.9)(3.6-(X-21.2)5.5)+(X≥21.9 et X<30.6)(.1-(X-21.9).76)+(X≥30.6 et X<31)(6.4+(X-30.6)3)-5.2(X≥31 et X<32.5)+(X≥32.5 et X<39.2)(5.2+.6(X-32.5))+(X≥39.2)(5.2+(X-36)1.3
6ème, cheuble choisit quant à lui avec courage un itinéraire comparable à celui de vince960.
Il fait là encore un peu mieux, optimisant ses bornes et paramètres jusqu'à 2 et 4 décimales, arrivant à s'économiser 2495€.
- Code: Select all
(X<0.90)(3X)+(X>0.90 et X<2.27)(1.8832X+0.6651)+(X>2.27 et X<7.57)(0.4283X+3.9677)+(X>7.57 et X<11.51)(0.0373X+6.9271)+(X>11.51 et X<12.87)(7.46)+(X>12.87 et X<26.06)(0.1106X+8.8847)+(X>26.06 et X<27.42)(6)+(X>27.42 et X<28.48)(5.74)+(X>28.48 et X<30.15)(5.79)+(X>30.15 et X<32.42)(5.74)+(X>32.42 et X<35.28)(1.779X+63.4174)+(X>35.28 et X<39)(0.4054X+15.3108)+(X>39 et X<39.99)(0.5)
5ème, Anonyme0 choisit un itinéraire très voisin de Grosged et Clifward, montant cette fois-ci à 2503,2€ sans besoin d'une optimisation aussi poussée.
- Code: Select all
0(X=0)+0.2(X>0 et X<0.3)+(X*6-0.3)(X>0.3 et X<0.6)+(X*1.9+1)(X>0.6 et X<2)+(X*0.45+3.76)(X>2 et X<8)+7.2(X>8 et X<11.5)+7.5(X>11.5 et X<12.57)+(X*0.2+10)(X>12.57 et X<16.21)+(X*0.69+18.2)(X>16.21 et X<21.45)+(X*0.98+22.5)(X>21.45 et X<28)+(8.6876-0.48X)(X>28 et X<30.75)+(67.42+2X)(X>30.75 et X<31.2)+5(X>31.2 et X<31.81)+(18.46+0.44X)(X>31.81 et X<39.39)+0.51(X>39.39 et X<39.9)+0(X>39.9)+0(X>39.9)
En 4ème position, avec StarTrekVoyager, on affronte à nouveau le même raccourci du grand nord canadien.
L'optimisation est ici bien poussée, avec des bornes et paramètres jusuqu'à 3 et 9 décimales, nous faisant monter à 2506,9€.
- Code: Select all
(1.142857143*(X-0)+0)*(0<X et X≤0.175)+(5.636363636*(X-0.175)+0.2)*(0.175<X et X≤0.45)+(1.864661654*(X-0.45)+1.75)*(0.45<X et X≤1.78)+(0.5*(X-1.78)+4.23)*(1.78<X et X≤7.96)+(0.01447178*(X-7.96)+7.32)*(7.96<X et X≤11.415)+(0.4293785311*(X-11.415)+7.37)*(11.415<X et X≤12.3)+(0.1205385165*(X-12.3)+7.75)*(12.3<X et X≤26.818181)+(0.3849999615*(X-26.818181)+6)*(26.818181<X et X≤27.727272)+(0.0841688299*(X-27.727272)+5.65)*(27.727272<X et X≤29.45)+(0*(X-29.45)+5.795)*(29.45<X et X≤29.9)+(0.2*(X-29.9)+5.795)*(29.9<X et X≤30.1)+(0*(X-30.1)+5.755)*(30.1<X et X≤31.4)+(0.8772727273*(X-31.4)+5.755)*(31.4<X et X≤32.5)+(1.605882353*(X-32.5)+4.79)*(32.5<X et X≤34.2)+(0.7714285714*(X-34.2)+2.06)*(34.2<X et X≤35.25)+(0.4133333333*(X-35.25)+1.25)*(35.25<X et X≤39)+(0.1671671672*(X-39)+0.3)*(39<X et X≤39.999)+(467*(X-39.999)+0.467)*(39.999<X et X≤40)
Show/Hide spoilerAfficher/Masquer le spoiler
StarTrekVoyager wrote:j'ai juste fait un petit programme en Basic qui se sert de la fonction toString( et qui transforme deux listes (en l'occurence L1 et L2) contenant les coordonnées en fonction piecewise. Au final, je suis passé par le Canada, et au fil d’optimisations pointilleuses et de l'aide de Hayleia ( ), j'ai fini par atteindre 2507, ce dont je suis fier car je suis le seul à avoir atteint ce score via le Passage du Nord-Ouest, et seulement 2 pixels rouges au milieu du trajet
3ème, Wistaro nous reprend le trajet passant au nord puis au Panama, et l'optimise à fond aux limites de la calculatrice avec des bornes et paramètres jusqu'à 12 décimales.
Ce travail énorme lui fait gagner 2520,8€.
- Code: Select all
(X≥0 et X<0.39040072)*(1.1154517614619X+0)+(X≥0.39040072 et X<0.6159999999999)*(6.2523551901438X+2.0054507971278)+(X≥0.6159999999999 et X<1.5151817999999)*(2.0589510374876X+0.57768616090792)+(X≥1.5151817999999 et X<2.272727273)*(1.0357190795859X+2.1280686006988)+(X≥2.272727273 et X<8.18181833)*(0.48688104011428X+3.3754277814656)+(X≥8.18181833 et X<10.31757576008)*(0.00324894152321X+7.3324177506944)+(X≥10.31757576008 et X<12.459242419992)*(0.0651476536958X+6.6937730984024)+(X≥12.459242419992 et X<16.818100001)*(0.24931238202496X+10.611706914846)+(X≥16.818100001 et X<21.21212121)*(0.67863042907404X+17.832020762352)+(X≥21.21212121 et X<21.3436666726)*(5.0339797617236X+110.2182187184)+(X≥21.3436666726 et X<21.66599999989)*(5.0326587114136X+110.19002266093)+(X≥21.66599999989 et X<22.27)*(1.510660628864X+33.8824122048)+(X≥22.27 et X<29.24242424)*(0.82065043104722X+18.515885099421)+(X≥29.24242424 et X<31.21212121)*(0.4781740360904X+8.5010450659072)+(X≥31.21212121 et X<31.730666669964)*(1.7532633637234X+61.146849529606)+(X≥31.730666669964 et X<33.630000001)*(0.60265048290128X+24.637135742072)+(X≥33.630000001 et X<39.613939381)*(0.6443365292748X+26.039037481656)+(X≥39.613939381 et X<39.999)*(0.26151722801858X+10.874056887815)+(X≥39.999 et X<40)*(413.6292843X+16545.171372)
Show/Hide spoilerAfficher/Masquer le spoiler
Wistaro wrote:J'ai tout d'abord commencé par développer en langage TI-Basic un programme permettant de générer une trajectoire avec une série de points. Le fonctionnement est plutôt simple: on va tracer une fonction affine entre chaque points.
Pour cela, je vais d'abord trouver le coefficient directeur de cette droite en faisant la différence des valeurs en Y sur la différence des valeurs en X.
Pour trouver l'ordonnée à l'origine (B), il suffit de faire , pour un point, Y moins le coefficient directeur multiplié par la valeur de X.
Nous avons donc, entre 2 points A et B, une équation de la forme aX+B
Reste à faire cela entre les points B et C, C et D, etc...
Il faut ensuite appliquer telle fonction sur tel intervalle.
Donc, j'ai fais ceci:
(X >= POINT "gauche" and X< POINT suivant "droite") * (aX+B)
Ainsi, le premier point sera évalué avec la fonction aX+B.
Le second point, lui, sera évalué avec la fonction suivante, donc a'X+b'.
L'inverse pouvait provoquer des bugs, c'est pour cela que j'ai choisi ce sens.
Si l'on a 2 listes, l'une comportant les X (x1,x2,x3,x4...) et l'autres les Y (y1, y2, y3, y4, ...), la fonction totale se présente sous la forme:
(X >= x1 and X< x2) * (aX+B) + (X >= x2 and X< x3) * (a'X+B') + (X >= x3 and X< x4) * (a''X+B'')....
La génération de la fonction fonctionne. Il faut désormais définir la trajectoire.
J'ai tout d'abord commencé sur papier.
J'ai imprimé la carte en grand format et essayé de tracer à la règle (car la droite est la trajectoire la plus courte) la meilleure trajectoire.
Il ne restait ensuite qu'à stocker dans une liste les différentes coordonnées des points de ma trajectoire, puis d'appliquer mon programme de génération de fonction.
Au fur et à mesure, j'ai proposé divers trajectoires, m'améliorant de version en version. J'ai optimisé ma manière de travailler, en utilisant un double écran (sur un écran, la carte sur CEmu, avec la résolution quasi-maximale et sur l'autre le clavier).
J'ai finis par arriver à la limite de mon programme, vers les 2 500.
Pour continuer à grossir le score, j'ai conçu un autre algorithme pour affiner les points à 0.0001 près.
Le fonctionnement était trivial.Pour chaque point, il augmentait de 0.0001 sur Y, puis lançait la génération, puis lançait TOUR83, obtenait le score. Si le score était supérieur au score précédant, on recommence en augmentant de 0.001. Autrement, on diminuait.
Ce programme étant relativement lent, j'ai finis par affiner à la main tout les points , pour enfin arriver au score de 2 520,8.
Avec cette technique et cette trajectoire, je doute que l'on puisse aller plus loin.
2ème, Hayleia nous arrache 2574,0€.
Il s'agit à nouveau de partir vers le nord et d'affronter le Canada, mais à la différence de ses adversaires, tel un TASseur (Tool Assisted Speedrunneur) de jeux vidéo, Hayleia arrive à trouver au pixel près une façon de traverser le Canada sans escale !
Ses paramètres sont aussi optimisés à fond jusqu'à 12 décimales.
Mais sa stratégie est également bien différente des autres candidats. Au lieu d'être définie comme un assemblage de segments, sa fonction est ici définie point par point, pour chacune des 265 colonnes de pixels de la zone graphique, ce qui bien évidemment donne une équation ci-dessous beaucoup plus longue.
Une autre astuce apparemment payante, est également l'utilisation de la variable système ΔX accessible via , qui contient la distance séparent deux pixels consécutifs sur une même ligne.
- Code: Select all
0+(X=0ΔX)0+(X=1ΔX)0.167530487805+(X=2ΔX)0.637256097561+(X=3ΔX)1.122134146341+(X=4ΔX)1.622164634146+(X=5ΔX)2.137347560976+(X=6ΔX)2.39493902439+(X=7ΔX)2.652530487805+(X=8ΔX)2.91012195122+(X=9ΔX)3.167713414634+(X=10ΔX)3.425304878049+(X=11ΔX)3.682896341463+(X=12ΔX)3.955640243903+(X=13ΔX)4.107164634146+(X=14ΔX)4.25868902439+(X=15ΔX)4.334451219512+(X=16ΔX)4.410213414634+(X=17ΔX)4.485975609756+(X=18ΔX)4.561737804878+(X=19ΔX)4.6375+(X=20ΔX)4.713262195122+(X=21ΔX)4.789024390244+(X=22ΔX)4.864786585366+(X=23ΔX)4.940548780488+(X=24ΔX)5.01631097561+(X=25ΔX)5.092073170732+(X=26ΔX)5.167835365854+(X=27ΔX)5.243597560976+(X=28ΔX)5.3193597560972+(X=29ΔX)5.39512195122+(X=30ΔX)5.4708841463412+(X=31ΔX)5.5466463414632+(X=32ΔX)5.6224085365852+(X=33ΔX)5.6981707317072+(X=34ΔX)5.7739329268292+(X=35ΔX)5.8496951219512+(X=36ΔX)5.9254573170732+(X=37ΔX)6.0012195121952+(X=38ΔX)6.0769817073172+(X=39ΔX)6.1527439024392+(X=40ΔX)6.2285060975612+(X=41ΔX)6.3042682926832+(X=42ΔX)6.3800304878052+(X=43ΔX)6.4709451219512+(X=44ΔX)6.5618597560972+(X=45ΔX)6.652774390244+(X=46ΔX)6.74368902439+(X=47ΔX)6.8346036585372+(X=48ΔX)6.9103658536592+(X=49ΔX)6.98612804878+(X=50ΔX)7.0618902439032+(X=51ΔX)7.137652439024+(X=52ΔX)7.137652439024+(X=53ΔX)7.137652439024+(X=54ΔX)7.137652439024+(X=55ΔX)7.137652439024+(X=56ΔX)7.137652439024+(X=57ΔX)7.137652439024+(X=58ΔX)7.1528048780492+(X=59ΔX)7.1679573170732+(X=60ΔX)7.1831097560972+(X=61ΔX)7.198262195122+(X=62ΔX)7.213414634146+(X=63ΔX)7.2285670731712+(X=64ΔX)7.2437195121952+(X=65ΔX)7.25887195122+(X=66ΔX)7.274024390244+(X=67ΔX)7.289176829268+(X=68ΔX)7.3043292682932+(X=69ΔX)7.3194817073172+(X=70ΔX)7.3346341463412+(X=71ΔX)7.349786585366+(X=72ΔX)7.36493902439+(X=73ΔX)7.3800914634152+(X=74ΔX)7.3952439024392+(X=75ΔX)7.4103963414632+(X=76ΔX)7.425548780488+(X=77ΔX)7.440701219512+(X=78ΔX)7.440701219512+(X=79ΔX)7.440701219512+(X=80ΔX)7.440701219512+(X=81ΔX)7.440701219512+(X=82ΔX)7.440701219512+(X=83ΔX)7.440701219512+(X=84ΔX)7.440701219512+(X=85ΔX)7.440701219512+(X=86ΔX)7.440701219512+(X=87ΔX)7.440701219512+(X=88ΔX)7.440701219512+(X=89ΔX)7.440701219512+(X=90ΔX)7.440701219512+(X=91ΔX)7.440701219512+(X=92ΔX)7.440701219512+(X=93ΔX)7.440701219512+(X=94ΔX)7.440701219512+(X=95ΔX)7.440701219512+(X=96ΔX)7.440701219512+(X=97ΔX)7.440701219512+(X=98ΔX)7.440701219512+(X=99ΔX)7.440701219512+(X=100ΔX)7.440701219512+(X=101ΔX)7.440701219512+(X=102ΔX)7.440701219512+(X=103ΔX)7.440701219512+(X=104ΔX)7.440701219512+(X=105ΔX)7.440701219512+(X=106ΔX)7.440701219512+(X=107ΔX)7.440701219512+(X=108ΔX)7.440701219512+(X=109ΔX)7.440701219512+(X=110ΔX)7.440701219512+(X=111ΔX)7.440701219512+(X=112ΔX)7.440701219512+(X=113ΔX)7.440701219512+(X=114ΔX)7.440701219512+(X=115ΔX)7.440701219512+(X=116ΔX)7.440701219512+(X=117ΔX)7.440701219512+(X=118ΔX)7.440701219512+(X=119ΔX)7.440701219512+(X=120ΔX)7.440701219512+(X=121ΔX)7.440701219512+(X=122ΔX)7.440701219512+(X=123ΔX)7.440701219512+(X=124ΔX)7.440701219512+(X=125ΔX)7.440701219512+(X=126ΔX)7.440701219512+(X=127ΔX)7.440701219512+(X=128ΔX)7.440701219512+(X=129ΔX)7.440701219512+(X=130ΔX)7.440701219512+(X=131ΔX)7.440701219512+(X=132ΔX)7.440701219512+(X=133ΔX)7.440701219512+(X=134ΔX)7.440701219512+(X=135ΔX)7.440701219512+(X=136ΔX)7.440701219512+(X=137ΔX)7.440701219512+(X=138ΔX)7.440701219512+(X=139ΔX)7.440701219512+(X=140ΔX)7.440701219512+(X=141ΔX)7.440701219512+(X=142ΔX)7.440701219512+(X=143ΔX)7.440701219512+(X=144ΔX)7.440701219512+(X=145ΔX)7.440701219512+(X=146ΔX)7.440701219512+(X=147ΔX)7.440701219512+(X=148ΔX)7.440701219512+(X=149ΔX)7.440701219512+(X=150ΔX)7.440701219512+(X=151ΔX)7.440701219512+(X=152ΔX)7.440701219512+(X=153ΔX)7.440701219512+(X=154ΔX)7.440701219512+(X=155ΔX)7.440701219512+(X=156ΔX)7.440701219512+(X=157ΔX)7.440701219512+(X=158ΔX)7.440701219512+(X=159ΔX)7.440701219512+(X=160ΔX)7.440701219512+(X=161ΔX)7.440701219512+(X=162ΔX)7.440701219512+(X=163ΔX)7.440701219512+(X=164ΔX)7.440701219512+(X=165ΔX)7.440701219512+(X=166ΔX)7.440701219512+(X=167ΔX)7.440701219512+(X=168ΔX)7.440701219512+(X=169ΔX)7.440701219512+(X=170ΔX)7.440701219512+(X=171ΔX)7.440701219512+(X=172ΔX)7.440701219512+(X=173ΔX)7.440701219512+(X=174ΔX)7.440701219512+(X=175ΔX)7.440701219512+(X=176ΔX)7.440701219512+(X=177ΔX)7.440701219512+(X=178ΔX)7.440701219512+(X=179ΔX)7.440701219512+(X=180ΔX)7.440701219512+(X=181ΔX)7.274024390244+(X=182ΔX)7.198262195122+(X=183ΔX)7.1225+(X=184ΔX)7.0921951219512+(X=185ΔX)7.0618902439032+(X=186ΔX)7.031585365854+(X=187ΔX)7.0012804878052+(X=188ΔX)6.970975609756+(X=189ΔX)6.970975609756+(X=190ΔX)6.970975609756+(X=191ΔX)6.98612804878+(X=192ΔX)6.9103658536592+(X=193ΔX)6.8346036585372+(X=194ΔX)6.728536585366+(X=195ΔX)6.6224695121952+(X=196ΔX)6.5315548780492+(X=197ΔX)6.2133536585372+(X=198ΔX)5.9103048780492+(X=199ΔX)5.7587804878052+(X=200ΔX)5.74362804878+(X=201ΔX)5.728475609756+(X=202ΔX)5.713323170732+(X=203ΔX)5.6981707317072+(X=204ΔX)5.6830182926832+(X=205ΔX)5.6678658536592+(X=206ΔX)5.652713414634+(X=207ΔX)5.63756097561+(X=208ΔX)5.6224085365852+(X=209ΔX)5.4708841463412+(X=210ΔX)5.3193597560972+(X=211ΔX)5.167835365854+(X=212ΔX)5.01631097561+(X=213ΔX)4.864786585366+(X=214ΔX)4.713262195122+(X=215ΔX)4.561737804878+(X=216ΔX)4.3647560975612+(X=217ΔX)4.167774390244+(X=218ΔX)3.970792682927+(X=219ΔX)3.77381097561+(X=220ΔX)3.576829268293+(X=221ΔX)3.379847560976+(X=222ΔX)3.182865853659+(X=223ΔX)2.985884146341+(X=224ΔX)2.788902439024+(X=225ΔX)2.591920731707+(X=226ΔX)2.39493902439+(X=227ΔX)2.197957317073+(X=228ΔX)2.000975609756+(X=229ΔX)1.819146341463+(X=230ΔX)1.66762195122+(X=231ΔX)1.561554878049+(X=232ΔX)1.455487804878+(X=233ΔX)1.364573170732+(X=234ΔX)1.334268292683+(X=235ΔX)1.303963414634+(X=236ΔX)1.273658536585+(X=237ΔX)1.243353658537+(X=238ΔX)1.213048780488+(X=239ΔX)1.182743902439+(X=240ΔX)1.15243902439+(X=241ΔX)1.122134146341+(X=242ΔX)1.091829268293+(X=243ΔX)1.061524390244+(X=244ΔX)1.031219512195+(X=245ΔX)1.000914634146+(X=246ΔX)0.970609756097+(X=247ΔX)0.940304878049+(X=248ΔX)0.91+(X=249ΔX)0.879695121951+(X=250ΔX)0.849390243903+(X=251ΔX)0.819085365854+(X=252ΔX)0.788780487805+(X=253ΔX)0.758475609756+(X=254ΔX)0.728170731707+(X=255ΔX)0.713018292683+(X=256ΔX)0.697865853659+(X=257ΔX)0.682713414634+(X=258ΔX)0.66756097561+(X=259ΔX)0.652408536585+(X=260ΔX)0.637256097561+(X=261ΔX)0.622103658537+(X=262ΔX)0.394817073171+(X=263ΔX)0.167530487805+(X=264ΔX)0
Show/Hide spoilerAfficher/Masquer le spoiler
Au départ, j'essayais simplement de traduire une liste de points cherchés à la main en une fonction ligne brisée afin d'obtenir une courbe potable, en passant notamment par le Canada (le passage à 2 pixels), directement sur calculatrice.
Ensuite, ayant appris que le Panama avait un passage sans rouge, j'ai écrit quelques programmes de bruteforce en Basic afin d'essayer rapidement des points et trouver comment y passer, et Ruadh a été assez sympathique pour m'indiquer qu'il fallait une certaine pente. Ceci sur CEmu afin de tester plus vite.
Une fois ce bruteforce effectué et une courbe à 2528 trouvée, j'ai pensé que quitte à écrire des bruteforces, autant en écrire un qui me donne toute la trajectoire. J'ai donc converti l'image du planisphère avec sourcecoder et écrit un programme C pour PC qui teste "tous" les Y possibles (évidemment sur un échantillon discret paramétrable avec un pas) pour tous les I possibles et qui renvoie le plus court chemin. Ruadh a aussi été d'une grande aide pour les corrections de ce programme, sur le calcul du coût (à traduire depuis le Basic) ou la "traduction en fonction" finale (j'ai longtemps pensé que mon bruteforce ne fonctionnait pas alors que c'était la traduction en fonction qui posait problème). Il y avait notamment un bug final qui n'a pas été corrigé avant l'envoi de la fonction qui faisait que le bruteforce trouvait un bon chemin mais n'arrivait pas à sortir une liste de points (problème de précision des float...). La fonction que j'ai envoyée provient donc d'un bruteforce de Ruadh, mon programme ayant un score inférieur de 0.5€ (le problème a été résolu ensuite, et de toute façon à 0.5€ près j'ai la même place au classement...).
Si ça vous intéresse aussi, le bruteforce ne tourne qu'en 5 minutes, pas plus. Il serait plus lent avec une précision supérieure mais cela semblait inutile (et il pourrait être amélioré mais j'ai la flemme).
1er, Ruadh nous décroche le gros lot avec 2574,4€.
La trajectoire est similaire à celle de Hayleia, mais avec à nouveau un assemblage de segments et donc une équation beaucoup plus courte.
La méthode de recherche utilisée est par contre visiblement beaucoup moins empirique que celle des concurrents, puisqu'il n'y a aucune approximation dans l'équation, juste des valeurs exactes.
En plus de la variable système ΔX, il utilise également la variable système ΔY également accessible via , et donnant cette fois-ci la distance séparant deux pixels consécutifs dans une même colonne.
- Code: Select all
ΔY(157/142(X=ΔX)+(13/4/ΔXX-609/284)(X>ΔX et X≤5ΔX)+(12/7/ΔXX+5501/994)(X>5ΔX et X≤12ΔX)+(X/ΔX+2003/142)(X>12ΔX et X≤14ΔX)+(17/33/ΔXX+97907/4686)(X>14ΔX et X≤47ΔX)+(X/ΔX/2+1534/71)(X>47ΔX et X≤51ΔX)+(X/ΔX/13+79715/1846)(X>51ΔX et X≤77ΔX)+6973/142(X>77ΔX et X≤180ΔX)+(9841/71-X/2/ΔX)(X>180ΔX et X≤183ΔX)+(59431/710-X/5/ΔX)(X>183ΔX et X≤188ΔX)+6547/142(X>188ΔX et X≤191ΔX)+(10054/71-.5/ΔXX)(X>191ΔX et X≤193ΔX)+(74027/426-2/3/ΔXX)(X>193ΔX et X≤196ΔX)+(61785/142-2/ΔXX)(X>196ΔX et X≤198ΔX)+5411/142(X=199ΔX)+(76957/1278-X/ΔX/9)(X>199ΔX et X≤208ΔX)+(34805/142-X/ΔX)(X>208ΔX et X≤215ΔX)+(304695/994-9/7/ΔXX)(X>215ΔX et X≤229ΔX)+1577/142(X=230ΔX)+(70051/426-2/3/ΔXX)(X>230ΔX et X≤233ΔX)+(100817/1988-5/28X/ΔX)(X>233ΔX et X≤261ΔX)+(28088/71-3/2/ΔXX)(X>261ΔX et X≤263ΔX))-11(X≥181ΔX et X≤183ΔX ou X=188ΔX ou X=198ΔX ou X=199ΔX ou X≥229ΔX et X≤233ΔX
Show/Hide spoilerAfficher/Masquer le spoiler
J'ai travaillé uniquement en utilisant les pixels, en utilisant ΔX et ΔY. D'abord il a fallu trouver la trajectoire optimale, ce qui m'a pris un certain temps. Pour cela, je me suis aidé du programme du concours grâce auquel j'ai remarqué que seuls les pixel de départ et d'arrivé (et ceux directement en dessous) étaient importants (c'était en v3, ça a été modifié par la suite), on pouvait donc traverser la terre s'il y avait deux cases vides (eau) adjacentes ou diagonalement voisines. Cela autorisait à passer à deux endroits, au Canada et au Panama. Le Canada semble le passage qui réduit au maximum la distance et c'est donc celui que j'ai choisit d'emprunter.
J'ai ensuite cherché les coordonnées en pixels (plus simple car ce ne sont que des entiers naturels) pour lesquelles je doit changer la pente de la fonction. Je me suis ensuite servi du fait que le programme arrondit les pixels à l'entier le plus proche pour optimiser la trajectoire. J'ai ainsi pu ajouter ou enlever 0,5 à chaque ordonnée Y pour avoir la pente de chaque partie de la fonction la plus petite en valeur absolue. J'ai ensuite cherché les fonctions affines qui reliaient chacun de ces pixels, de la façon suivante (f(x)=a.(ΔY/ΔX).X+b une fonction affine utilisée pour X1⩽X⩽X2 , Y1=f(X1), Y2=f(X2) , X1,Y1,X2,Y2 sont en pixels) : a=-(Y2-Y1)/(X2-X1) et b=y1-a.(ΔY/ΔX).x1 . J'ajoute ensuite les valeurs (plus en pixels cette fois) minimale et maximale de X (X1.ΔX et X2.ΔX respectivement) ce qui donne : (a.(ΔY/ΔX).X+b)(X>X1.ΔX et X⩽X.ΔX).
Une fois cela fait, j'ai tout rassemblé en une unique fonction affine par morceaux simplement en ajoutant un plus (+) entre chaque fonction.
Nous tenons à remercier et féliciter tous les participants pour leurs recherches et productions très intéressante et pertinentes.
En effet le climat a évolué depuis l'époque de Jules Verne, et avec la fonte des glaces il est vrai que le grand nord canadien devient de plus en plus navigable et est donc un enjeu économique important.
Comme prévu, nous allons donc maintenant contacter dans l'ordre chaque gagnant, afin qu'il puisse choisir son lot.
Et à bientôt pour un futur concours !