Page 1 of 8

Concours de l'avent

Unread postPosted: 02 Dec 2019, 18:22
by edgar13
Je crée ce topic pour plus de lisibilité: :D
critor wrote:
11506Pour cette nouvelle période de l'Avent, TI-Planet se propose de te faire gagner une calculatrice graphique conforme avec le mode examen 2020. Et pas n'importe quelle calculatrice graphique, la superbe TI-Nspire CX II-T ! :bj:

Chaque jour sera publié un petit bout de code Python accompagné d'un indice. A l'aide de tous ces éléments, il te suffira tout simplement de deviner la réponse, et d'être le ou la première à nous la communiquer à ton choix en commentaire ou par courriel à info@tiplanet.org ! :D

Tu peux communiquer librement en public ou privé au sujet de l'énigme, et tenter de répondre autant de fois que tu le souhaites. ;)

Les calculatrices de milieu de gamme comme la TI-83 Premium CE Edition Python ou les Casio Graph 35/75/90+E peuvent faire du calcul exact, mais nous les qualifions usuellement de calculatrices semi-exactes. En réalité elles utilisent un algorithme de type QPiRac qui ne gère que certaines formes de résultats que voici ici généralisées :
  • multiples rationnels de π :
    $mathjax$\pm\frac{a\pi}{b}$mathjax$
    (pour la trigonométrie)
  • binôme de rationnels et/ou radicaux :
    $mathjax$\frac{\pm a\sqrt{b} \pm c\sqrt{d}}{f}$mathjax$
    (notamment pour les racines de polynômes du second degré)
Pour tout ce qui ne rentre pas dans une de ces deux familles, la calculatrice basculera sur un résultat en écriture décimale éventuellement approchée, ce qui dans ce dernier cas ne te servira pas à grand chose sur une copie.
Si jusqu'à présent ces capacités calculatoires étaient optimales pour le programme de Mathématiques de Première, ce n'est plus le cas avec le nouveau programme de Spécialité Mathématique de cette rentrée 2019. Sont effectivement abordées les exponentielles non gérées par ces machines.

Sans aller chercher dans le coût du haut de gamme il existe toutefois plusieurs solutions supérieures. L'une d'entre elles est la nouvelle calculatrice TI-Nspire CX II-T. Il s'agit en effet d'une véritable calculatrice exacte acceptant à la différence de simplifier certes les exponentielles, mais plus généralement n'importe quelle expression numérique ! :D

Elle utilise en effet les algorithmes travaillant sur des arbres de calculs de la TI-Nspire CX II-T CAS, à la seule et unique différence qu'elle ne les applique qu'à des opérandes numériques - pas de calcul littéral. Un petit bijou optimal pour les Mathématique du lycée et en prime conforme avec le mode examen pour le BAC 2020+, que tu peux donc gagner dès maintenant ! :bj:


Jour 1 :
? wrote:Bonjour. Ceci est mon code...
Code: Select all
from random import *
from math import *
from sys import *
ml=11
def htab(n,s=""):
  while(len(s)<n):s+=" "
  return s[:n]
def vtab(n):return "\n"*n
def home():print(vtab(ml))
def main(p1=0,p2=2,p3=0,p4=0,p5=1):
  home()
  ...

Jour 2 :
? wrote:... ou plus précisément ceci une adaptation de mon code...
Code: Select all
  ...
  for a in range(30):
    r=randint(0,9)
    ...

Jour 3 :
? wrote:... et voici donc la suite du début de mon code :
Code: Select all
    ...
    t=str(sin(r))
    ...

Et puis tant que nous y sommes, voici également sa ligne 23 :
Code: Select all
    print(t)

Jour 4 :
? wrote:On reprend maintenant ligne 15 :
Code: Select all
    t=htab(6,t)
    ...

Ce que tu peux voir est donc ce que j'affiche...

Jour 5 :
? wrote:... à la différence que moi ce sera en vert sur fond noir.
Code: Select all
    ...
    t+=" "*6
    t=htab(11,t)
    t+=str(cos(r))
    ...

Jour 6 :
? wrote:Mon code intégral fait 89 lignes...
Code: Select all
    ...
    t=htab(18,t)
    ...

Jour 7 :
? wrote:... du moins dans cette adaptation.
Code: Select all
    ...
    t+=" "*6
    t=htab(23,t)
    t+=str(tan(r))
    ...

Jour 8 :
? wrote:Comme tu as dû le remarquer, cette adaptation de mon code est conçue pour tourner sur TI-83 Premium CE.

Mais sautons maintenant ligne 24...
Code: Select all
  home()
  l=[]
  ...

... et sautons à nouveau ligne 56...
Code: Select all
  t=len(l)
  l.append('VvVmAZfHcZmXhlAHOQmgiW')
  ...

Jour 9 :
? wrote:Après maintenant une journée complète depuis le gros indice précédent, certains ont sûrement dû trouver la bonne réponse avec l'ordi quantique de leur lycée... ah ben non zut, c'était dimanche ! :troll:

Sautons encore ligne 75...
Code: Select all
  home()
  print(vtab(2),htab(6)+l[k+1])
  ...

Jour 10 :
? wrote:Pour gagner tu dois trouver et prononcer mon nom.

Image

Jour 11 :
? wrote:Sautons ligne 73 :
Code: Select all
  for g in range(3):
    for k in range(t):print(l[k])
  ...

J'ai plusieurs confrères...

Jour 12 :
? wrote:... ainsi qu'un grand frère.

11838

Jour 13 :
? wrote:Mon frère et moi n'avons pas de TI-Nspire CX...
11840

Jour 14 :
? wrote:...mais presque, par homonymie.


Jour 15 :
? wrote:Mon fère et moi avons les mêmes initiales...


Jour 16 :
? wrote:... en prime avec des noms de même longueur !

Code: Select all
  ...
  l.append('jZXZOmAlfHVgEpWPyUpw')
  l.append('cjxHVmlXVHFyyypP^wgw')
  l.append('JxMcZmQhXVzHNNgyPy`py')
  l.append('AlfZmAZfXHOWgNyPgNEp')
  ...

Jour 17 :
? wrote:Sautons maintenant ligne 58 :


Et puis je vais arrêter de parler de mon frère, ça me déprime...

Jour 18 :
? wrote:... tellement il est égocentrique.


Jour 19 :
? wrote:J'ai presque autant de mémoire qu'une TI-Nspire CX...


Jour 20 :
? wrote:... 125Mo plus précisément, chose révolutionnaire pour l'époque !

Sautons ligne 77 :
Code: Select all
  t=k+2
  for g in range(3):
    print(vtab(ml-12))
    u=t
    for f in range(3):
      print(vtab(ml-10))
      for k in range(u,u+4-(f==2)):print(htab(4)+l[k])
      u=k+1
...

Jour 21 :
? wrote:Sautons ligne 72 :
Code: Select all
  for k in range(t):l[k]=htab(14,l[k][:-9])+l[k][-9:]
  ...

Je pense, donc je suis.

Jour 22 :
? wrote:Sautons ligne 85 :
Code: Select all
def da(a,b,c,d,e,f):
  g,h=0,""
  while f*g%c!=1:g+=1
  for k in range(len(a)):h+=chr(g*(ord(a[k])-d-e)%c+b)
  return h

Mon codage est enseigné pour la dernière fois cette année en Terminale S... ;)

Jour 23 :
? wrote:Et sautons aujourd'hui ligne 71 pour mon dernier morceau :
Code: Select all
  for k in range(len(l)):l[k]=da(l[k],p1,p2,p3,p4,p5)
  ...

... plus précisément en Spécialité Mathématiques.

Jour 24 :
? wrote:11931Mon code s'utilise ainsi :
Code: Select all
from avent19 import *
main()

Et en passant, voici pour référence ma fonction de codage :
Code: Select all
def ca(j,o,y,e,u,x):
  noel=""
  for k in range(len(j)):noel+=chr(((ord(j[k])-e)*o+y)%u+x)
  return noel

Qui suis-je ?...

Jour 25 :
[justify]
? wrote:11940

Tu devrais tenter main(32,59).

Je vais comme au matin de la vie.
Je dispose d'un temps d'accès comme une vie de Beryllium 13... ou comme deux demies je veux dire.
Décidément, le TIPC (Texas Instruments Professionnel Computer) n'avait aucune change de me voler la vedette ! :#non#:
J'ai un confrère qui s'appelle Zoom... et un autre Turbo.
Sauras-tu trouver les clés pour me faire démarrer ? ;)

Jour 26 :
[justify]
? wrote:11949Tu devrais tenter main(32,59,64,45).

Méfie-toi des imitations :
Code: Select all
Send("CONNECT RGB
8→N
0→D
1→S
suite(255/cosh(X-N),X,1,N→L₁
N→dim(L₂
0L₂+N-1→L₂
While non(getKey
  max(0,L₂-1→L₂
  N-1→L₂(D+1
  For(I,0,N-1
    Send("SET RGB eval(I+N) eval(L₁(1+L₂(I+1))) 0 0
  End
  D+S→D
  S(1-2(D=N-1 ou non(D→S
End
Send("DISCONNECT RGB

Jour 27 :
KITT wrote:11980Je suis KITT, la voiture de la série K2000 (ou Knight Rider en anglais) :

Dans ma série apparaissait également régulièrement un ordinateur TIPC (Texas Instruments Professional Computer), sur lequel on avait rajouté quelques autocollants avec le logo Texas Intruments afin de bien mettre en valeur ce constructeur. ;)


Notre énigme de l'Avent 2019 que nous te proposions depuis le 1er décembre avec des indices et morceaux de Python quotidiens est maintenant terminée.

La réponse était donc KITT.

En effet, dans l'épisode 2 de la saison 3 de K2000, Le Roi des robots - 2/2, KITT affiche une première version d'un code source en langage BASIC Applesoft, reconnaissable à ses instructions HTAB et VTAB :


Dans l'épisode 11, Le Caméléon, on voit KITT enfin exécuter ce code, dans une version corrigée et complétée.

Voici le code final en question, que tu pourras par exemple coller et lancer sur un émulateur d'Applesoft BASIC en ligne :
Code: Select all
1  SPEED= 240
50  HOME
55  INPUT "";W$
70  HTAB 9
82  HTAB 9
85  PRINT
90  FOR A = 1 TO 30
100 R =  RND (9)
140  HTAB 1
150  PRINT  SIN (R),
151  HTAB 7: PRINT "      ",
155  HTAB 12
160  PRINT  COS (R),
161  HTAB 19: PRINT "      ",
165  HTAB 24
170  PRINT  TAN (R),
171  HTAB 28: PRINT "       ",
200  NEXT A
300  HOME
350  FOR G = 1 TO 3
400  PRINT "MARK MARSHALL 3526-3782"
410  PRINT "DON SHARP     2415-3816"
420  PRINT "BILL STARK    3454-3921"
430  PRINT "KURT BORG     5647-2931"
440  PRINT "LEROY JOESEPH 5473-3333"
450  PRINT "KEVIN DOWNEY  9990-6969"
460  PRINT "ERIC VESPER   2738-4628"
470  PRINT "MIMI SOUDAN   3425-2837"
480  PRINT "C. GIBSON     3516-9827"
490  PRINT "CHRIS MILLER  4622-2819"
500  PRINT "JOHN SITCOM   2516-3981"
510  PRINT "STEVE PENCE   3617-2938"
520  PRINT "PHIL MORITS   5783-4720"
530  PRINT "MARK FOSTER   4537-1984"
540  PRINT "DEKE MILLER   4527-4729"
550  PRINT "BRAD REYZE    3541-3721"
560  PRINT "RANDY RODGERS 4627-4478"
570  PRINT "DENNIS PARR   3621-2836"
590  PRINT "DAN BUCK      4526-4627"
600  PRINT "A.J. MCDONALD 3619-8972"
610  PRINT "IAN WAYNE     3276-8567"
620  PRINT "JIM DAWSON    4562-4362"
630  PRINT "JUDY ALLEN    5171-9292"
640  PRINT "DAVID CAZARUS 9475-4627"
650  PRINT "MIKE CRAVEN   4562-7829"
660  PRINT "BILL BUSAK    3546-3719"
670  PRINT "HELEN DAVIS   5632-1938"
680  PRINT "CHRIS ALSIP   1113-7858"
690  PRINT "BRUCE GOLSKI  4451-1031"
695  PRINT "DAVE DEVLIN   2541-5463"
700  NEXT G
800  HOME
850  FLASH
875  HTAB 7
880  VTAB 3
900  PRINT "SYSTEMS DEVICE LOADING 5.2"
950  NORMAL
960  FOR G = 1 TO 3
975  PRINT : PRINT : PRINT : PRINT : PRINT : PRINT : PRINT : PRINT : PRINT : PRINT
990  PRINT : PRINT : PRINT : PRINT : PRINT
1000  PRINT "     WHAT THE HECK"
1100  PRINT "     THE JURY DECISION"
1200  PRINT "     TO DENY MAYOR SMITH"
1300  PRINT "     HIS CHOICE OF"
1400  PRINT : PRINT : PRINT : PRINT : PRINT : PRINT : PRINT : PRINT : PRINT : PRINT
1500  PRINT "     THESE AND OTHER"
1600  PRINT "     STORIES CAN BE SEEN"
1700  PRINT "     ON THE AMAZING"
1800  PRINT "     CANTERBURY STORIES"
1900  PRINT : PRINT : PRINT : PRINT : PRINT : PRINT : PRINT : PRINT : PRINT : PRINT
2000  PRINT "     KNIGHT INDUSTRIES"
2100  PRINT "     TWO THOUSAND"
2200  PRINT "     LOADED AND READY"
2300 NEXT G


Nous t'avions fort fidèlement adapté ce code en Python, mais en y rajoutant un codage affine (Terminale S Spécialité Mathématiques) des chaînes de caractères affichées :
Code: Select all
from random import *
from math import *
from sys import *
ml=11
def htab(n,s=""):
  while(len(s)<n):s+=" "
  return s[:n]
def vtab(n):return "\n"*n
def home():print(vtab(ml))
def main(p1=0,p2=2,p3=0,p4=0,p5=1):
  home()
  for a in range(30):
    r=randint(0,9)
    t=str(sin(r))
    t=htab(6,t)
    t+=" "*6
    t=htab(11,t)
    t+=str(cos(r))
    t=htab(18,t)
    t+=" "*6
    t=htab(23,t)
    t+=str(tan(r))
    print(t)
  home()
  l=[]
  l.append('qlxzmqlxVjlXXpgWEPp^wW')
  l.append('AhOmVjlxFWNygPpwyE')
  l.append('JHXXmVolxzpNgNPpUWy')
  l.append('zMxomJhxQgEN^PWUpy')
  l.append('XZxhvmahZVZFjgN^pPpppp')
  l.append('zZfHOmAhDOZvUUU`PEUEU')
  l.append('ZxHcmfZVFZxW^pwPNEWw')
  l.append('qHqHmVhMAlOpNWgPWwp^')
  l.append('cimQHJVhOpgyEPUwW^')
  l.append('cjxHVmqHXXZxNEWWPWwyU')
  l.append('ahjOmVHochqWgyEPpUwy')
  l.append('VoZfZmFZOcZpEy^PWUpw')
  l.append('FjHXmqhxHoVg^wpPN^W`')
  l.append('qlxzmshVoZxNgp^PyUwN')
  l.append('AZzZmqHXXZxNgW^PN^WU')
  l.append('JxlAmxZvTZpgNyPp^Wy')
  l.append('xlOAvmxhAQZxVNEW^PNN^w')
  l.append('AZOOHVmFlxxEWyPWwpE')
  l.append('AlOmJMczNgWEPNEW^')
  l.append('liaimqcAhOlXApEyUPwU^W')
  l.append('HlOmDlvOZpW^EPwgE^')
  l.append('aHqmAlDVhONgEWPNpEW')
  l.append('aMAvmlXXZOgy^yPUWUW')
  l.append('AlfHAmclTlxMVUN^gPNEW^')
  l.append('qHzZmcxlfZOgEWP^wWU')
  l.append('JHXXmJMVlzpgNEPp^yU')
  l.append('jZXZOmAlfHVgEpWPyUpw')
  l.append('cjxHVmlXVHFyyypP^wgw')
  l.append('JxMcZmQhXVzHNNgyPy`py')
  l.append('AlfZmAZfXHOWgNyPgNEp')
  t=len(l)
  l.append('VvVmAZfHcZmXhlAHOQmgiW')
  l.append('DjlomojZmjZcz')
  l.append('ojZmaMxvmAZcHVHhO')
  l.append('ohmAZOvmqlvhxmVqHoj')
  l.append('jHVmcjhHcZmhs')
  l.append('ojZVZmlOAmhojZx')
  l.append('VohxHZVmclOmJZmVZZO')
  l.append('hOmojZmlqlTHOQ')
  l.append('clOoZxJMxvmVohxHZV')
  l.append('zOHQjomHOAMVoxHZV')
  l.append('oDhmojhMVlOA')
  l.append('XhlAZAmlOAmxZlAv')
  l.append('BmlHOVHmlssHcjZmqhOmchAZi')
  l.append('_MHmVMHVPaZmu')
  for k in range(len(l)):l[k]=da(l[k],p1,p2,p3,p4,p5)
  for k in range(t):l[k]=htab(14,l[k][:-9])+l[k][-9:]
  for g in range(3):
    for k in range(t):print(l[k])
  home()
  print(vtab(2),htab(6)+l[k+1])
  t=k+2
  for g in range(3):
    print(vtab(ml-12))
    u=t
    for f in range(3):
      print(vtab(ml-10))
      for k in range(u,u+4-(f==2)):print(htab(4)+l[k])
      u=k+1 
def da(a,b,c,d,e,f):
  g,h=0,""
  while f*g%c!=1:g+=1
  for k in range(len(a)):h+=chr(g*(ord(a[k])-d-e)%c+b)
  return h

Le décodage d'une seule de ces chaînes permettait de trouver la réponse via une simple recherche Google.

11828La réponse a été trouvée et formulée :
  • dès le 20 décembre par RdB qui a tilté sur les 125 Mo de mémoire de KITT (ou plus précisément dans la série 1000 Mbits), capacité peu usuelle en informatique où tout se chiffre normalement en puissances de 2
  • puis le 24 décembre par Pavel qui quant à lui s'est appuyé sur le script Python fourni et en a cassé le codage affine

Félicitations, vous gagnez donc tous les deux les 2 superbes calculatrices TI-Nspire CX II-T mises en jeu ! :bj:

Téléchargement : KITT animation
(pour TI-83 Premium CE connectée à un TI-RGB Array via un TI-Innovator Hub)
Résumé :
Code: Select all
from random import *
from math import *
from sys import *
ml=11
def htab(n,s=""):
  while(len(s)<n):s+=" "
  return s[:n]
def vtab(n):return "\n"*n
def home():print(vtab(ml))
def main(p1=0,p2=2,p3=0,p4=0,p5=1):
  home()
  for a in range(30):
    r=randint(0,9)
    t=str(sin(r))
    t=htab(6,t)
    t+=" "*6
    t=htab(11,t)
    t+=str(cos(r))
    t=htab(18,t)
    t+=" "*6
    t=htab(23,t)
    t+=str(tan(r))
    print(t)
  home()
  l=[]
  l.append('qlxzmqlxVjlXXpgWEPp^wW')
  l.append('AhOmVjlxFWNygPpwyE')
  l.append('JHXXmVolxzpNgNPpUWy')
  l.append('zMxomJhxQgEN^PWUpy')
  l.append('XZxhvmahZVZFjgN^pPpppp')
  l.append('zZfHOmAhDOZvUUU`PEUEU')
  l.append('ZxHcmfZVFZxW^pwPNEWw')
  l.append('qHqHmVhMAlOpNWgPWwp^')
  l.append('cimQHJVhOpgyEPUwW^')
  l.append('cjxHVmqHXXZxNEWWPWwyU')
  l.append('ahjOmVHochqWgyEPpUwy')
  l.append('VoZfZmFZOcZpEy^PWUpw')
  l.append('FjHXmqhxHoVg^wpPN^W`')
  l.append('qlxzmshVoZxNgp^PyUwN')
  l.append('AZzZmqHXXZxNgW^PN^WU')
  l.append('JxlAmxZvTZpgNyPp^Wy')
  l.append('xlOAvmxhAQZxVNEW^PNN^w')
  l.append('AZOOHVmFlxxEWyPWwpE')
  l.append('AlOmJMczNgWEPNEW^')
  l.append('liaimqcAhOlXApEyUPwU^W')
  l.append('HlOmDlvOZpW^EPwgE^')
  l.append('aHqmAlDVhONgEWPNpEW')
  l.append('aMAvmlXXZOgy^yPUWUW')
  l.append('AlfHAmclTlxMVUN^gPNEW^')
  l.append('qHzZmcxlfZOgEWP^wWU')
  l.append('JHXXmJMVlzpgNEPp^yU')
  l.append('jZXZOmAlfHVgEpWPyUpw')
  l.append('cjxHVmlXVHFyyypP^wgw')
  l.append('JxMcZmQhXVzHNNgyPy`py')
  l.append('AlfZmAZfXHOWgNyPgNEp')
  t=len(l)
  l.append('VvVmAZfHcZmXhlAHOQmgiW')
  l.append('DjlomojZmjZcz')
  l.append('ojZmaMxvmAZcHVHhO')
  l.append('ohmAZOvmqlvhxmVqHoj')
  l.append('jHVmcjhHcZmhs')
  l.append('ojZVZmlOAmhojZx')
  l.append('VohxHZVmclOmJZmVZZO')
  l.append('hOmojZmlqlTHOQ')
  l.append('clOoZxJMxvmVohxHZV')
  l.append('zOHQjomHOAMVoxHZV')
  l.append('oDhmojhMVlOA')
  l.append('XhlAZAmlOAmxZlAv')
  l.append('BmlHOVHmlssHcjZmqhOmchAZi')
  l.append('_MHmVMHVPaZmu')
  for k in range(len(l)):l[k]=da(l[k],p1,p2,p3,p4,p5)
  for k in range(t):l[k]=htab(14,l[k][:-9])+l[k][-9:]
  for g in range(3):
    for k in range(t):print(l[k])
  home()
  print(vtab(2),htab(6)+l[k+1])
  t=k+2
  for g in range(3):
    print(vtab(ml-12))
    u=t
    for f in range(3):
      print(vtab(ml-10))
      for k in range(u,u+4-(f==2)):print(htab(4)+l[k])
      u=k+1 
def da(a,b,c,d,e,f):
  g,h=0,""
  while f*g%c!=1:g+=1
  for k in range(len(a)):h+=chr(g*(ord(a[k])-d-e)%c+b)
  return h

PayPal - la solution de paiement en ligne la plus simple et la plus sécurisée !

Si toujours rien, pour patienter d'ici le prochain indice tu peux aller faire un petit tour sur le Puzzle de l'Avent 2019 par Planète Casio pour gagner une Casio Graph 35+E II ! :bj:

Et si tu t'ennuies toujours, tu peux créer un script Python de Noël pour NumWorks afin justement de gagner une NumWorks ! :bj:

Re: Calendrier de l'avant

Unread postPosted: 02 Dec 2019, 18:23
by critor
C'est super sympa de ta part. :)

Re: Calendrier de l'avant

Unread postPosted: 02 Dec 2019, 19:53
by Programmator88
Super initiative merci beaucoup 👌

Re: Calendrier de l'avant

Unread postPosted: 02 Dec 2019, 20:04
by Larwive
J'ai cru à un troll en lisant "Calendrier de l'avant".
Sinon, super idée.

Re: Calendrier de l'avant

Unread postPosted: 02 Dec 2019, 20:28
by edgar13
De rien :D

Re: Calendrier de l'avant

Unread postPosted: 04 Dec 2019, 13:59
by critor
Fidèle au poste je vois, merci à toi. :)

Re: Calendrier de l'avent

Unread postPosted: 05 Dec 2019, 11:09
by Wistaro
Merci ;)

Re: Calendrier de l'avent

Unread postPosted: 05 Dec 2019, 12:20
by critor
Merci une fois de plus @edgar13, je lie maintenant ton travail dans les annonces quotidiennes. :)

N'hésite pas à fusionner les bouts de code Python. ;)

Re: Calendrier de l'avent

Unread postPosted: 05 Dec 2019, 15:42
by edgar13
Petit résumé fait :p

Re: Calendrier de l'avent

Unread postPosted: 05 Dec 2019, 15:52
by edgar13
Je me suis peut-être trompé dans l'ordre. :mmm:
Car mon script n'affiche rien. :(