π
<-
Chat plein-écran
[^]

TI-z80 Teclada, nouveau monde perso Oiram CE

Nouveau messagede critor » 01 Déc 2018, 22:21

7698Pour te détendre en ce nouveau week-end jaune,
Incognitonomous
te sort
Teclada
, son monde perso pour
Oiram CE
, le moteur de jeu
Mario-like
pour ta
TI-83 Premium CE
? :)

Il s'agit d'un monde disposant à ce jour de 5 niveaux, le 5ème étant inachevé.

Pour fonctionner correctement,
Oiram CE
a obligatoirement besoin des bibliothèques C téléchargeables ci-dessous. Mais rien de bien compliqué, il suffit juste de les transférer.


Téléchargements
:
Lien vers le sujet sur le forum: Teclada, nouveau monde perso Oiram CE (Commentaires: 6)

TI-z80 Jour 1 : Le Secret de l'Avent 2018

Nouveau messagede critor » 01 Déc 2018, 10:53

10048Ce matin, ma
TI-83 Premium CE
m'a apporté un chocolat avec un affichage bizarre...
TI-83 Premium CE a écrit:II

Simplifie !
Lien vers le sujet sur le forum: Jour 1 : Le Secret de l'Avent 2018 (Commentaires: 3)

Divers Triconcours de rentrée 2018 - résultats défi de Courage

Nouveau messagede critor » 28 Nov 2018, 21:26

Voici les résultats du défi de Courage de notre Triconcours de rentrée 2018. Vous avez été pas moins de 17 à produire 57 participations.

Il s'agissait de chevaucher le nuage Kinto-un pour aller chercher les 8 fragments de la
Triforce du Courage
, bien évidemment le plus rapidement possible. Pour cela, un programme était fourni dans le langage de programmation historique de chaque modèle de calculatrice graphique conforme 2019 ainsi que les modèles antérieurs compatibles. Il permettait de piloter le nuage à l'aide de 3 touches fléchées, codant une liste de déplacements à fournir et auto-évaluant le score.

et sa
TI-83 Premium CE
arrivent
16ème
avec
3842
points.


/ se classe quant à elle
15ème
avec
3885
points.


Et maintenant les gagnants :
doté de sa
HP Prime
termine
14ème
avec
4556
points.
@nicodu95, comment as-tu fait ? ;)

nicodu95 a écrit:J'ai utilisé l'émulateur HP Prime. Armé de mon clavier et des flèches et après une bonne dose d'essais (et de re-essais) j'ai obtenu un score de 2800. J'ai ensuite tenté de comprendre un peu le fonctionnement de la "spirale", je suis arrivé à 4200 points. Puis j'ai copié la liste kinto pour pouvoir la modifier (et la sauvegarder), j'y ai rajouté quelques lignes de nombres avec un peu de raisonnement, 4555 points. Mais il m'a fallu surtout de la persévérance (et du temps).


aidé de sa
Casio Graph 35+E
prend la
13ème
place avec
7721
points.
@Disperseur, comment as-tu fait ? ;)

Disperseur a écrit:voila la petite explication de la maniere dont j'ai realise mon score (aussi petit soit-il):

Avant tout, sachez que j'ai cherché la solution vers le debut de l'epreuve. Le dernier envoi que j-ai effectué s'est fait la fin de la troisième ou quatrième semaine.
Au debut j'ai été un peut au hasard dans la liste 6. Puis j'ai fait une capture de l'ecran avec seulement les 8 pts et je l'ai imprimée en plusieurs exemplaires pour tester au crayon les chemins possibles. Puis au fur et à mesure que j'essayait des chemins je suis tombé sur une bonne methode (apres avoir fait un tas de tests pour comprendre comment le nuage se déplaçait aussi) qui consiste à tourner en mettant des "0" dans la liste 6 (ce qui ne me fait pas perdre de pts, eh oui :E )pour "viser" les pts et aller les chercher avec une grande valeur type "1" et en revenant à chaque fois en "0". Les trois derniers points, je les ais attrapés en tournant. C'est cette solution qui s'est avérée être la meilleure que j'etais capable de fournir.
Voila ! ;)


armé de sa
Casio Graph 35+E
décroche la
12ème
place avec
7746
points.
@Alexot, comment as-tu fait ? ;)

Alexot a écrit:La méthode que j'ai utilisé pour obtenir mon score est assez simple : j'ai essayé de comprendre comment fonctionnait le programme en expérimentant dans l'option "Manuel". J'en ai déduit une interprétation de ce qu'il se passait quand on appuyais sur les différentes touches: le point qu'on contrôle fonctionne un peu comme une fusée attirée par une sorte de gravité vers le centre de l'écran, et pouvant se propulser vers l'avant(par "vers l'avant", je veux dire vers la direction dans laquelle elle va déjà). Appuyer sur gauche baisse l'intensité des propulseurs, droite augmente cette intensité, et appuyer sur gauche, droite, ou haut fait avancer plus ou moins la fusée selon l'intensité des propulseurs, et attire un peu la fusée vers le centre. En regardant la liste 6 générée, les nombres contenus dans celle-ci pourraient correspondre à l'intensité des propulseurs. Même si je doute que le programme fonctionne comme ça, et que c'est pas très rigoureux, en ayant en tête ce fonctionnement, on peut plus ou moins arriver à contrôler kinto1.
Puis j'ai un peu tatonné pour essayer d'ajuster ma trajectoire et d'atteindre tous les fragments.


avec sa fidèle
Casio Graph 35+E
termine
11ème
avec
7794
points.
@Massena, comment as-tu fait ? ;)

Massena a écrit:Pareil que Shadow. :D

Je pense connaître enfin ce que c'est le karma. Le 4 Novembre, j'ai voulu ninja ma participation à 8500 pts. Juste pour créer un effet de surprise x) Mais je m'aperçois le lendemain que mon mail est envoyé à... Moi même. Seum.

https://www.planet-casio.com/Fr/forums/topic15439-1-Triconcours-et-l-epreuve-de-courage.html#159801


sur
HP Prime
se classe
10ème
après avoir atteint
8443
points.
@eried, comment as-tu fait ? ;)

eried a écrit:The description talks about
our hero
in a cloud having to visit spots in a map keeping the score as maximum possible. At first, it was difficult to understand, but you basically have a polar function that you modify with parameters and you have to go between specific points while completing the route.

I started analyzing the positions of the layout with a
Travelling Sales man Problem solver
.

But, then you have to restrict your solution to what is possible. Playing the game goes like this:

  1. Open the app
  2. Press Symb and enter a list
  3. See the updated map and score
  4. Press Symb again and modify the list
  5. Go to step 3
Some of the steps are quite slow, using the Calculator editor for lists is a pain, the brackets try to be smart, you have to copy the old list and change the ending of it to try different outcomes, etc.

So what was my solution this time?


A modified version of PrimeMon that also executed the code after you saved it in the HP Connectivity Kit. So you could have the list you were trying to edit and every time you hit Save, the HP Prime Virtual Calculator displayed the results instantly.

PrimeMon is a little tool that I wrote years ago, after PrimeComm (a much more complete toolset for the HP Prime) stopped working, that allows you to interface with the Virtual Prime for checking if you have syntax errors easily. This just exists because the HP Connectivity Kit editor is very primitive and does not check anything.


Using this little tool I was able to have a pleasant puzzle-like experience while watching a movie.

My score was again really poor, #10. But again, I had a lot of fun!

If I had to do it again, I would have coded a small routine to solve it in the calculator itself. That new modified app would wait for a screen tap and try to add elements (i.e. testing a range from -10 to 10) to the list keeping the distance as the minimum possible and stopping when is in radius of the tapped point.

https://erwin.ried.cl/post/180137142402/a-cool-calculator-challenge-triconcours-universel


Jean B.
a travaillé quant à lui sur
TI-83 Premium CE
. Il avait au départ exploité un bug présent sur certaines version du programme, en fournissant une liste complexe qui permettait de se téléporter directement d'un fragment à un autre. Malheureusement, le bug en question n'était pas présent sur la version
TI-Nspire
, et nous ne pouvions donc équitablement accepter cette astuce. Les programmes de participation concernés ont depuis été corrigés.

Il trône donc à la
9ème
place avec
8793
points pour une liste plus conventionnelle.
@Jean, comment as-tu fait ? ;)

Jean B. a écrit:A force de petits tests manuels en modifiant KINTO, j'ai remarqué, entre autres, que le tracé forme globalement une spirale allant dans le sens inverse de celui des aiguilles d'une montre. De là on peut en déduire le chemin optimal, alors que cela paraît contre-intuitif au début : comme vous le voyez sur l'image de ma participation, il faut faire un grand trait au début faisant beaucoup diminuer le score.


Astrostellar
toujours sur
TI-83 Premium CE
décroche la
8ème
place avec ses
8804
points.
@Astrostellar, comment as-tu fait ? ;)

Astrostellar a écrit:J'avais tout d'abord compris qu'entre chaque valeur de ma liste, je n'avais le droit que de rajouter ± 0.01, ou alors de ne pas changer sa valeur... J'ai donc envoyé une première participation avec cette contrainte à 6614 points.
Après avoir compris que je pouvais mettre les valeurs que je souhaitais, j'ai repris ma candidature en faisant passer mon chemin par un point qui me faisait avant faire un grand détour. J'ai envoyé cette participation et j'ai eu 7718 points.
Puis j'ai re-réfléchi en cherchant le chemin le plus court permettant de relier les points dans le sens inverse des aiguilles d'une montre. J'ai trouvé le chemin qu'on suivi une grande partie des autres participants. J'ai donc envoyé une dernière participation en suivant ce chemin à 8804.3258 points.
Je me doutais qu'il y avait un "truc" pour gagner encore plus de points, vu la différence entre les 4 premiers participants et les autres, mais je n'ai pas trouvé ce que c'était (en regardant à l'intérieur du programme et en voyant des e^i, j'ai pris peur et n'ai pas compris le système de points ;) ).
Les valeurs que j'ai mises dans ma liste, je les ai trouvées en tâtonnant : je rajoutais une dizaine de valeurs, je regardais ce que ça traçait, je modifiais ensuite certaines valeurs et je passais aux valeurs suivantes...


/ a pour sa part travaillé sur
Casio Graph 35+E
. Il a été le premier à exploiter la faille des listes complexes permettant le
déplacement instantané
d'un fragment à un autre.

Il est certes aujourd'hui administrateur de
Planète Casio
, mais seulement depuis ce 13 novembre dernier soit bien après la date limite de participation, et n'a bien évidemment bénéficié d'aucune information privilégiée, seules les administrateurs en poste ayant accès aux éléments en cours de préparation pour les concours.

Il s'accapare la
7ème
place à
8972
points avec une liste cette fois-ci bien réelle.
@Shadow15510, comment as-tu fait ? ;)

Shadow15510 a écrit:rectifie, je suis arrivé à 9500 mais aujourd'hui à 10h30... :lol:
Pour moi ma technique est je pense la plus longue et la moins rentable : tu entres un nombre tu regarde ce qu'il se passe... tu entre un autre nombres tu vois comment ça bouge et avec ça tu essaye de relier les 8 points sans histoire en optimisant les approches pour taper au coeur des ronds avec une précision au centième... ^^ Les optimisation m'on fait gagner presque 200 points mais je reste loin derrière avec mon 8900... :'(

https://www.planet-casio.com/Fr/forums/topic15439-1-Triconcours-et-l-epreuve-de-courage.html#159731


/ à nouveau sur
Casio Graph 35+E
se classe
6ème
avec ses
9133
points.
@NeOtuX, comment as-tu fait ? ;)

NeOtuX a écrit:Ce coup-ci je n'ai pas fait dans la finesse : j'ai repris l'algorithme génétique du défi force, remplacé la partie "problème" par celle des Dragon Balls et laissé tourné ce soir. Théoriquement ça ne devait pas du tout fonctionner puisque ce n'est vraiment pas du tout adapté comme technique (Nombre de gènes inconnu, le "croisement" n'a aucun sens, un individu peut-être meilleur si on lui enlève des gènes etc...). Mais comme c'est une méthode stochastique et que j'avais un trèfle à quatre feuilles sous le coude, à presque minuit j'avais dépassé les 9000 pts.

C'était un super défi encore, j'ai hâte d'avoir les explications de chacun. Merci à tous, organisateurs et participants ! :)

Je joins à nouveau mon code commenté, si quelqu'un a des remarques, qu'il n'hésite pas ! En particulier, j’aimerais comprendre comment j'ai réussi à trouver un bon score alors que sur le papier ça ne devait pas fonctionner (juste de la chance ?)

Fichier joint
:
https://tiplanet.org/forum/download/file.php?id=4266

https://tiplanet.org/forum/viewtopic.php?f=49&t=21886&start=100#p236505


/ cette fois-ci sur
Casio Graph 90+E
prend la
5ème
place après avoir culminé à
9431
points.
@Sentaro21, comment as-tu fait ? ;)

Sentaro21 a écrit:I did not completely understand the rule. :sry:

I noticed 1500 points of the bonus by chance. ;)
I understood that 1500*9=13500 points is maximam and the point given up is proportional to the length of the course.
I made trial and error to be able to link each cloud in the shortest.

However I thought that the movement every step had only 0 or +/-0.01. 0_0
I only made trial and error.
So,
I'm sorry. I did not have any high solving method. :sry:


BIDE is very convenient to watch a basic program. :D
Thanks very much. :D

https://www.planet-casio.com/Fr/forums/topic15439-1-Triconcours-et-l-epreuve-de-courage.html#159771


et sa fidèle
TI-83 Premium CE
terminent
4ème
avec leurs
10317
points.
@Ruadh, comment as-tu fait ? ;)

Ruadh a écrit:Ma méthode a été assez simple, j'ai utilisé un bruteforce pour relier les centres de chaque cercle entre eux dans le sens trigonométrique en un nombre d'étapes que je faisais varier de manière à trouver le chemin qui minimisait la distance parcourue. Cette méthode ne donne pas de solution optimale, les participants classés devant moi ayant trouvé une trajectoire que je n'aurais pas pu trouver avec cette méthode, de plus, il y a certains cas où on entre dans le cercle avant de pouvoir atteindre le centre, ce qui n'attribue pas le maximum de points, mais le score final est tout de même assez satisfaisant.


/ avait en dernier proposé une liste à plus de 30000 éléments à 10394 points selon lui, mais elle n'était testable sur aucune calculatrice, déclenchant une erreur de mémoire même sur les modèles haut de gamme, liste qui n'a donc pas pu être retenue. Il s'insère donc finalement
3ème
avec sa meilleure participation précédente à
10392
points.
@Zezombye, comment as-tu fait ? ;)

Zezombye a écrit:Premièrement j'aimerais dire que cette épreuve a été ma préférée, notamment car il était possible de la résoudre "à la main" sans nécessairement faire d'algorithmes compliqués ou même de programmer tout court (cf shadow qui a eu presque 9000 sur la calto).

J'avais testé vite fait la 3ème épreuve et... je n'avais rien compris aux commandes : j'allais à droite, ça allait à droite puis à gauche, et puis ça sortait de l'écran. De ce que les autres candidats disaient, il fallait contrôler une spirale, mais la trajectoire n'avait pas grand chose à voir avec une spirale.

Du coup j'ai ouvert le programme (casio) dans BIDE et j'ai commencé à l'étudier un peu. Il y a tout d'abord plusieurs variables :

- p et w, qui sont des constantes utilisées pour le PRNG (générateur aléatoire)
- a, seed du PRNG (c'est pas 42 là, bizarre)

Ces variables sont utilisées pour le PRNG qui est la fonction y9(), avec l'expression "y9(a) -> a".
La représentation de la fonction y9 est en "hachures" (/////////) ce qui confirme que c'est un PRNG.

Il y a ensuite les variables pour la spirale et les points :
- z, position actuelle
- t, position juste avant
- s, score
- v, modifieur de l'argument de z
- f, multiplicateur utilisé pour l'affichage uniquement
- b = 0.085, rayon de chaque point
- n = 9, nombre de points

Et quelques listes :
- list4 : positions de chaque point (en coordonnées polaires)
- list6 : liste de toutes les itérations de v

Hé oui : on fonctionne ici sur des coordonnées polaires (ce qui explique le déplacement en cercle/spirale dans le sens trigonométrique).

À chaque itération (appui sur une des flèches) :
- a devient l'itération suivante du PRNG (y9(a) -> a)
- L'argument de z (valeur réelle) augmente ou diminue de v
- L'angle de z (valeur imaginaire) est calculée par une formule qui dépend notamment de a (et est donc aléatoire).

Quant au calcul du score :
- À chaque itération, on enlève 500 * distance parcourue (déterminée avec des calculs chelous avec des e^i, mais c'est juste un calcul de distance entre z et t)
- Lorsqu'on atteint un point, on gagne 1500, mais avec 2 pénalités : pénalité de distance au centre (-500*distance) et pénalité d'argument (-500*différence d'argument) : la valeur réelle de z doit être le plus proche possible de l'argument du point. (chaque pénalité a une valeur maximum de 500, mais ça sert un peu à rien vu que si on a 500 de pénalité on risque pas d'être dans les premiers :E)
Par une coincidence mathématique, lorsqu'on se dirige vers le centre du point, la pénalité d'argument diminue ; pas besoin donc de faire attention à la respecter, il suffit de viser le centre.

Le problème pour obtenir le meilleur score, c'est qu'une fois rentré dans le point, on gagne les 1500 (moins les pénalités), et bien sûr on ne peut pas gagner 2 fois la récompense d'un même point. Il faut donc que l'itération (qui dépend de a, donc de l'aléatoire) place z le plus proche possible du centre, ce qui n'est pas toujours possible...

Voici pour le fonctionnement, maintenant ma méthode :

Comme la trajectoire était assez imprévisible, j'ai fait une simulation en java pour notamment prédire les trajectoires.

4h plus tard, la simulation était presque prête, mais il y avait quelques erreurs de trajectoire : un score sur ma simulation différait du programme par 4 points. Je ne me suis pas laissé avoir par la pensée que c'était une erreur de précision : je sais depuis galactik que les erreurs de précision, c'est de l'ordre du millionième, et ce n'était pas la cause de la différence de 4 points.

Je regarde attentivement le code (c'était juste une retranscription de celui de casio), et l'erreur venait de la ligne transcrite "`Z + V + i(.04 + A / W) / (9Abs ReP Z + 1) -> Z`", que j'avais séparée en 2 parties :
Code: Tout sélectionner
z.re = z.re+v;
z.im = z.im+(0.04+a/w)/(9*Math.abs(z.re)+1);


Mais comme le calcul de la partie imaginaire prenait en compte la partie réelle, et que je calculais la partie réelle avant l'imaginaire, ça causait des petites erreurs (le z.re étant déjà à l'itération suivante). La solution est simple : calculer la partie imaginaire avant la partie réelle.

La simulation étant maintenant parfaite (une liste donne le même score sur la simulation et sur la calto), il ne restait qu'à l'améliorer.

Tout d'abord, la calto limite les possibilités : l'appui sur les flèches droite/gauche fait une itération, et il n'est pas possible d'augmenter ou diminuer v de plus que 0.01.
De ce fait, j'ai modifié le code pour qu'une itération ne se fasse que lorsqu'on appuie sur la flèche haute ; ainsi on peut modifier la valeur de v à sa guise. J'ai également mis comme incrément une puissance de 2 (0.0078125/4), pour éviter les pertes de précision dues au floating-point.

Mon "prédicteur", qui traçait le chemin suivi pour un v donné, prédisait au départ également le chemin suivi pour v +/- incrément, mais j'ai enlevé ça suite à la modification du code permettant de modifier v comme on veut. Il prédisait aussi les 200 prochaines itérations, mais ce n'était pas très utile étant donné que, pour faire une ligne droite, on était obligé de changer v à chaque fois. La version finale du prédicteur prédit donc l'emplacement de z (en rouge) et la direction prise (en vert), pour mieux l'aligner sur le centre du point visé.

Maintenant, quel chemin prendre ? On pourrait croire que c'est tout simplement un problème du voyageur, où il faut trouver le chemin le plus court entre tous les points. Mais un problème de taille se pose : il est absolument impossible d'aller en contresens du cercle trigonométrique sans repasser par le centre (qui fait perdre assez beaucoup de points). On ne peut pas aller de 4 vers 9, par exemple. Du coup mon bruteforce du problème du voyageur avait juste trouvé une solution impossible.

Pas grave, il suffit de faire manuellement : un petit script python avec la matrice des coûts (générée avec 500*distance entre les points), et une fonction chemin(j,k,l,m,n,o,p,q) qui calcule les coûts, et il est possible de trouver le chemin le plus court en faisant des essais manuels. Il faut prendre ce résultat avec des pincettes car il ne prend pas en compte les rayons (le coût étant moins grand si on vise le bord des points) mais c'est un bon outil de comparaison.

Code: Tout sélectionner
mat = [[0.0, 639.8758650193196, 71.10442060204466, 423.95186425858145, 331.14380293171877, 161.45686697021324, 373.03170861562603, 261.0731151968173, 586.4373544809774], [639.8758650193196, 0.0, 709.368357885116, 462.70974506153203, 382.82839628019946, 725.8710101543168, 941.7930688633227, 645.1635101630433, 1027.648437944569], [71.10442060204466, 709.368357885116, 0.0, 464.44722453447923, 400.08940513293805, 160.6728290075972, 340.4323542215803, 296.6436795055611, 546.9575199959714], [423.95186425858145, 462.70974506153203, 464.44722453447923, 0.0, 464.176892264874, 579.9797778530555, 796.9239745409624, 614.0147428390028, 577.5250505787424], [331.14380293171877, 382.82839628019946, 400.08940513293805, 464.176892264874, 0.0, 362.74137436674374, 565.403951395421, 262.4540702256918, 872.1724054160846], [161.45686697021324, 725.8710101543168, 160.6728290075972, 579.9797778530555, 362.74137436674374, 0.0, 226.3899318570202, 163.5532072741689, 701.1504907088186], [373.03170861562603, 941.7930688633227, 340.4323542215803, 796.9239745409624, 565.403951395421, 226.3899318570202, 0.0, 312.42883353647136, 800.2366772401842], [261.0731151968173, 645.1635101630433, 296.6436795055611, 614.0147428390028, 262.4540702256918, 163.5532072741689, 312.42883353647136, 0.0, 842.72080016074], [586.4373544809774, 1027.648437944569, 546.9575199959714, 577.5250505787424, 872.1724054160846, 701.1504907088186, 800.2366772401842, 842.72080016074, 0.0]]

def chemin(j,k,l,m,n,o,p,q):
   j-=1
   k-=1
   l-=1
   m-=1
   n-=1
   o-=1
   p-=1
   q-=1
   print(mat[0][j]+mat[j][k] + mat[k][l] + mat[l][m] + mat[m][n] + mat[n][o] + mat[o][p] + mat[p][q])


Avec le script python, on trouve que le meilleur chemin est 3->9->4->2->5->8->6->7. En faisant ce chemin manuellement, à l'aide du prédicteur, j'ai un score de 9213. Pas mal, mais très loin de 10 444, et un peu loin du 2ème qui était à 9303. Je me dis que le 1er doit avoir une technique secrète, car c'était impossible de gagner plus de 1000 points uniquement avec de l'optimisation de chemin, il y avait un autre chemin que le mien. Mais je n'arrivais pas à voir lequel.

En faisant mon algorithme pour tracer des droites parfaites, je suis nonchalamment resté appuyé sur la flèche haute, pour regarder le tracé de la spirale. Je faisais ça à partir de ma liste de 9213 (j'avais donc déjà les 8 points), puis la spirale passe par le centre, et puis... plus rien. Ma simulation ne répondait plus. Je pensais initialement que c'était à cause d'une division par 0 ou quelque chose d'autre, mais la console affichait "score increased by 1500". J'ai su alors comment arriver au club des 10 000 : il suffisait de repasser par le centre après être passé par les 8 points.

En rétrospective, j'aurais dû le voir : la boucle principale avait une condition de sortie de list4[1] > n, lorsque j'ai recopié le code je me disais que le programme s'arrêtait lorsqu'on était passé par les 8 points, mais quand je suis passé par les 8 points le programme ne s'était pas arrêté... (et je me suis même dit que c'était bizarre car il n'y avait que 8 points donc la condition n'était pas remplissable)

Du coup, retour sur mon script python pour choisir un chemin se terminant par 1, et je trouve que le meilleur chemin est 3->9->4->2->5->8->7->6->1, suivi de près par 3->9->4->2->5->8->6->7->1.

Une coincidence, ou un choix machiavélique de Critor (car les positions des points sont générées aléatoirement) mais il est quasiment impossible de passer de 7 à 6 : il faut s'arrêter pile sur le bord de 7, puis avoir un segment suffisamment petit (la longueur étant déterminée par l'aléatoire) pour passer au ras du 6 sans le dépasser. C'est donc totalement dépendant de l'aléatoire, et coincidence de plus, la seed par défaut donnait un segment assez petit pour faire le 7->6. J'ai alors un score de 10392. On voit par exemple ci-contre que j'effleure le 6, mais je ne peux pas le toucher parce que je ne suis pas bien positionné.

Car oui, il était possible d'influencer l'aléatoire : en itérant alors qu'on était toujours au centre, seule la valeur de l'angle changeait (avec des 0 ajoutés à la liste pour chaque itération). Il suffisait donc de choisir un nombre d'itérations qui donne un angle de départ proche de 0 (pour aller directement sur 3), et l'aléatoire était changé. Un petit bout de code plus tard, et j'obtiens la liste suivante :

Code: Tout sélectionner
      ArrayList<Integer> listeIter = new ArrayList<Integer>();
      double j = 0;
      for (int i = 0; i < 100000; i++) {
         a = y9(a);
         j += (0.04+a/w);
         if (j%(2*Math.PI) < 0.001 || j%(2*Math.PI) > (2*Math.PI-0.001) ) {
            System.out.println("angle de "+j%(2*Math.PI)+" pour "+i+" iterations");
            
            listeIter.add(i);
            
            //System.out.println(sb.toString());
         }
      }
      System.out.println(listeIter.toString());
      System.exit(0);

[683, 6611, 7308, 10065, 11146, 16614, 24882, 31202, 33105, 39926, 55024, 56161, 57800, 61276, 62248, 62356, 67729, 85818, 87519, 91454, 97464]


J'ai testé manuellement et j'obtiens un 7->6 possible pour 31202 itérations initiales, avec un score de 10394... mais malheureusement, la nSpire ne supportant pas une liste de 31000 nombres, ma participation est invalide. :E

J'agrandis la tolérance d'angle en me limitant cette fois à 10000, et je fais un algorithme qui trace automatiquement le chemin le plus droit possible en passant par les points donnés :

Code: Tout sélectionner
int[] listeIter = {506, 683, 730, 911, 924, 1052, 1277, 1348, 1373, 2175, 2198, 3168, 3211, 3462, 3734, 3980, 4869, 5533, 5558, 5974, 6567, 6611, 7308, 7427, 7805, 8748, 8869, 9413, 9795, 9805};
      
      for (int i = 0; i < listeIter.length; i++) {
         nbIterations = listeIter[i];
         init();
         if (auto()) {
            System.out.println("score final = "+s);
            System.out.println(nbIterations + "x{0} + "+list6.toString().replaceAll("\\[", "{").replaceAll("\\]", "}"));
         }
      }


Mais la valeur d'argument variant beaucoup de 3 vers 9, faire une ligne droite vers 9 est impossible car cela résulte en des segments très longs... je modifie alors mon algorithme pour que, lorsque la ligne droite est impossible, il aille vers le bord du point. Mais ça ne suffit pas toujours à passer le 3->9, et dans tous les cas testés l'algorithme n'arrive pas à passer le 7->6. Il faut un facteur humain.

(la vidéo a une assez mauvaise qualité, mais bon ça vous donne une idée de l'algo)
https://i.imgur.com/SvZTDLk.mp4

Je fais donc un prédicteur amélioré en me basant sur l'algorithme : il règle la valeur de v de telle sorte à se diriger vers le centre du point visé (c'est en fait mon algorithme, mais qui n'agit pas automatiquement). Mais me diriger vers le bord du 9 rend le chemin trop court, et je ne peux pas faire le 7->6 car le segment est trop long. Je place donc mon chemin au même endroit du 9 (à peu près à la moitié du rayon), j'arrive à faire le 7->6, mais... je ne gagne que 0.5 points. Les lignes droites n'auront pas vraiment amélioré mon score.

Comprenant que pour atteindre les 10444 il me fallait un algorithme chelou, et que je ne savais pas faire de tel algorithme, je suis parti jouer à overwatch. :E

(le code utilisé est ici : https://pastebin.com/Xw4BiRvu)

https://www.planet-casio.com/Fr/forums/topic15439-1-Triconcours-et-l-epreuve-de-courage.html


armé de sa
TI-Nspire
monte à la
2nde
place avec
10400
points.
@Stefan, comment as-tu fait ? ;)

Stefan Bauwens a écrit:Je vais faire de mon mieux pour expliquer comment j’ai obtenu mon score.
J'ai d'abord téléchargé le programme sur ma TI-83 +, mais j'ai vite compris c'était trop lent si je voulais vraiment faire une bonne tentative. Donc, j'ai téléchargé la version de TI-Nspire et je l'ai exécutée sur l'émulateur. C'était beaucoup plus rapide, en plus, c'était plus “pixel perfect” :P

J'ai joué avec les commandes et me suis rendu compte qu'il y avait un mouvement de fibonacci / circulaire en cours. Ma première tentative a été d'essayer de suivre "le flux naturel" et de collecter toutes les boules (de dragon). Chaque fois que j'en réussissais un, je copiais la liste kinto dans un fichier texte et je partais de là.
Cela s'est bien passé, mais il restait encore un long chemin à parcourir. J'ai ensuite essayé de modifier la liste manuellement avec des valeurs et de voir comment elle réagirait. Et effectivement, il y avait une certaine logique là-bas. Les valeurs plus petites produisent des mouvements plus courts et la valeur définit également la direction de l'angle. La modification manuelle de ces valeurs à l’aide d’essais et erreurs me permettrait très "facilement" d’obtenir des lignes relativement droites. J'ai aussi remarqué que toucher le centre de la balle donnait plus de points. À l'aide d'un papier et d'un stylo, j'ai recherché le chemin le plus court entre les balles (sans prendre en compte le dernier, car je ne l'avais pas encore découvert). J'ai modifié la liste pour suivre ce chemin de près. Cette méthode a très bien fonctionné et mon chemin a été assez efficace, mais en regardant le classement, je savais qu'il devait y avoir quelque chose de radicalement différent qui me manquait. Mon frère Jim a jeté un coup d'œil au code source et nous avons effectivement découvert une autre balle finale au centre après avoir traversé la 8e balle.
En continuant sur le chemin que j'avais déjà, j'ai obtenu un score autour de 10348. Pas mal, mais j'en voulais plus.
Jim a créé un petit programme d'amour pour dessiner plus rapidement un chemin au lieu de modifier manuellement la liste. (J'étais trop paresseux pour programmer moi-même: P) Alors j'ai joué avec et j'ai ensuite découvert que je pouvais obtenir un meilleur score en modifiant la séquence des 3 dernières balles. J'ai eu un score autour de 10370. Jim a également créé un petit programme pour itérer sur les valeurs de la liste et les modifier légèrement pour essayer d’améliorer la valeur finale. C’est ainsi que j’ai obtenu mon score final.

Merci pour ce défi amusant!


Et enfin / arrive
1er
après avoir majoré à
10444
points.
@Pavel, comment as-tu fait ? ;)

Pavel a écrit:Après m'être beaucoup amusé avec le mode interactif de ce simulateur de nuage magique sur ma Casio Graph 90+E, j'ai essayé de comprendre le code derrière ce jeu et j'ai trouvé que pour moi c'est beaucoup plus facile avec le code en Python pour la calculatrice NumWorks.

En analysant le code, j'ai remarqué les points suivants:
- un système de coordonnées polaires est utilisé pour le calcul de la position du nuage magique
- on ne contrôle que la coordonnée radiale
- la coordonnée angulaire est augmentée à chaque déplacement
- la vitesse angulaire a une composante aléatoire

Autrement dit, on pilote un nuage magique dans un cyclone.

Le calcul du score est assez simple:
- on gagne jusqu'à 1500 points pour chaque fragment trouvé
- il faut bien viser le centre des fragments pour maximiser les points
- on paie 500 points par unité de distance parcourue

Pour réaliser le meilleur score, j'ai découpé le problème en sous-problèmes suivants:
- trouver un plus court chemin qui visite chaque fragment et qui se termine au point de départ
- manoeuvrer le nuage magique en essayant de suivre ce chemin

Le premier sous-problème est le problème bien connu du voyageur de commerce.

En cherchant "salesman python" sur google, j'ai trouvé ce petit programme de dix lignes.

J'ai juste ajouté à ce programme les calculs des coordonnées des fragments. Ci-contre le code et le chemin que j'ai obtenu.

La longueur de ce chemin est approximativement 6. On peut estimer que le score maximal devrait se situer quelque part autour de 10500 (9 * 1500 - 6 * 500).

Pour résoudre le deuxième sous-problème (manoeuvrer le nuage magique en essayant de suivre ce chemin), je l'ai aussi découpé en sous-sous-problèmes:
- trouver des instructions pour diriger le nouage magique d'un fragment au suivant
- optimiser ces instructions en utilisant une méthode d'optimisation stochastique
- répéter les deux étapes précédentes jusqu'à revenir au point de départ

Pour chaque déplacement entre deux fragments A et B, j'analyse les valeurs des instructions variant entre -1 et 1 et je choisis celle qui minimise l'angle entre la ligne AB et la ligne AN, ou N est la position du nuage magique.

S'il est possible d'atteindre un fragment après K ou K+1 instructions, je choisis les instructions qui maximisent le score.

Pour optimiser les instructions, je varie légèrement les valeurs une par une et je choisis les valeurs maximisant le score. Pour sortir d'un maximum local, j'applique une petite variation aléatoire aux plusieurs valeurs.

Cet algorithme fonctionne bien pour les 7 premiers fragments et il trouve automatiquement 81 instructions. Les deux dernières instructions sont ajoutées à la liste manuellement.

Après avoir ajusté différents paramètres de cet algorithme, j'ai réussi à trouver une solution à 10 444 points. Voici un lien vers la version finale de mon code.


Merci à tous ! :)


Référence
:
https://www.planet-casio.com/Fr/forums/ ... p?id=15489
Crédit image
:
Queen-Zelda
Lien vers le sujet sur le forum: Triconcours de rentrée 2018 - résultats défi de Courage (Commentaires: 84)

TI-z80 Module TI-Python: exploration module math + comparaisons

Nouveau messagede critor » 25 Nov 2018, 23:40

Cet article traite entre autres du module
TI-Python
, au sujet duquel il est rédigé a posteriori et illustré à l’aide des photos de tests prises sur le stand de
Texas Instruments
aux journées APMEP 2018 puis congrès UdPPC 2018. Nous ne disposons pas à ce jour du module.

Certaines photos ne correspondront pas exactement à ce qui est décrit, car nous avons amélioré le script utilisé entre les deux événements, sans pouvoir reprendre toutes les photos pour diverses contraintes lors du second événement.

Dans tous les cas, notez que ces tests ont été réalisés sur un prototype non final, et que des choses évoquées peuvent changer d'ici la livraison, en bien ou en mal d’ailleurs.

9931Dans un article précédent nous t'avons présenté le
TI-Python
, module externe permettant l'exécution de scripts
Python
sur ta
TI-83 Premium CE
, et t'avions annoncé la présence du module
math
. Par la suite, nous avions exploré son module
builtins
.

Aujourd'hui, explorons son module
math
à l'aide du même script suivant :
Code: Tout sélectionner
#platforms: (0)TI-Nspire (1)NumWorks (2)Graph 90+E (3)Graph 75+E (4)TI-Python
plines=[29,12,  7, 9,11]
pcols =[53,99,509,32,32]
try:
  import sys
  try:
    if sys.platform=='nspire': platform=0
    if sys.platform=='TI-Python Adapter': platform=4
  except: platform=3
except:
  try:
    import kandinsky
    platform=1
  except:
    platform=2

nlines=plines[platform]
ncols=pcols[platform]
curline=0

def mprint(*ls):
  global curline
  st=""
  for s in ls:
    if not(isinstance(s,str)):
      s=str(s)
    st=st+s
  stlines=1+int(len(st)/ncols)
  if curline+stlines>=nlines:
    input("Input to continue:")
    curline=0
  print(st)
  curline+=stlines

def explmod(obj,hd="",obs="",reset=True):
  global curline
  if(reset): curline=0
  c=0
  for itm in sorted(dir(obj)):
    c=c+1
    try:
      if obs=="":
        try:
          obs=obj.__name__ 
        except:
          obs=str(obj)
          obs=obs[obs.find("'")+1:obs.rfind("'")]
      its=obs+"."+str(itm)
      itv=eval(its)
      mprint(hd+str(itm)+"="+str(itv))
      if itv!=obj:
        c=c+explmod(itv,hd+".",its,False)
    except:
      mprint(hd+str(itm))
  if c>0:
    mprint(hd+"Total: "+str(c)+" item(s)")
  return c


Le script nous liste alors pas moins de 50 entrées retranscrites ci-dessous :
TI-Python a écrit:9975>>> from explmod import *
>>> import math
>>> explmod(math)
__name__='math'
.count()=<bound_method>
.endswith()=<bound_method>
.find()=<bound_method>
.format()=<bound_method>
.index()=<bound_method>
.isalpha()=<bound_method>
.isdigit()=<bound_method>
9971.islower()=<bound_method>
.isspace()=<bound_method>
.isupper()=<bound_method>
.join()=<bound_method>
.lower()=<bound_method>
.lstrip()=<bound_method>
.replace()=<bound_method>
.rfind()=<bound_method>
.rindex()=<bound_method>
.rsplit()=<bound_method>
9977.rstrip()=<bound_method>
.split()=<bound_method>
.startswith()=<bound_method>
.strip()=<bound_method>
.upper()=<bound_method>
Total: 22 item(s)
acos()=<function>
asin()=<function>
atan()=<function>
atan2()=<function>
ceil()=<function>
copysign()=<function>
cos()=<function>
degrees()=<function>
e=2.71828
exp()=<function>
fabs()=<function>
floor()=<function>
fmod()=<function>
frexp()=<function>
9984isfinite()=<function>
isinf()=<function>
isnan()=<function>
ldexp()=<function>
log()=<function>
modf()=<function>
9991pi=3.14159
pow()=<function>
radians()=<function>
sin()=<function>
sqrt()=<function>
tan()=<function>
trunc()=<function>
Total: 50 item(s)
50
>>>


Et bien comme tu vas le voir, ce n'est pas parce que deux calculatrices avec
Python
intègrent le module
math
qu'elles se valent. Voici ci-dessous la comparaison de ce que renvoient les différents modèles en lançant ce même script :
Casio
Graph 90+E
NumWorks
TI-Python

pour
TI-83 Premium CE
__name__='math'
acos()
acosh()
asin()
asinh()
atan()
atan2()
atanh()
ceil()
copysign()
cos()
cosh()
degrees()
e=2.718281828459045
erf()
erfc()
exp()
expm1()
fabs()
floor()
fmod()
frexp()
gamma()
isfinite()
isinf()
isnan()
ldexp()
lgamma()
log()
log10()
log2()
modf()
pi=3.141592653589793
pow()
radians()
sin()
sinh()
sqrt()
tan()
tanh()
trunc()
__name__='math'
acos()

asin()

atan()
atan2()

ceil()

cos()


e=2.718281828459045


exp()

fabs()
floor()
fmod()
frexp()




ldexp()

log()
log10()

modf()
pi=3.141592653589793
pow()

sin()

sqrt()
tan()

trunc()
__name__='math'
acos()

asin()

atan()
atan2()

ceil()
copysign()
cos()

degrees()
e=2.718281828459045


exp()

fabs()
floor()
fmod()
frexp()

isfinite()
isinf()
isnan()
ldexp()

log()


modf()
pi=3.141592653589793
pow()
radians()
sin()

sqrt()
tan()

trunc()
__name__='math'
acos()
acosh()
asin()
asinh()
atan()
atan2()
atanh()
ceil()
copysign()
cos()
cosh()
degrees()
e=2.718281828459045
erf()
erfc()
exp()
expm1()
fabs()
floor()
fmod()
frexp()
gamma()
isfinite()
isinf()
isnan()
ldexp()
lgamma()
log()
log10()
log2()
modf()
pi=3.141592653589793
pow()
radians()
sin()
sinh()
sqrt()
tan()
tanh()
trunc()
__name__='math'
acos()

asin()

atan()
atan2()

ceil()
copysign()
cos()

degrees()
e=2.71828


exp()

fabs()
floor()
fmod()
frexp()

isfinite()
isinf()
isnan()
ldexp()

log()


modf()
pi=3.14159
pow()
radians()
sin()

sqrt()
tan()

trunc()
Total: 67
Total: 47
Total: 50
Total: 63
Total: 50


D'où le classement suivant :
  1. TI-Nspire
    avec
    67
    entrées
  2. NumWorks
    avec
    63
    entrées
  3. Casio Graph 35+E/75+E
    et module
    TI-Python
    pour
    TI-83 Premium CE
    avec
    50
    entrées
  4. Casio Graph 90+E
    avec
    47
    entrées

Les implémentations les plus complètes du module
math
concernent à ce jour de loin les
NumWorks
et
TI-Nspire
.

Les implémentations
Casio Graph 90+E
,
Casio Graph 35/75+E
et
TI-Python
pour
TI-83 Premium CE
à la différence ne retiennent que ce qui a été jugé utile à un niveau lycée par le ou les développeurs, avec quelques variations d'un modèle à un autre.

Outre l'absence de diverses fonctions dont les fonctions hyperboliques et logarithmes en base 2 et 10, notons que le module
TI-Python
semble également travailler sur des flottants en simple précision
(32-bits)
, vu le nombre ridicule de décimales affichées pour les constantes de ce module...
Lien vers le sujet sur le forum: Module TI-Python: exploration module math + comparaisons (Commentaires: 8)

HP Mise à jour mViewer GX2 1.2 compatible HP Prime G2

Nouveau messagede critor » 23 Nov 2018, 23:58

mViewer GX2
est notre solution de conversion de documents PDF ou séries d'images pour ta calculatrice
HP Prime
.

100421004010039Toutefois, comme signalé par , les documents convertis n'étaient pas affichés correctement sur la nouvelle
HP Prime G2
. Pour un document de 20 pages, le lecteur affichait dans l'ordre :
  • l'icône de l'application certes illustrée avec la page 1 mais totalement illisible si zoomée
  • la page 20
  • la page 19
  • ...
  • la page 3
  • la page 2
Le document était donc défilé à l'envers, et sans sa première page. :mj:

10043La cause de ce problème vient de la
HP Prime G2
qui se comporte différemment de la
HP Prime G1
. Si la
HP Prime G1
liste les fichiers associés à une application du premier au dernier, cette coquine de
HP Prime G2
les liste à l'envers, du dernier au premier, et commence donc par le fichier d'icône de l'application.

10041
mViewer GX2
est dès ce soir mis à jour dans une version 1.2 qui se veut compatible à la fois
HP Prime G1
et
HP Prime G2
. L'application ne fait plus confiance à la calculatrice et effectue désormais un tri systématique de la liste de fichiers associés qui lui est communiquée.

Merci
nbenm
pour avoir rendu cette correction possible ! :bj:

Pour les documents traités avant ce soir, il faudra les convertir à nouveau. Tu n'es pas forcément obligé de retourner chercher les fichiers originaux, il te suffira d'accéder aux conversions de ton compte pour y éditer et revalider chaque document, ce qui suffira pour lui intégrer le nouveau code compatible
HP Prime G2
.


Lien
:
editgx.php?mode=46
Lien vers le sujet sur le forum: Mise à jour mViewer GX2 1.2 compatible HP Prime G2 (Commentaires: 4)

TI-z80 The Chicken Adventure I, nouveau Sokoban C TI-83 Premium CE

Nouveau messagede critor » 23 Nov 2018, 16:26

Un esprit malin a pris le contrôle mental de la Lune et lui ordonne de s'écraser sur la Terre. Un scénario digne d'un
Zelda
et donc des plus grands noms vidéoludiques, n'est-ce pas ? :troll:

Mais cette fois-ci, oublie les facilités scénaristiques enfantines de
Zelda Majora's Mask
: pas d'
Ocharina du Temps
, de magie ou autre
Deus ex machina
pour éviter la catastrophe. :p

Non non, bienvenu dans le monde réel des adultes, l'astre lunaire s'écrase effectivement sur Terre, et l'esprit malin
Super Poulet
fait des humains ses esclaves, les métamorphasant tous en poulets.
93623 ans plus tard, les plus éminents parmi ces galinacés ont retrouvé les traces d'une ancienne légende ramenant l'espoir à toute la basse-cour... Pour rompre l'enchantement, il suffirait de remettre en place les statuettes dans le
Temple de la Lune
...

10037Bienvenue dans
The Chicken Adventure I
, une création programmée avec amour, passion et talent par , lycéen de Seconde, pour ta
TI-83 Premium CE
.

Dans ce nouveau jeu de type
Sokoban
comme
BillyBox
, tu devras donc remettre en place les statuettes à travers les 50 salles du temple. Prépare donc tes biceps et l'huile de coude, et prends garde à ne pas les coincer.

Le jeu est programmé en C, comme quoi
aux âmes bien nées la valeur n'attend point le nombre des années
, et le code source est disponible et consultable en ligne pour ceux qui souhaiteraient s'en inspirer pour d'autres créations.

Pour fonctionner correctement, le jeu aura besoin des bibliothèques C téléchargeables ci-dessous. Mais rien de bien compliqué, il suffit juste de les transférer.


De quoi passer agréablement le temps dans les barrages ce week-end peu importe ta couleur, merci
PoulpoGaz
! ;)

Alors, cap d'atteindre et résoudre l'énigme de la 50ème salle, ou bien es-tu une poule mouillée ? :p


Téléchargements
:
Lien vers le sujet sur le forum: The Chicken Adventure I, nouveau Sokoban C TI-83 Premium CE (Commentaires: 1)

NumWorks Mise à jour NumWorks 1.8.1 : 16K stockage scripts Python !

Nouveau messagede critor » 21 Nov 2018, 18:16

10033
La nouvelle version
1.8.1
pour ta calculatrice
NumWorks
est maintenant disponible. Découvrons ensemble les améliorations :
ImageImageImage


Application Python
:
Go to top

Une première nouveauté concerne ce qui avait déjà été annoncé dans le contexte de la diffusion de la version
bêta
1.8.0
.
Un défaut de la calculatrice
NumWorks
était son espace de stockage ridicule pour les scripts
Python
,
2.946Ko
, extensible jusqu'à
4,094Ko
en supprimant les scripts d'exemple préchargés.

Déjà insuffisant rien que pour faire tenir simultanément en mémoire les deux scripts
Python
de notre concours de rentrée.


Avec la version
1.8.1
tu n’es plus à l'étroit, l'espace de stockage passe à
15.234Ko
extensible jusqu'à
16.382Ko
; un quadruplement donnant quelque chose d’enfin comparable à la concurrence d'entrée de gamme ! :bj:

Notons que l’espace disponible sur la calculatrice se consulte à ce jour exclusivement en ligne sur https://workshop.numworks.com/python/calculator.

Autre chose de très bien sur
NumWorks
, c’est que lors de l’exécution d’un script
Python
la liste
Fonctions et variables
accessible avec la touche
var
était automatiquement préremplie avec l’ensemble des fonctions et variables globales définies par le script.

Cela pouvait toutefois être embêtant avec certains scripts, donnant une liste surchargée avec plusieurs entrées peu utiles.

Désormais, plutôt que de s’embêter avec des artifices alphabétiques peu confortables pour les renvoyer en fin de liste, il suffira tout simplement au développeur de préfixer les noms des variables globales dont il juge l’ajout à la liste peu utile avec le caractère tiret-bas
( _ )
. :bj:
Code: Tout sélectionner
#public global variables
n=3
platform=”numworks”
#hidden global variables
_key=3.24
_implementation=”micropython”


Application Calculs
:
Go to top

Le moteur de calcul a été entièrement réécrit avec en interne une meilleur gestion des éventuelles erreurs de mémoire, et en ce qui nous concerne pour la partie visible de nouvelles possibilités.

Déjà, comme sur les modèles formels haut de gamme il y a désormais la possibilité de faire des calculs avec l’infini notamment dans le contexte d’un travail sur les limites, le nombre infini étant à écrire inf. :bj:

Mais ce n’est pas tout, les fonctions logarithmes, trigonométriques inverses et hyperboliques inverses sont maintenant étendues aux nombres complexes ! :bj:

La simplification des logarithmes pouvait être problématique lorsque le paramètre était un nombre puissance de la base.
$mathjax$log_b(a)$mathjax$
avec
$mathjax$a=b^k$mathjax$
k
est un entier positif. Dans ce cas la
‘simplification’
effectuée par la machine consistait à factoriser le nombre
a
sans tenir compte de la base du logarithme, ce qui pouvait conduire à des formes mal simplifiées, et dont l’écriture décimale pourtant exacte était de plus adjointe avec un symbole environ. Dorénavant, la simplification tiendra compte de la base. :)

Autre chose de remarquable sur la
NumWorks
dans le cadre des sciences expérimentales
(Physique-Chimie notamment)
, c’est la possibilité de choisir un format de résultats selon la règle des chiffres significatifs. Mais la règle en question n’était pas toujours respectée, notamment pour les nombres dont l’écriture commençait par un ou plusieurs chiffres zéro, zéro étant dans ce cas comptabilisé à tort comme un chiffre significatif. Cette erreur est maintenant corrigée. :)

Un autre avantage exceptionnel sur la
NumWorks
c’est, lorsque approprié, la présentation des résultats sous deux formes, exacte et décimale, liées selon le cas par un symbole de relation adéquat, égale ou environ. Un problème arrivait par contre au changement d’applications, où toutes les relations dans l’historique de calcul étaient alors réaffichées systématiquement avec le symbole environ. Ce problème est dès à présent corrigé. :)


Application Paramètres
:
Go to top

Enfin dans l’application
Paramètres
les choix offerts pour la personnalisation des formats d’angles, nombres réels, saisies et nombres complexes sont à présent illustrés et de façon intuitive. :)


Notons également comme déjà remarqué dans la bêta qu'il s'agit de la toute première mise à jour firmware où l'on ne fonce plus dans le mur des
1024Kio
de la mémoire
Flash
. Des optimisations ont permis d'en diminuer nettement la taille, libérant ainsi pas moins de
89Ko
d'espace en mémoire
Flash
pour coder de futures améliorations - peut-être un module tortue pour
Python
? ;)


Liens
:
Lien vers le sujet sur le forum: Mise à jour NumWorks 1.8.1 : 16K stockage scripts Python ! (Commentaires: 24)

TI-z80 Module TI-Python: découverte fonctions builtins cachées !

Nouveau messagede critor » 20 Nov 2018, 19:40

Cet article au sujet du module
TI-Python
est rédigé a posteriori et illustré à l’aide des photos de tests prises sur le stand de
Texas Instruments
aux journées APMEP 2018 puis congrès UdPPC 2018. Nous ne disposons pas à ce jour du module.

Certaines photos ne correspondront pas exactement à ce qui est décrit, car nous avons amélioré le script utilisé entre les deux événements. Or malheureusement, il était beaucoup plus compliqué de prendre de bonnes photos au congrès
UdPPC
de par l'affluence nettement supérieure, le fait que seulement un module au lieu de deux était disponibles sur le stand pour tous ces visiteurs, ainsi que le fait que les stands ne disposaient cette fois-ci pas de cloisons à la différence mais consistaient en de simples tables alignées le long d'une allée et bien remplies - pas vraiment d'espace pour se poser.

Dans tous les cas, notez que ces tests ont été réalisés sur un prototype non final, et que des choses évoquées peuvent changer d'ici la livraison, en bien ou en mal d’ailleurs.

En vous priant donc de bien vouloir excuser les imprécisions éventuelles.


Dans un article précédent nous t'avons présenté le
TI-Python
, module externe permettant l'exécution de scripts
Python
sur ta
TI-83 Premium CE
.

Et peut-être as-tu été déçu(e) que le catalogue alphabétique accessible via
2nde
0
ne contienne apparemment que 95 éléments, surtout que parmi ces éléments sont inclus ceux des deux modules intégrés
math
et
random
. A priori très décevant par rapport à la concurrence...
991399359936993999389940994499379945


Et bien non, en fait chez
Texas Instruments
le catalogue est très loin de tout lister. Par exemple, la commande try: fonctionne alors qu'elle n'est pas au catalogue.

Comment donc faire pour savoir ce que vaut vraiment le module
TI-Python
?

Tentons d'explorer le module
builtins
à l'aide du script suivant :
Code: Tout sélectionner
#platforms: (0)TI-Nspire (1)NumWorks (2)Graph 90+E (3)Graph 75+E (4)TI-Python
plines=[29,12,  7, 9,11]
pcols =[53,99,509,32,32]
try:
  import sys
  try:
    if sys.platform=='nspire': platform=0
    if sys.platform=='TI-Python Adapter': platform=4
  except: platform=3
except:
  try:
    import kandinsky
    platform=1
  except:
    platform=2

nlines=plines[platform]
ncols=pcols[platform]
curline=0

def mprint(*ls):
  global curline
  st=""
  for s in ls:
    if not(isinstance(s,str)):
      s=str(s)
    st=st+s
  stlines=1+int(len(st)/ncols)
  if curline+stlines>=nlines:
    input("Input to continue:")
    curline=0
  print(st)
  curline+=stlines

def explmod(obj,hd="",obs="",reset=True):
  global curline
  if(reset): curline=0
  c=0
  for itm in sorted(dir(obj)):
    c=c+1
    try:
      if obs=="":
        try:
          obs=obj.__name__ 
        except:
          obs=str(obj)
          obs=obs[obs.find("'")+1:obs.rfind("'")]
      its=obs+"."+str(itm)
      itv=eval(its)
      mprint(hd+str(itm)+"="+str(itv))
      if itv!=obj:
        c=c+explmod(itv,hd+".",its,False)
    except:
      mprint(hd+str(itm))
  if c>0:
    mprint(hd+"Total: "+str(c)+" item(s)")
  return c


Le script nous liste alors pas moins de 212 entrées retranscrites ci-dessous : :bj:
TI-Python a écrit:9980>>> from explmod import *
>>> import builtins
>>> explmod(builtins)
ArithmeticError=<class 'ArithmeticError'>
AssertionError=<class 'AssertionError'>
AttributeError=<class 'AttributeError'>
BaseException=<class 'BaseException'>
.__init__=<function>
.Total: 1 item(s)
EOFError=<class 'EOFError'>
Ellipsis=Ellipsis
Exception=<class 'Exception'>
GeneratorExit=<class 'GeneratorExit'>
9983ImportError=<class 'ImportError'>
IndentationError=<class 'IndentationError'>
IndexError=<class 'IndexError'>
KeyError=<class 'KeyError'>
KeyboardInterrupt=<class 'KeyboardInterrupt'>
LookupError=<class 'LookupError'>
MemoryError=<class 'MemoryError'>
NameError=<class 'NameError'>
NotImplementedError=<class 'NotImplementedError'>
OSError=<class 'OSError'>
9985OverflowError=<class 'OverflowError'>
ReloadException=<class 'ReloadException'>
RuntimeError=<class 'RuntimeError'>
StopIteration=<class 'StopIteration'>
SyntaxError=<class 'SyntaxError'>
SystemExit=<class 'SystemExit'>
TypeError=<class 'TypeError'>
9982UnicodeError=<class 'UnicodeError'>
ValueError=<class 'ValueError'>
ZeroDivisionError=<class 'ZeroDivisionError'>
__build_class__=<function>
__import__=<function>
__name__=builtins
.count=<bound_method>
.endswith=<bound_method>
.find=<bound_method>
9998.format=<bound_method>
.index=<bound_method>
.isalpha=<bound_method>
.isdigit=<bound_method>
.islower=<bound_method>
.isspace=<bound_method>
.isupper=<bound_method>
.join=<bound_method>
.lower=<bound_method>
.lstrip=<bound_method>
9999.replace=<bound_method>
.rfind=<bound_method>
.rindex=<bound_method>
.rsplit=<bound_method>
.rstrip=<bound_method>
.split=<bound_method>
.startswith=<bound_method>
.strip=<bound_method>
.upper=<bound_method>
.Total: 22 item(s)
10000__repl_print__=<function>
abs=<function>
all=<function>
any=<function>
bin=<function>
bool=<class 'bool'>
bytearray=<class 'bytearray'>
.append=<function>
.extend=<function>
.Total: 2 item(s)
9964bytes=<class 'bytes'>
.count=<function>
.endswith=<function>
.find=<function>
.format=<function>
.index=<function>
.isalpha=<function>
.isdigit=<function>
.islower=<function>
.isspace=<function>
9976.isupper=<function>
.join=<function>
.lower=<function>
.lstrip=<function>
.replace=<function>
.rfind=<function>
.rindex=<function>
.rsplit=<function>
.rstrip=<function>
.split=<function>
.startswith=<function>
9969.strip=<function>
.upper=<function>
.Total: 22 item(s)
callable=<function>
classmethod=<class 'classmethod'>
dict=<class 'dict'>
.__delitem__=<function>
.__getitem__=<function>
9970.__setitem__=<function>
.clear=<function>
.copy=<function>
.fromkeys=<bound_method>
.get=<function>
.item=<function>
.keys=<function>
.pop=<function>
.popitem=<function>
.setdefault=<function>
9988.update=<function>
.values=<function>
.Total: 14 item(s)
dir=<function>
divmod=<function>
enumerate=<class 'enumerate'>
eval=<function>
exec=<function>
filter=<class 'filter'>
float=<class 'float'>
9994getattr=<function>
globals=<function>
hasattr=<function>
hash=<function>
help=<function>
help=<function>
hex=<function>
id=<function>
input=<function>
input=<function>
9990int=<class 'int'>
.from_bytes=<bound_method>
.to_bytes=<function>
.Total: 2 item(s)
isinstance=<function>
issubclass=<function>
iter=<function>
len=<function>
list=<class 'list'>
.append=<function>
9973.clear=<function>
.copy=<function>
.count=<function>
.extend=<function>
.index=<function>
.insert=<function>
.pop=<function>
.remove=<function>
.reverse=<function>
.sort=<function>
.Total: 11 item(s)
9992locals=<function>
max=<function>
memoryview=<class 'memoryview'>
min=<function>
next=<function>
object=<class 'object'>
oct=<function>
open=<function>
10005ord=<function>
pow=<function>
print=<function>
property=<class 'property'>
.__deleter__=<function>
.__getter__=<function>
.__setter__=<function>
.Total: 3 item(s)
range=<class 'range'>
repr=<function>
9978round=<function>
set=<class 'set'>
.__contains__=<function>
.__add__=<function>
.__clear__=<function>
.__copy__=<function>
.__difference__=<function>
.__difference_update__=<function>
.__discard__=<function>
.__intersection__=<function>
9995.__intersection_update__=<function>
.__isdisjoint__=<function>
.__issubset__=<function>
.__issuperset__=<function>
.__pop__=<function>
.__remove__=<function>
.__symetric_difference__=<function>
.__symetric_difference_update__=<function>
.__union__=<function>
.__update__=<function>
.Total: 18 item(s)
9993setattr=<function>
slice=<class 'slice'>
sorted=<function>
staticmethod=<class 'staticmethod'>
str=<class 'str'>
.count=<function>
.endswith=<function>
.find=<function>
.format=<function>
9997.index=<function>
.isalpha=<function>
.isdigit=<function>
.islower=<function>
.isspace=<function>
.isupper=<function>
.join=<function>
.lower=<function>
.lstrip=<function>
.replace=<function>
9979.rfind=<function>
.rindex=<function>
.rsplit=<function>
.rstrip=<function>
.split=<function>
.startswith=<function>
.strip=<function>
.upper=<function>
.Total: 22 item(s)
sum=<function>
10003super=<class 'super'>
tuple=<class 'tuple'>
.count=<function>
.index=<function>
.Total: 2 item(s)
type=<class 'type'>
zip=<class 'zip'>
Total: 212 item(s)
212
>>>


Tout ça c'est bien joli, mais qu'est-ce que ça donne par rapport à la concurrence ?
Et bien voilà, nous avons lancé le même script sur les autres calculatrices disposant du
Python
à ce jour :
Casio
Graph 90+E
NumWorks
TI-Python

pour
TI-83 Premium CE
ArithmeticError
AssertionError
AttributeError
BaseException
EOFError
Ellipsis
Exception
GeneratorExit
ImportError
IndentationError
IndexError
KeyError
KeyboardInterrupt
LookupError
MemoryError
NameError
NotImplemented

OSError
OverflowError

RuntimeError
StopIteration
SyntaxError
SystemExit
TypeError
UnicodeError
ValueError
ViperTypeError
ZeroDivisionError
__build_class__()
__import__()

__repl_print__()
abs()
all()
any()
bin()
bool
bytearray
bytes
callable()
chr()
classmethod
compile()
complex
dict
dir()
divmod()
enumerate
eval()
exec()
filter
float
frozenset
getattr()
globals()
hasattr()
hash()

hex()
id()
input()
int
isinstance()
issubclass()
iter()
len()
list
locals()
map
max()
memoryview
min()
next()
object
oct()
open()
ord()
pow()
print()
property
range
repr()
reversed
round()
set
setattr()

sorted()
staticmethod
str
sum()
super
tuple
type
zip
ArithmeticError
AssertionError
AttributeError
BaseException
EOFError
Ellipsis
Exception
GeneratorExit
ImportError
IndentationError
IndexError
KeyError
KeyboardInterrupt
LookupError
MemoryError
NameError

NotImplementedError
OSError
OverflowError

RuntimeError
StopIteration
SyntaxError
SystemExit
TypeError

ValueError

ZeroDivisionError
__build_class__()
__import__()
__name__='builtins'
__repl_print__()
abs()
all()
any()
bin()
bool

bytes
callable()
chr()
classmethod

complex
dict
dir()
divmod()

eval()
exec()

float

getattr()
globals()
hasattr()
hash()

hex()
id()
input()
int
isinstance()
issubclass()
iter()
len()
list
locals()
map
max()

min()
next()
object
oct()
open()
ord()
pow()
print()

range
repr()

round()
set
setattr()
slice
sorted()
staticmethod
str
sum()
super
tuple
type
zip
ArithmeticError
AssertionError
AttributeError
BaseException
EOFError
Ellipsis
Exception
GeneratorExit
ImportError
IndentationError
IndexError
KeyError
KeyboardInterrupt
LookupError
MemoryError
NameError

NotImplementedError
OSError
OverflowError

RuntimeError
StopIteration
SyntaxError
SystemExit
TypeError

ValueError

ZeroDivisionError
__build_class__()
__import__()
__name__='builtins'
__repl_print__()
abs()
all()
any()
bin()
bool
bytearray
bytes
callable()
chr()
classmethod

complex
dict
dir()
divmod()
enumerate
eval()
exec()
filter
float
frozenset
getattr()
globals()
hasattr()
hash()

hex()
id()
input()
int
isinstance()
issubclass()
iter()
len()
list
locals()
map
max()
memoryview
min()
next()
object
oct()
open()
ord()
pow()
print()
property
range
repr()
reversed
round()
set
setattr()
slice
sorted()
staticmethod
str
sum()
super
tuple
type
zip
ArithmeticError
AssertionError
AttributeError
BaseException
EOFError
Ellipsis
Exception
GeneratorExit
ImportError
IndentationError
IndexError
KeyError
KeyboardInterrupt
LookupError
MemoryError
NameError

NotImplementedError
OSError
OverflowError

RuntimeError
StopIteration
SyntaxError
SystemExit
TypeError

ValueError

ZeroDivisionError
__build_class__()
__import__()
__name__='builtins'
__repl_print__()
abs()
all()
any()
bin()
bool

bytes
callable()
chr()
classmethod

complex
dict
dir()
divmod()
enumerate
eval()
exec()
filter
float
frozenset
getattr()
globals()
hasattr()
hash()

hex()
id()
input()
int
isinstance()
issubclass()
iter()
len()
list
locals()
map
max()

min()
next()
object
oct()
open()
ord()
pow()
print()

range
repr()
reversed
round()
set
setattr()
slice
sorted()
staticmethod
str
sum()
super
tuple
type
zip
ArithmeticError
AssertionError
AttributeError
BaseException
EOFError
Ellipsis
Exception
GeneratorExit
ImportError
IndentationError
IndexError
KeyError
KeyboardInterrupt
LookupError
MemoryError
NameError

NotImplementedError
OSError
OverflowError
ReloadException
RuntimeError
StopIteration
SyntaxError
SystemExit
TypeError
UnicodeError
ValueError

ZeroDivisionError
__build_class__()
__import__()
__name__='builtins'
__repl_print__()
abs()
all()

bin()
bool
bytearray
bytes
callable()
chr()
classmethod


dict
dir()
divmod()
enumerate
eval()
exec()
filter
float

getattr()
globals()
hasattr()
hash()
help()
hex()
id()
input()
int
isinstance()
issubclass()
iter()
len()
list
locals()
map
max()
memoryview
min()
next()
object
oct()
open()
ord()
pow()
print()
property
range
repr()

round()
set
setattr()
slice
sorted()
staticmethod
str
sum()
super
tuple
type
zip
Total: 218
Total: 197
Total: 218
Total: 210
Total: 212


D'où le classement suivant :
  1. TI-Nspire
    et
    Casio Graph 35+E/75+E
    avec
    218
    entrées
  2. module
    TI-Python
    pour
    TI-83 Premium CE
    avec
    212
    entrées
  3. NumWorks
    avec
    210
    entrées
  4. Casio Graph 90+E
    avec
    197
    entrées

Avec pas moins de 212 éléments présents à ce jour dans son module
builtins
, l'implémentation
Python
du module externe
TI-Python
n'est certes pas la plus complète. Toutefois elle se classe quand même honorablement parmi les plus complètes à la 2nde place, deux cheveux devant la
NumWorks
, et laisse la
Graph 90+E
loin derrière ! :bj:

Mais quel dommage que ce module externe
TI-Python
apparemment aussi complet ne soit pas utilisable aux examens en France !... :'(
Lien vers le sujet sur le forum: Module TI-Python: découverte fonctions builtins cachées ! (Commentaires: 4)

-
Rechercher
-
Sujets à la une
"NumWorks++": Challenge de modification matérielle pour rajouter une puce de mémoire Flash !
Offre TI-Planet/Jarrety pour avoir la TI-83 Premium CE avec son chargeur pour 79,79€ port inclus !
Offre TI-Planet/Jarrety pour avoir la TI-Nspire CX CAS à seulement 130€ TTC port inclus!
Jailbreake ta TI-Nspire avec Ndless et profite des meilleurs jeux et applications !
Transforme ta TI-Nspire CX en console Game Boy Advance!
12345
-
Donations/Premium
Pour plus de concours, de lots, de tests, nous aider à payer le serveur et les domaines...
PayPal : paiement en ligne sécurisé - secure online payments
Découvrez les avantages d'un compte donateur !
JoinRejoignez the donors and/or premium!les donateurs et/ou premium !


Partenaires et pub
Notre partenaire Jarrety 
-
Stats.
586 utilisateurs:
>541 invités
>39 membres
>6 robots
Record simultané (sur 6 mois):
6892 utilisateurs (le 07/06/2017)
-
Autres sites intéressants
Texas Instruments Education
Global | France
 (English / Français)
Banque de programmes TI
ticalc.org
 (English)
La communauté TI-82
tout82.free.fr
 (Français)