π
<-

[Mini-Challenge Basic #7] : Pi

Sous-forums réunissant les mini-challenges en TI-Basic Nspire

[Mini-Challenge Basic #7] : Pi

Unread postby pierrotdu18 » 07 Jul 2014, 15:51

Bonjour à tous :)

Comme je ne sais pas quoi faire je vous propose un nouveau défi !

Ce dernier consiste à trouver les 500 premières décimales de
$mathjax$\pi$mathjax$
.

Règles :
  • Le programme devra s'appeler getPi()
  • Il devra renvoyer une string qui contiendra les chiffres de
    $mathjax$\pi$mathjax$
    , cette chaîne doit commencer par "3.14" et non par "314"
  • Il est interdit d'utiliser une LUT (ou une "LUS" Adriweb... :troll:), tous les chiffres du premier au dernier devront être générés par votre algorithme
  • Il est interdit de se servir de commandes ou de constantes proposées par la calculatrice pour pouvoir générer les premiers chiffres
  • Les appels aux fonctions nécessitant le CAS sont autorisées

Évaluation :
  • Le programme que vous proposerez vous vaudra un résultat qui devra être le plus petit possible
  • Ce résultat sera égal au temps d’exécution de votre programme multiplié par la longueur de son code en caractères
  • Les caractères seront comptés à partir de "Prgm" jusqu'à "EndPrgm" exclus
  • Les retours à la ligne ainsi que TOUS les espaces ne sont pas comptabilisés
  • Les tests de vitesse se feront sur ma calculatrice (TI-Nspire CX CAS 3.6 Ndlessée, non overclockée)

Bonne programmations à vous et n'hésitez pas à me dire si mes règles sont trollables (même si j'ai essayé d'éviter le plus gros... :p)

PS: Vous m'enverrez votre code par MP, et j'annoncerai publiquement vos résultats (temporaires ou pas). Vous pouvez envoyer autant de participations que vous voudrez, seul la meilleure sera retenue.


Le défi se terminera le 15 juillet à 12h00
Last edited by pierrotdu18 on 07 Jul 2014, 16:36, edited 2 times in total.
Bonjour
User avatar
pierrotdu18Premium
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Level up: 40.5%
 
Posts: 975
Joined: 07 Nov 2013, 20:18
Location: Paris V
Gender: Male
Calculator(s):
MyCalcs profile
Class: MP* Lycée Henri IV

Re: [Mini-Challenge Basic #7] : Pi

Unread postby Adriweb » 07 Jul 2014, 16:04

Mon algorithme est simple, il renvoie un string contenant ce qu'on veut, même pas besoin de LUT :D

Code: Select all
Return "3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989"


:troll:

MyCalcs: Help the community's calculator documentations by filling out your calculators info!
MyCalcs: Aidez la communauté à documenter les calculatrices en donnant des infos sur vos calculatrices !
Inspired-Lua.org: All about TI-Nspire Lua programming (tutorials, wiki/docs...)
My calculator programs
Mes programmes pour calculatrices
User avatar
AdriwebAdmin
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Level up: 80%
 
Posts: 14842
Images: 1133
Joined: 01 Jun 2007, 00:00
Location: France
Gender: Male
Calculator(s):
MyCalcs profile
Twitter: adriweb
GitHub: adriweb

Re: [Mini-Challenge Basic #7] : Pi

Unread postby pierrotdu18 » 07 Jul 2014, 16:05

Non, non, non, non, non, non, non :troll:

Par LUT je restreins à toutes les chaînes de caractères qui te permettraient de troller :D
Bonjour
User avatar
pierrotdu18Premium
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Level up: 40.5%
 
Posts: 975
Joined: 07 Nov 2013, 20:18
Location: Paris V
Gender: Male
Calculator(s):
MyCalcs profile
Class: MP* Lycée Henri IV

Re: [Mini-Challenge Basic #7] : Pi

Unread postby Bisam » 08 Jul 2014, 10:29

Bon, je pensais au départ que c'était vraiment trop pour les capacités de la calculette, mais finalement, c'est largement faisable, même si l'algo que j'ai pour l'instant mettrait environ 1h15 pour calculer les 1000 décimales.

J'ai pour l'instant une solution en 300 caractères environ qui met 10 secondes pour 50 décimales et 43 secondes pour 100 décimales.
(Mince, j'ai fait une fonction "calculpi" au lieu d'un programme "getPi" mais bon, je ne crois pas qu'on m'en tiendra rigueur...)
User avatar
BisamAdmin
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Level up: 69.6%
 
Posts: 5670
Joined: 11 Mar 2008, 00:00
Location: Lyon
Gender: Male
Calculator(s):
MyCalcs profile

Re: [Mini-Challenge Basic #7] : Pi

Unread postby pierrotdu18 » 08 Jul 2014, 11:50

Ah cool ! :)
J'espère que tu iras en dessous de 1h ;)

En tout cas quand tu auras une version "officielle" tu me l'enverras par MP ;)
Bonjour
User avatar
pierrotdu18Premium
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Level up: 40.5%
 
Posts: 975
Joined: 07 Nov 2013, 20:18
Location: Paris V
Gender: Male
Calculator(s):
MyCalcs profile
Class: MP* Lycée Henri IV

Re: [Mini-Challenge Basic #7] : Pi

Unread postby Bisam » 09 Jul 2014, 11:09

Je progresse...
Je suis à 12 secondes pour 300 décimales et 47 secondes pour 500 décimales.

[Edit] À présent, 7 secondes pour 300 décimales et 26 secondes pour 500 décimales. Je pense que les 1000 décimales sont maintenant facilement atteignables... si je n'ai pas un dépassement de ressources !
User avatar
BisamAdmin
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Level up: 69.6%
 
Posts: 5670
Joined: 11 Mar 2008, 00:00
Location: Lyon
Gender: Male
Calculator(s):
MyCalcs profile

Re: [Mini-Challenge Basic #7] : Pi

Unread postby Adriweb » 09 Jul 2014, 13:02

GG :)
Hâte de voir ce fameux algo optimisé :P

MyCalcs: Help the community's calculator documentations by filling out your calculators info!
MyCalcs: Aidez la communauté à documenter les calculatrices en donnant des infos sur vos calculatrices !
Inspired-Lua.org: All about TI-Nspire Lua programming (tutorials, wiki/docs...)
My calculator programs
Mes programmes pour calculatrices
User avatar
AdriwebAdmin
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Level up: 80%
 
Posts: 14842
Images: 1133
Joined: 01 Jun 2007, 00:00
Location: France
Gender: Male
Calculator(s):
MyCalcs profile
Twitter: adriweb
GitHub: adriweb

Re: [Mini-Challenge Basic #7] : Pi

Unread postby Bisam » 09 Jul 2014, 13:09

J'ai un bug...
Je n'obtiens que 792 décimales... et ensuite, j'ai des "iPart(undef)".
Pour l'instant, je ne sais pas trop d'où ça vient, mais je soupconne un dépassement de capacité.
User avatar
BisamAdmin
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Level up: 69.6%
 
Posts: 5670
Joined: 11 Mar 2008, 00:00
Location: Lyon
Gender: Male
Calculator(s):
MyCalcs profile

Re: [Mini-Challenge Basic #7] : Pi

Unread postby Bisam » 09 Jul 2014, 17:43

Bon, j'ai beau tourner le problème dans tous les sens, je ne vois pas comment faire mieux que ces 792 décimales... à moins de changer encore d'algorithme.
Le problème est que les entiers que j'utilise dépassent la valeur maximale d'un entier sur Nspire (à savoir 2^3296-1, soit environ 10^992)
Le seul moyen de m'en sortir serait de faire une gestion des nombres entiers plus grands... j'y viendrai peut-être plus tard.

Voici le 1er code que j'avais avec l'algorithme compte-gouttes :
Code: Select all
Define calculpi(n)=
Func
Local m,p,r,s,ret,i,j,st
n+1→n
newList(n)→p
intDiv(10n,3)+4→m
20+newList(m+1)→r
0→ret
For i,1,n
  For j,m,1,-1
    r[j+1]+ret→s
    mod(s,2j+1)→r[j+1]
    intDiv(s,2j+1)*j→ret
  EndFor
  r[1]+ret→s
  If s>99 Then
    p[i-1]+intDiv(s,100)→p[i-1]
    mod(s,100)→s
  EndIf
  mod(s,10)→r[1]
  intDiv(s,10)→p[i]
  10r→r
EndFor
"3,"→st
For i,2,n
  st&string(p[i])→st
EndFor
EndFunc


Mais ce code n'était pas très performant car quadratique (mais ne manipulant que de petits nombres...)

J'ai donc trouvé un autre algorithme (qui fait en fait les mêmes calculs, mais différemment) et je l'ai traduit pour utiliser pleinement les possibilités de la calculette :
Code: Select all
Define getpi(n)=
Func
Local m,p,q,d,st
[[4,12][1,4]]→m
1→p
3→q
""→st
While n>=0
  p+q→p
  q+2→q
  m*[[0,p][1,q]]→m
© Ici, j'ai dû rajouter ces simplifications pour dépasser 300 décimales
  If max(mat▶list(m))>10^100
    m/gcd(gcd(gcd(m[1,1],m[1,2]),m[2,1]),m[2,2])→m
© Fin des simplifications rajoutées
  intDiv(m[1],m[2])→d
  While d[1,1]=d[1,2] and n>=0
    st&string(d[1,1])→st
    n-1→n
    10mod(m[1],m[2])→m[1]
    intDiv(m[1],m[2])→d
  EndWhile
EndWhile
"3,"&mid(st,2)
EndFunc


Les simplifications rajoutées permettent d'atteindre 787 décimales exactes en un peu moins de 2 minutes... et ensuite, plus rien car on dépasse les capacités de la calculette comme expliqué plus haut.
User avatar
BisamAdmin
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Level up: 69.6%
 
Posts: 5670
Joined: 11 Mar 2008, 00:00
Location: Lyon
Gender: Male
Calculator(s):
MyCalcs profile

Re: [Mini-Challenge Basic #7] : Pi

Unread postby Excale » 09 Jul 2014, 18:07

J'ai fait une version qui atteint 1000 chiffres.*

Mais!
C'est de moi, donc c'est du troll. Qui a dit en base 10?
Code: Select all
Define getPi()=
Func
Local s,i
s:="3.14_"
For i,0,250
  s:=s&{"0000","0001","0010","0011","0100","0101","0110","0111","1000","1001","1010","1011","1100","1101","1110","1111"}[iPart(16*fPart(∑(16^(i-k)*(((4)/(8*k+1))-((2)/(8*k+4))-((1)/(8*k+5))-((1)/(8*k+6))),k,0,i+11)))+1]
EndFor
EndFunc

(le "3.14_" c'est pour respecter la règle..., ça ne sert à rien)

Encore plus troll:
Code: Select all
Define getPi()=
Func
"3.14256789"
EndFunc

Oui, ça contient tous les chiffres de Pi, et en base 10.

*Je suis intéressé par un cross checking, je n'ai trouvé sur internet que les ~10 premières décimales.
User avatar
ExcaleAdmin
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Level up: 3.9%
 
Posts: 2955
Images: 3
Joined: 10 Sep 2010, 00:00
Gender: Male
Calculator(s):
MyCalcs profile

Next

Return to Mini-Challenges

Who is online

Users browsing this forum: ClaudeBot [spider] and 0 guests

-
Search
-
Social TI-Planet
-
Featured topics
Comparaisons des meilleurs prix pour acheter sa calculatrice !
"1 calculatrice pour tous", le programme solidaire de Texas Instruments. Reçois gratuitement et sans aucune obligation d'achat, 5 calculatrices couleur programmables en Python à donner aux élèves les plus nécessiteux de ton lycée. Tu peux recevoir au choix 5 TI-82 Advanced Edition Python ou bien 5 TI-83 Premium CE Edition Python.
Enseignant(e), reçois gratuitement 1 exemplaire de test de la TI-82 Advanced Edition Python. À demander d'ici le 31 décembre 2024.
Aidez la communauté à documenter les révisions matérielles en listant vos calculatrices graphiques !
1234
-
Donations / Premium
For more contests, prizes, reviews, helping us pay the server and domains...
Donate
Discover the the advantages of a donor account !
JoinRejoignez the donors and/or premium!les donateurs et/ou premium !


Partner and ad
Notre partenaire Jarrety Calculatrices à acheter chez Calcuso
-
Stats.
4120 utilisateurs:
>4061 invités
>52 membres
>7 robots
Record simultané (sur 6 mois):
7582 utilisateurs (le 25/06/2025)
-
Other interesting websites
Texas Instruments Education
Global | France
 (English / Français)
Banque de programmes TI
ticalc.org
 (English)
La communauté TI-82
tout82.free.fr
 (Français)