Mouvement du fou echec et obstacle

Olympiades mathématiques, énigmes et défis
boikl42
Messages: 3
Enregistré le: 05 Déc 2019, 19:15

Mouvement du fou echec et obstacle

par boikl42 » 05 Déc 2019, 19:36

Bonjour,

Mon but est de calculer le nombre total de mouvement que le fou peut faire pour n'importe qu'elle board d'échec de taille N.
Code: Tout sélectionner
8 *|*|*|o|*|*|*|*   pos: (6, 2)
7 o|*|o|*|*|*|*|*   fBRtoTL: 1
6 *|f|*|*|*|*|*|*   fTLtoBR: 5
5 o|*|o|*|*|*|*|*   fTRtoBL: 1
4 *|*|*|o|*|*|*|*   fBLtoTR: 2
3 *|*|*|*|o|*|*|*
2 *|*|*|*|*|o|*|*
1 *|*|*|*|*|*|o|*
  1 2 3 4 5 6 7 8

le f représente le fou et les o les mouvement possible
cependant sur cette board il peut il y avoir des obstacles qui peuvent bloqué les mouvement du fou
Code: Tout sélectionner
  1 2 3 4 5 6 7 8
8 *|*|*|o|*|*|*|*   pos: (6, 2)
7 o|*|o|*|*|*|*|*   fBRtoTL: 1
6 *|f|*|*|*|x|*|*   fTLtoBR: 2
5 o|*|o|*|*|*|*|*   fTRtoBL: 1
4 *|*|*|o|*|*|*|*   fBLtoTR: 2
3 *|*|*|*|x|*|*|*
2 *|*|*|*|*|*|*|*
1 *|*|*|*|*|*|*|*

ou x représente les obstacles
Pour l'instant je pense que le meilleur moyen pour moi de savoir si mes obstacles sont sur les diagonal de mon fou est de calculer l'equation de la droite (y = ax +b) et de verifier si les coordonnées de mes obstacle respect l'équation.
Pour calculer les 2 equations de droite je prend 2 point sur les diagonal de mon fou et respecte la formule a = (yb-ya)/(xb-xa) et grace à ce résultat trouve b.
Je peux donc savoir quand un obstacle touche est sur les diagonal.
Cependant puis-je calculer le nombre de mouvement qu'il met possible de faire sur cette diagonal quand il y a un obstacle ?



pascal16
Membre Légendaire
Messages: 6663
Enregistré le: 01 Mar 2017, 12:58
Localisation: Angoulème : Ville de la BD et du FFA. gare TGV

Re: Mouvement du fou echec et obstacle

par pascal16 » 05 Déc 2019, 21:05

vu qu'on travaille avec des entiers, on peut faire du récursif simple.

à partir de la position du fou.
4 boucles pour chacune de 4 direction (sens compris) possible.
pour la direction choisie :
regarder s'il y a un obstacle sur la case la plus proche
regarder s'il y a un obstacle sur la case suivante
( le bord de l'échiquier est un obstacle)

pour la case c'est
je pars de la position du fou
je rajoute 1 à x, je rajoute 1 à y
je vérifie que je suis toujours sur l'échiquier
...

boikl42
Messages: 3
Enregistré le: 05 Déc 2019, 19:15

Re: Mouvement du fou echec et obstacle

par boikl42 » 05 Déc 2019, 21:10

Mon but est de trouve une solution algorithmique qui s'execute en temps O(n) ou n est le nombre d'obstacle. Ce ne sera pas le cas avec une solution ou je dois pour chaque position de chaque diagonal verifier qu'un obstacle est présent le temps d'execution serait plutôt quelque chose comme O(m^n) ou m est le nombre de position possible et n le nombre d'obstacle.

pascal16
Membre Légendaire
Messages: 6663
Enregistré le: 01 Mar 2017, 12:58
Localisation: Angoulème : Ville de la BD et du FFA. gare TGV

Re: Mouvement du fou echec et obstacle

par pascal16 » 05 Déc 2019, 21:16

sur une grille 8x8, tu as au plus 14 positions à vérifier et plus il y a d'obstacles, moins il y a de vérifications.

boikl42
Messages: 3
Enregistré le: 05 Déc 2019, 19:15

Re: Mouvement du fou echec et obstacle

par boikl42 » 05 Déc 2019, 21:29

Dans mon cas il s'agit de gérer des cas ou les boards peuvent être de taille > 10 000, et même dans une petite le pire cas est le nombre de mouvement soit 14 et le nombre d'obstacle maximum sans être sur une diagonal soit 50. Donc mon nombre total d'iteration serait de O(14^50). Le pire cas dans un algorithme qui se base sur les obstacle sera O(50). Mon temps de calcul serait donc exponentiel avec une solution de ce type.

Avatar de l’utilisateur
fatal_error
Membre Légendaire
Messages: 6610
Enregistré le: 22 Nov 2007, 12:00

Re: Mouvement du fou echec et obstacle

par fatal_error » 05 Déc 2019, 23:08

pas trop sûr par rapport à tes calculs de complexité mais tu peux:
regarder quels obstacles sont sur la droite y=x ou y=-x
pour y = x
tu peux poser le vecteur v = (1;1)
tu regardes quels obstacles sont colinéaires à v (genre ils doivent satisfaire (f_x+kv_x, f_y+kc_y) = (f_x + k, f_y + k)
tu déduis k, pour les positifs tu prends le plus petit, pour les négatifs le plus grand

même idée pour y=-x
la vie est une fête :)

lyceen95
Membre Complexe
Messages: 2263
Enregistré le: 14 Juin 2019, 23:42

Re: Mouvement du fou echec et obstacle

par lyceen95 » 05 Déc 2019, 23:18

Tu as un tableau avec tous les obstacles : tableau de N1x2 entiers.
Tu as (Xf, Yf) les coordonnées de ton fou.

Tu peux créer facilement un tableau avec uniquement les obstacles qui sont sur les 2 diagonales ; ce sont les points (Xm,Ym) qui vérifient Xm-Ym=Xf-Yf, (équation de la 1ère diagonale) ou bien Xm+Ym=Xf+Yf (équation de la 2ème diagonale).
Tu peux aussi très facilement trouver l'obstacle le plus proche sur chacune des 4 demi-droites... c'est facile.

Ensuite, comme proposé par Pascal16, tu parcours les 4 demi-droites ... jusqu'à rencontrer soit un bord, soit l'obstacle le plus proche sur cette demi-droite. Et l'obstacle le plus proche sur cette demi-droite, on sait à l'avance où il est exactement.

LB2
Habitué(e)
Messages: 1504
Enregistré le: 05 Nov 2017, 16:32

Re: Mouvement du fou echec et obstacle

par LB2 » 05 Déc 2019, 23:30

Bonsoir,

je ne suis pas sûr non plus de ton calcul de complexité qui me parait fantaisiste. La méthode proposée me parait OK

lyceen95
Membre Complexe
Messages: 2263
Enregistré le: 14 Juin 2019, 23:42

Re: Mouvement du fou echec et obstacle

par lyceen95 » 05 Déc 2019, 23:41

Oui, même en prenant les pires décisions dans la programmation, le 14^50 est fantaisiste.

Avatar de l’utilisateur
fatal_error
Membre Légendaire
Messages: 6610
Enregistré le: 22 Nov 2007, 12:00

Re: Mouvement du fou echec et obstacle

par fatal_error » 06 Déc 2019, 16:07

un exemple appliquant l'idée que je proposais (qui se regroupe/est identique certainement avec les autres idées proposées)
https://jsfiddle.net/czqn2ufx/1/
la vie est une fête :)

LeJeu
Membre Irrationnel
Messages: 1142
Enregistré le: 24 Jan 2010, 21:52

Re: Mouvement du fou echec et obstacle

par LeJeu » 27 Jan 2020, 20:23

Bonsoir,

Je sais je n'ai pas été très rapide pour participer à ce fil...

Tout d'abord, bravo pour ce joli travail mis en ligne par Fatal-error , le coté dynamique / temps réel en jette un max.

Mais en y regardant de plus près, c'est à dire en bougeant le 'bishop' sur l'échiquier : de temps en temps la croix verte des déplacements n'est pas correcte. C'est troublant , car ça marche 'presque' !

Quelqu'un arriverait il à le voir ? et à trouver la ligne de code fautive ?

Le Jeu

Ps - on 'est bien d'accord, l'exemple est génial, juste codé très vite par Fatal

Avatar de l’utilisateur
fatal_error
Membre Légendaire
Messages: 6610
Enregistré le: 22 Nov 2007, 12:00

Re: Mouvement du fou echec et obstacle

par fatal_error » 27 Jan 2020, 20:33

slt Le Jeu,

j'avais trouvé l'erreur mais l'ai laissée en me demandant si quelqu'un regarderait...
De bon yeux tu as!

Il s'agissait de la ligne (qui est un vulgaire copié collé...)
Code: Tout sélectionner
        bl = Math.min(tl, -relx - 1) // devrait être min(bl, ...)

https://jsfiddle.net/b8Lf6o4v/
la vie est une fête :)

LeJeu
Membre Irrationnel
Messages: 1142
Enregistré le: 24 Jan 2010, 21:52

Re: Mouvement du fou echec et obstacle

par LeJeu » 27 Jan 2020, 20:52

Ah les "copie /colle" .. quel drame pour les développeurs ..

Et merci pour tout
Le Jeu

 

Retourner vers ⚔ Défis et énigmes

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 4 invités

Tu pars déja ?



Fais toi aider gratuitement sur Maths-forum !

Créé un compte en 1 minute et pose ta question dans le forum ;-)
Inscription gratuite

Identification

Pas encore inscrit ?

Ou identifiez-vous :

Inscription gratuite