Concours de l'avent
Posted: 02 Dec 2019, 18:22
Je crée ce topic pour plus de lisibilité:
critor wrote:Pour 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 !
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 !
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 :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.
- 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é)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 !
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 !
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 !
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.
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 :
Jour 13 :
Jour 14 :
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 :
Jour 18 :
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:Mon 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:
Tu devrais tentermain(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 !
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:Tu devrais tentermain(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:Je 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.La 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 !
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 hSi 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 !
Et si tu t'ennuies toujours, tu peux créer un script Python de Noël pour NumWorks afin justement de gagner une NumWorks !