Forums Casio - Actualités

Index du Forum > Actualités > Testez votre force : la deuxième épreuve du triconcours !
Lephenixnoir
En ligne
Administrateur
Points: 13188
Défis: 136
Message
Posté le 19/09/2018 21:57

Testez votre force : la deuxième épreuve du triconcours ! :

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 !




Pages: 1, 2 | Suivante

Critor
En ligne
Administrateur
Points: 982
Défis: 0
Message
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
Lephenixnoir
En ligne
Administrateur
Points: 13188
Défis: 136
Message
Citer : Posté le 20/09/2018 06:26 | #
Si vous connaissez Illumination, ça vous rappelera clairement quelque chose ! Et quelques pistes...
----------------------------------
Rise.
Disperseur
Hors ligne
Membre
Points: 890
Défis: 0
Message
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...?
----------------------------------
Lephenixnoir
En ligne
Administrateur
Points: 13188
Défis: 136
Message
Citer : Posté le 20/09/2018 07:50 | #
Décortiquer le script pour le comprendre fait partie de l'épreuve !
----------------------------------
Rise.
Critor
En ligne
Administrateur
Points: 982
Défis: 0
Message
Citer : Posté le 20/09/2018 13:14 | #
Déjà deux participants au coude à coude !
https://tiplanet.org/triconcours.php
Hackcell
Hors ligne
Membre
Points: 898
Défis: 6
Message
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 )
----------------------------------
I usually spend meow time cosplaying as a diligent student...
So it can get pretty stressful.
That's exactly why PC is such a happy place for meow to be ⭐
Critor
En ligne
Administrateur
Points: 982
Défis: 0
Message
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 :
True=true

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 ?
def setst(k,v):
  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

def pot(k,v=1,d=True):
  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 :
def pot(k,v=1,d=True):
  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.
Disperseur
Hors ligne
Membre
Points: 890
Défis: 0
Message
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 ?
----------------------------------
Lephenixnoir
En ligne
Administrateur
Points: 13188
Défis: 136
Message
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 !
----------------------------------
Rise.
Disperseur
Hors ligne
Membre
Points: 890
Défis: 0
Message
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 ?
----------------------------------
Lephenixnoir
En ligne
Administrateur
Points: 13188
Défis: 136
Message
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.
----------------------------------
Rise.
Disperseur
Hors ligne
Membre
Points: 890
Défis: 0
Message
Citer : Posté le 07/10/2018 21:14 | #
Je peut pas mettre juste le 30 pot () dans un script vide ?
----------------------------------
Critor
En ligne
Administrateur
Points: 982
Défis: 0
Message
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.
Disperseur
Hors ligne
Membre
Points: 890
Défis: 0
Message
Citer : Posté le 08/10/2018 07:32 | #
Ok super. Le script se trouve bien sur tiplanet ? Il me semble que oui...
----------------------------------
Kikoodx
Hors ligne
Membre
Points: 806
Défis: 7
Message
Citer : Posté le 08/10/2018 07:34 | #
Disperseur → Premier post du topic.
----------------------------------
Lbl 1
Goto 1


Une boucle optimisée
Disperseur
Hors ligne
Membre
Points: 890
Défis: 0
Message
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...?
----------------------------------
Critor
En ligne
Administrateur
Points: 982
Défis: 0
Message
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.
Disperseur
Hors ligne
Membre
Points: 890
Défis: 0
Message
Citer : Posté le 10/10/2018 06:53 | #
Donc vaut mieux faire le plis gros score sans tout ramasser..
----------------------------------
Shadow15510
Hors ligne
Administrateur
Points: 2205
Défis: 15
Message
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.
----------------------------------
"Ce n'est pas parce que les chose sont dures que nous ne les faisons pas, c'est parce que nous ne les faisons pas qu'elles sont dures." Sénèque

Moral
   90%
Critor
En ligne
Administrateur
Points: 982
Défis: 0
Message
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 !

Pages: 1, 2 | Suivante

Index du Forum > Actualités > Testez votre force : la deuxième épreuve du triconcours !

Planète Casio v42 © créé par Neuronix et Muelsaco 2004 - 2018 | Il y a 44 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire indépendant, géré bénévolement et n'est donc pas affilié à Casio | Toute reproduction de Planète Casio, même partielle, est interdite
Les fichiers, programmes et autres publications présents sur Planète Casio restent la propriété de leurs auteurs respectifs et peuvent être soumis à des licences ou des copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd