Testez votre force : la deuxième épreuve du triconcours !
Posté le 19/09/2018 21:57
Pour fêter la rentrée, Planète Casio et TI-Planet lancent le
triconcours de rentrée avec des participations tous modèles et de nombreux lots de tous les constructeurs à remporter !
La deuxième épreuve, dite de force, est officiellement lancée !
Consulter le tableau des scores
Comment participer ?
Cette épreuve se termine le 28 Octobre à 23h59 et consiste à
faire le maximum de bruit- euh, de lumière en Python. Tu peux participer en envoyant ton résultat à
info@tiplanet.org. N'hésite pas à envoyer quelque chose d'imparfait, tu pourras encore envoyer mieux plus tard !
Pour programmer sur Python, les possibilités sont vastes : Graph 90+E, Numworks, KhiCAS, et différentes émulateurs. Si vous n'avez aucune calculatrice appropriée, utilisez l'émulateur NumWorks gratuit en ligne !
•
Script pour Graph 90+E (
version KhiCAS)
•
Script pour Numworks (
lien vers l'émulateur)
Comme la dernière fois, Critor a donné tous les détails nécessaires et plus sur son post sur TI-Planet, notamment les lots à gagner. N'hésite pas à aller le lire aussi :
Triconcours de rentrée 2018 - défi de Force
Lots à gagner
Il n'y a pas moins de
10 lots dans l'épreuve de force !
•
2 lots Émeraude avec 1 Graph 90+E, des goodies Casio et des goodies TI-Planète-Casio
•
2 lots Jade avec 1 sac Casio, des goodies Casio et des goodies TI-Planète-Casio
•
1 lot Ambre avec 1 NumWorks, 1 poster NumWorks et des goodies TI-Planète-Casio
•
1 lot Aragonite avec 1 NumWorks, 1 câble µUSB et des goodies Numworks et TI-Plnaète Casio
•
2 lots Onyx avec 1 HP Prime (+ application au choix), des goodies HP et TI-Planète-Casio
•
2 lots Hématite avec 1 application HP Prime et des goodies HP et TI-Planète-Casio
Les goodies sont très variés, la compilation de photos sur TI-Planet les liste tous !
Évaluation des programmes
Tu as
252 lampes contrôlées par 30 interrupteurs progressifs, ce qui signifie que chaque interrupteur peut être de complètement éteint (0) à complètement allumé (1) en passant par toutes les valeurs intermédiaires (0.5 soit à moitié allumé, 0.1 soit presque éteint...).
Selon la façon dont tu positionnes les interrupteurs, les lampes s'éclairent plus ou moins fort, et ton but est
d'envoyer un max de lumière pour faire marcher la boule disco ! Attention à ne pas consommer, et surtout à ne pas gaspiller trop d'électricité...
Le lien entre les interrupteurs et les ampoules est fait par le programme d'évaluation qui calcule un score en échange de la position de toutes les interrupteurs progressifs. À toi de comprendre comment il marche, et comment le tirer à ton avantage !
Le programme donne en plus du score un code de 30 caractères qui prouve que tu as bien obtenu le score annoncé. C'est ça que tu dois envoyer à
info@tiplanet.org pour participer !
Sur Graph 90+E avec KhiCAS
Sur NumWorks
Dans cette épreuve difficile vaincront les plus forts et les plus tenaces. En cas de doute, pose une question en commentaire. Et que la triforce soit avec toi !
Citer : Posté le 19/09/2018 22:21 | #
J'ai rajouté le lien de l'article, merci.
https://tiplanet.org/forum/viewtopic.php?t=21853&p=235402#p235402
Citer : Posté le 20/09/2018 06:26 | #
Si vous connaissez Illumination, ça vous rappelera clairement quelque chose ! Et quelques pistes...
Citer : Posté le 20/09/2018 07:32 | #
Ouo mais on code ça comme dans les scripts: des zeros ou des valeurs entre 0 et 1 comme ça, sans fonction...?
-Planétarium 2
Citer : Posté le 20/09/2018 07:50 | #
Décortiquer le script pour le comprendre fait partie de l'épreuve !
Citer : Posté le 20/09/2018 13:14 | #
Déjà deux participants au coude à coude !
https://tiplanet.org/triconcours.php
Citer : Posté le 20/09/2018 13:22 | #
J'ai trouvé une solution à 214,9.. entre temps, j'enverrai ma nouvelle proposition demain (ou une autre, j'ai une petite idée d'algo à faire tourner dans la nuit pour améliorer mon résultat )
Citer : Posté le 20/09/2018 17:18 | #
Ok, bien joué !
Les scripts Python fournis sont différents, essentiellement pour :
- l'affichage, vu que les machines ciblées ont des écrans et polices de tailles différentes
- le renvoi des score et code, vu que leurs consoles ont également des comportements différents
Sur ce dernier point, par exemple Khicas ne permet pas de remonter dans l'historique des sorties, uniquement dans l'historique des entrées.
Il est donc impossible de copier autre chose que la saisie ou le dernier résultat, d'où un return du code en dernière ligne, et un affichage prévu pour rentrer sur un seul écran.
Sur HP Prime, les sorties sont effectués sur un écran distinct de celui de la console, et où on ne peut pas faire de copie partielle.
Sur Casio Graph 90+E, la console Micropython ne gère pas le copier/coller.
D'où l'affichage du code sur 2 lignes pour pouvoir à défaut le prendre en photo ou en faire une unique capture d'écran.
Quand vous lisez dans ces scripts des choses qui vous ont l'air originales/compliquées, cela signifie que j'ai rencontré une difficulté sur au moins une des machines, et ai donc cherché à la contourner.
Par soucis d'égalité, les différences entre scripts ont été gommées au maximum, ils utilisent donc tous les contournements développés même lorsque non nécessaire.
Je crois que deux seules différences sont encore visibles.
Dans la version Khicas :
Parce que Khicas ne définit pas les constantes Python True/False.
Et la définition d'une fonction bitand() sauf sur HP Prime et Khicas.
C'est parce que les HP Prime et Khicas ne gèrent pas les opérateurs Python bit à bit, notamment &, mais ont la fonction bitand() pour le remplacer.
Par homogénéité du code, un fonction homonyme y faisant appel a été créée pour les autres modèles.
D'autres révélations sur d'autres différences entre nos "Pythonnettes" cette fois-ci non remarquables par comparaison des scripts sont à venir.
Ajouté le 20/09/2018 à 21:24 :
Pourquoi donc 252 lampes et avec certains scripts des affichages bizarres de 6/8/9 ?
Cela vient de la Casio Graph 90+E et de son énorme police qui est ici notre facteur limitant, le problème se devant d'être le même sur tous les modèles :
Ne rentrent que 21 colonnes et 7 lignes.
On voulait que l'affichage du projecteur puisse rentrer sur un même écran.
Si un défilement vertical pouvait être envisagé, le défilement horizontal qui était au mieux réalisable ligne à ligne était exclu.
D'où déjà une limitation à 21 lampes par ligne.
Ensuite, 7 lignes ce n'était franchement pas beaucoup face aux capacités d'affichage très supérieures des autres modèles.
D'où l'idée de représenter 2 lignes sur une seule :
- 9 = lampe du haut allumée
- 6 = lampe du bas allumée
- 8 = 2 lampes allumées[/list]
La NumWorks offrant quant à elle une contrainte de 12 lignes, nous avons donc opté finalement pour 6 double-lignes, soit 12 lignes :
21x12=252, élémentaire mon cher Watson !
Sur Khicas on a 10 lignes, d'où déjà la reprise d'un affichage en 689 :
En prime il a fallu ruser, puisqu'il y a impossibilité de remonter dans l'historique.
Tout devait donc rentrer sur le même écran, le projecteur ainsi que toutes les infos, avec en prime la dernière ligne réservée à la saisie.
Sur HP Prime, moins de contraintes d'affichage. L'embêtement principal fut la police qui n'est pas à largeur fixe :
La calculatrice offre 3 tailles de police : petite/moyenne/grande, avec la taille moyenne par défaut.
Ci-dessus l'affichage a été testé en grande police, et rentre donc dans tous les cas.
Ajouté le 27/09/2018 à 21:58 :
Donc pourquoi est-ce que dans la fonction pot(k,v,d) j'utilise des fonctions dédiées setll(ll) / setls(ls) / setst(st) / setcode(v) pour modifier les variables globales ll / ls / st / code ?
global st
st[k]=v
def setll(k,v):
global ll
ll[k]=v
def setls(k,v):
global ls
ls[k]=v
def setcode(v):
global code
code=v
if k>=0 and k<st[1]:
v=f2mf(max(min(v,1),0))
setst(2,st[2]+v-ls[k])
for l in range(st[0]):
if bitand(sla[l],2**k):
ol=ll[l]
setll(l,ll[l]+v-ls[k])
setst(3,st[3]+((f2mf(1)<=ll[l]<=f2mf(2)) and ((ol<f2mf(1)) or (ol>f2mf(2))))-(((ll[l]<f2mf(1)) or (ll[l]>f2mf(2))) and (f2mf(1)<=ol<=f2mf(2))))
setst(4,st[4]+max(ll[l]-f2mf(1),0)-max(ol-f2mf(1),0))
setst(5,st[5]+ll[l]*(ll[l]<f2mf(1))-ol*(ol<f2mf(1)))
setst(6,st[6]+((f2mf(2)<ll[l]) and (ol<=f2mf(2)))-((ll[l]<=f2mf(2)) and (ol>f2mf(2))))
setls(k,v)
s=float(st[3]-mf2f(st[2]+st[6]/2+st[4]/5+st[5]/10))
c=smf(ls)
setcode(c)
ss=pst(s,d)
if d:
print("Code info@tiplanet.org (var CAS 'code') :")
print(c+" ")
return {c,s}
Ai-je perdu la raison ? Est-ce que je n'ai rien compris à l'instruction global et par extension au Python ? Est-ce que je cherche à vous embrouiller ? Ni l'un ni l'autre.
Une fois de plus, ce code commun à toutes les déclinaisons du script est là pour contourner une anomalie, ici sur HP Prime et peut-être Khicas au code voisin.
Modifions la fonction pot(k,v,d) pour ne plus utiliser ces fonctions d'affectations globales externes :
global ll,ls,st,code
if k>=0 and k<st[1]:
v=f2mf(max(min(v,1),0))
st[2]=st[2]+v-ls[k]
for l in range(st[0]):
if bitand(sla[l],2**k):
ol=ll[l]
ll[l]=ll[l]+v-ls[k]
st[3]=st[3]+((f2mf(1)<=ll[l]<=f2mf(2)) and ((ol<f2mf(1)) or (ol>f2mf(2))))-(((ll[l]<f2mf(1)) or (ll[l]>f2mf(2))) and (f2mf(1)<=ol<=f2mf(2)))
st[4]=st[4]+max(ll[l]-f2mf(1),0)-max(ol-f2mf(1),0)
st[5]=st[5]+ll[l]*(ll[l]<f2mf(1))-ol*(ol<f2mf(1))
st[6]=st[6]+((f2mf(2)<ll[l]) and (ol<=f2mf(2)))-((ll[l]<=f2mf(2)) and (ol>f2mf(2))))
ls[k]=v
s=float(st[3]-mf2f(st[2]+st[6]/2+st[4]/5+st[5]/10))
c=smf(ls)
code=c
ss=pst(s,d)
if d:
print("Code info@tiplanet.org (var CAS 'code') :")
print(c+" ")
return {c,s}
Et bien voilà, bien joué, maintenant ça ne fonctionne plus du tout sur HP Pime, tout appel à pot() renvoyant une erreur.
Utilisons le débogueur pas à pas pour comprendre ce qui se passe dans cette fonction, via un appel pot(3,1,True).
Nous arrivons donc à l'exécution la nouvelle ligne global avec cet environnement :
Existent donc les variables locales définies par les paramètres d'appel :
k=3
v=1
d=True
Passons à la ligne suivante en exécutant la ligne global, grâce au bouton tactile Palier :
Et bien voilà, gros problème, les variables locales passées en paramètres k / v / d n'existent plus. Leurs valeurs ont été perdues.
Toute référence à ces noms de variables dans la suite du script sera évaluée avec la valeur de la variable globale de même nom si existante. A défaut, l'évaluation de k par exemple retournera l'expression 'k'.
Bref, l'exécution du reste du script va ou faire n'importe quoi, ou retourner une erreur
C'est toutefois un bug bien sournois, puisque bizarrement il ne se produit pas avec les fonctions plus simples setll(ll) / setls(ls) / setst(st) / setcode(c), qui de même commencent par une instruction global dans le contexte de variables locales passées en paramètre.
Comme quoi mine de rien, organiser un concours équitable ouvert à différents modèles/famille de calculatrices, ce n'est pas chose de tout repos. Nous avons eu plein de difficultés à traiter; littéralement des mois de préparation.
Ajouté le 03/10/2018 à 12:48 :
Le participant n°21 progresse jusqu'à 206 points et quelques, passant maintenant à le 8ème place !
https://tiplanet.org/triconcours.php
Il faut dire que le TOP 10 est encore très accessible sans mettre en oeuvre de méthode de recherche bien poussée, le pifomètre peut suffire.
Ajouté le 07/10/2018 à 13:28 :
Les 4 calculatrices HP viennent d'être livrées ce vendredi, en provenance d'Allemagne.
Vous êtes gâtés bande de petits veinards, ce sont les nouvelles HP Prime G2-D aux spécifications astronomiques encore indisponibles en France !
De façon rétroactive, jusqu'à 2 HP Prime G2 sont donc proposées au choix des gagnants dès ce 2ème défi.
Citer : Posté le 07/10/2018 20:54 | #
Slt,il est dit d'utiliser la fonction pot (n,v) avec n le numero de potentiometre (1~30) et v la valeur du potentiometre, mais je ne vois pas du tout comment la mette en oeuvre dans le script: faut-il la declarer, doit-on afficher les 30 potentiometres et leurs lumieres, je n'assimile pas trop les imges avec les 6, 8, 9 espacés ou pas... bref, c pas clair.. Un coup de main svp ?
-Planétarium 2
Citer : Posté le 07/10/2018 20:59 | #
Yup ! En fait les 6/8/9 servent à dire quelles lampes sont amulées, si tu regardes sur la Numworks c'est juste des ronds quand c'est allumé et rien quand c'est éteint :
Il y a un caractère par ampoule, ça te dit donc quelles lampes tu as allumé.
Seulement sur Grpah 90, comme l'a expliqué Critor, il n'y a pas assez de place pour toutes les afficher à l'écran ! Il y a donc un "trick" : on met deux lignes par ligne. Le caractère 8 représente deux lampes allumées (une en haut et une en bas), le 6 indique une lampe allumée en bas et une lampe éteinte en haut ; le 9, c'est l'inverse.
C'est juste pour te montrer ton score.
Maintenant tu as des potentiomètres, chaque potentiomètre est relié à plusieurs ampoules, mais pour l'instant tu ne sais pas lesquelles... donc ce que tu peux faire c'est pousser le potentiomètre et regarder quelle lampe s'allume ou s'éteint.
pot(10, 0.5) pousse le potentiomètre à la moitié. Ça envoie 0.5 unité de courant dans toutes les ampoules qui sont liées au potentiomètre 10. Une ampoule s'allume si elle reçoit entre 1 et 2 unités de courant et grille si elle en reçoit plus de 2. Tu dois donc pousser les potentiomètres pour que chaque ampoule reçoive juste la quantité de courant qu'il faut !
Citer : Posté le 07/10/2018 21:03 | #
Ok c plus clair. Mais (et la je ne te demande pas de tout donner tout cuit, bien au contraire) dans le script tu mets tes 30 fonctions pot (n,v) à la suite dans ton prog ?
-Planétarium 2
Citer : Posté le 07/10/2018 21:11 | #
Un truc comme ça, ouais. Tu prends le script de Critor et tu rajoutes des appels à pot() à la fin. Typiquement il y en aura 30 si tu touches à tout.
Citer : Posté le 07/10/2018 21:14 | #
Je peut pas mettre juste le 30 pot () dans un script vide ?
-Planétarium 2
Citer : Posté le 07/10/2018 21:57 | #
Tu peux aussi taper tes commandes pot() dans la console Python, après avoir lancé le script.
Citer : Posté le 08/10/2018 07:32 | #
Ok super. Le script se trouve bien sur tiplanet ? Il me semble que oui...
-Planétarium 2
Citer : Posté le 08/10/2018 07:34 | #
Disperseur → Premier post du topic.
Citer : Posté le 08/10/2018 07:42 | #
Ah oui effectivement merci
Ajouté le 09/10/2018 à 21:15 :
Ah... perso j'ai fait une trajectoire qui me permet de ramasser toutes les parties et je me suis arrêter sur la dernière mais je fais 336...? Dans le classement je vois que certains ont fait beaucoup plus...est ce que ça veut dire que le classement depends pas que du fait que l'on ait ramassé toutes les parties... faut il faire le plus long chemin...?
-Planétarium 2
Citer : Posté le 09/10/2018 21:39 | #
Tu n'es pas obligé de tout ramasser.
Et vu que ton score baisse quand tu te déplaces, mieux vaut faire au plus court il me semble.
Citer : Posté le 10/10/2018 06:53 | #
Donc vaut mieux faire le plis gros score sans tout ramasser..
-Planétarium 2
Citer : Posté le 23/10/2018 12:50 | #
Peut-on trouver un script pour les TI Nspire ?
J'aimerais participer mais pour le python je n'ai que la Nspire or je n'ai trouvé nulle part de code pour pouvoir participer avec cette TI...
Merci d'avance.
Citer : Posté le 23/10/2018 14:58 | #
Casio nous a gâtés aux journées APMEP !
Chaque lot Casio a maintenant 1 superbe poster au choix !
Voir l'annonce du défi sur TI-Planet pour le détail des dimensions.
Ajouté le 23/10/2018 à 20:27 :
Autre fleur de Casio, oui ça prend du temps à trier tellement ils nous ont fait de cadeaux pour vous, pour les 2 lots Jade il y aura le choix entre non pas 3 mais 5 sacs Casio différents !