Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.
La shoutbox n'est pas chargée par défaut pour des raisons de performances. Cliquez pour charger.

Forum Casio - Concours


Index du Forum » Concours » [Topique d'entraide] Le défi de Xuanwu
Hackcell En ligne Maître du Puzzle Points: 1531 Défis: 11 Message

[Topique d'entraide] Le défi de Xuanwu

Posté le 24/09/2020 18:57

Bonjours à toutes et à tous, et bienvenue sur le topique d'entraide pour le premier défi python du concours de rentrée 2020

Vous pouvez partager ici vos astuces, idées ou découverte, ou voir ce que les autres font. Rappelons tout de même que de poster directement des solutions est considéré comme de la triche et est donc interdit (du moins c'était le cas il y a deux ans et aucunes idée pur cette année )

Tout d'abord, le défi cette année semble être de guider à travers un labyrinthe une machine à coup de tourner à gauche/droite d'un angle θ et avancer. Pour avoir une participation valide, il faut compléter le labyrinthe, et pour gagner, faire ceci avec le minimum d'énergie/score (un peu de patience, j'y viens).

On a donc 3 fichiers à notre disposition:
- labytest.py qui sert à soumettre votre proposition
- polycalc.py qui permet d'uniformiser le dessin sur tous les modèles et floutant la limite entre la folie et le génie
- laby.py celui qui nous intéresse, contenant les fonctions de mouvement/calculs de score.

Maintenant que les banalités sont sous le tapis passons à la partie plus intéressante, celle ou je vous décortique le programme

Donc, il y a beaucoup de chose dans ce court fichier:
- De nombreuse fonction pour le hasard, elles servent à créer le labyrinthe afin qu'il soit généré procéduralement (mais comme tout le monde a la même seed minecraft, on a tous le même) pas grands chose à creuser de ce côté
- quelques fonctions de tracés, aucun commentaire.

Concentrons-nous à présent sur comment agir sur l'environnement:
- La foreuse est représentée par une liste de 7 nombres:
- X, Y, θ, une copie de X, une copie de Y, et score1, score2 et score3 (plus connues sous le nom state[i] dans le code)
- Les fonctions tourner vont changer θ du nombre de radian indiqué dans le sens horaire (droite) ou anti-horaire (gauche).
- La fonction avancer va effectuer des pas en avant de 0.25 (selon l'angle θ actuel).

Enfin le score:
- Le score final est calculé en faisant score1 moins la division euclidienne de score2 par deux plus le sinus de score3( score = scrore1 - score2//2 + sin(score3))
- Touner de θ augmente score1 par 5 +cout(θ) et de score3 de θ
- Avancer augmente score1 de 8+cout(l) et score3 de l
- Avancer augmente score2 de 1 par pas de 0.25, soit de 4*l au total (et donc diminue le score final de 2*l ramené à l'entier inférieur)
- Si vous rencontrez un mur, score1 augmente de 15 et la fonction s'arrête (ne vous donnant pas vos points dans score2)

La fonction cout est en fait la suivante:
def cout(a):
    return len(str(round(abs(x)/1.,5)

Donc dans l'ordre:
- abs met votre nombre a la valeur absolue
- /1. convertie ce dernier en nombre a virgule
- round ne garde que 5 chiffres après la virgule
- str transforme le tout en chaine de caractères
- len renvois la longueur de cette chaine de caractères

Ce que cela signifie, c'est que score1 augmentera du nombre de caractères dans a, mais:
- le potentiel signe moins est ignoré
- 1 est convertie en 1.0, donc niveau score c'est la même que 1.2
- les chiffres ne sont comptés que jusqu'à 5 place après la virgule

Enfin derniers détails:
- score2 ne peut pas être plus grand que 200.
- fix_angle(a) renvoi a

Et voilà, c'est tout pour moi, la stratégie semble donc de faire les plus grandes lignes droites possibles avec le minimum de virages.

Sur ce bonne chance et que la meilleure gagne ♥


Dark storm Hors ligne Labélisateur Points: 11641 Défis: 176 Message

Citer : Posté le 25/09/2020 23:48 | #


Je veux pas balancer, mais Pavel a fait un script qui aide grandement à la résolution du problème


Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Critor En ligne Administrateur Points: 2673 Défis: 18 Message

Citer : Posté le 26/09/2020 22:04 | #


Le problème de manque de fiabilité de la fonction cout() selon la plateforme d'exécution est normalement dès maintenant corrigé avec la v4 des scripts :
https://www.planet-casio.com/Fr/forums/topic16479-2-concours-de-rentree-2020-defi-python-de-xuanwu.html#178529

Sans pénaliser personne, bien au contraire.

LienAjouter une imageAjouter une vidéoAjouter un lien vers un profilAjouter du codeCiterAjouter un spoiler(texte affichable/masquable par un clic)Ajouter une barre de progressionItaliqueGrasSoulignéAfficher du texte barréCentréJustifiéPlus petitPlus grandPlus de smileys !
Cliquez pour épingler Cliquez pour détacher Cliquez pour fermer
Alignement de l'image: Redimensionnement de l'image (en pixel):
Afficher la liste des membres
:bow: :cool: :good: :love: ^^
:omg: :fusil: :aie: :argh: :mdr:
:boulet2: :thx: :champ: :whistle: :bounce:
valider
 :)  ;)  :D  :p
 :lol:  8)  :(  :@
 0_0  :oops:  :grr:  :E
 :O  :sry:  :mmm:  :waza:
 :'(  :here:  ^^  >:)

Σ π θ ± α β γ δ Δ σ λ
Veuillez donner la réponse en chiffre
Vous devez activer le Javascript dans votre navigateur pour pouvoir valider ce formulaire.

Si vous n'avez pas volontairement désactivé cette fonctionnalité de votre navigateur, il s'agit probablement d'un bug : contactez l'équipe de Planète Casio.

Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 218 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd