π
<-

[Mini Challenge Basic #16] Comparaison déraisonnable

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

[Mini Challenge Basic #16] Comparaison déraisonnable

Unread postby Bisam » 29 May 2016, 13:05

Les vacances approchent... et avec elles reviennent les Mini-Challenges !

Pour ce 16ème mini-challenge, je vous propose de créer une fonction compare(n,p) qui prend en arguments deux nombres entiers positifs et qui les comparent... mais pour un ordre inhabituel. La fonction devra renvoyer les mêmes résultats que la fonction suivante :
Code: Select all
string(n)≤string(p) → compare(n,p)


Cependant, on oblige à ne pas se servir de chaînes de caractères !!

Le critère qui sera privilégié sera la taille en nombre d'octets de votre code.

Bonne chance à tous.
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 #16] Comparaison déraisonnable

Unread postby critor » 29 May 2016, 14:39

Ordre lexicographique sur les nombres donc. ;)

Voici une petite proposition rapide qui semble marcher :
Code: Select all
Define compare(n,p)=
Func
While n≥10
  n/10→n
EndWhile
While p≥10
  p/10→p
EndWhile
While n+p>0
  If int(n)<int(p)
    Return true
  If int(n)>int(p)
    Return false
  10*fPart(n)→n
  10*fPart(p)→p
EndWhile
Return true
EndFunc

(207 caractères)

Petite question sur la comptabilisation des octets.
Si on saisit 10fPart(n), la calculatrice corrige automatiquement après parsing ent 10*fPart(n).
Faut-il donc compte 10 ou 11 octets ?

La question peut sembler ridicule, mais elle est importante si on envisage d'optimiser avec un logarithme décimal.
Car si on saisit log(n), la calculatrice corrigera automatiquement en log(n,10).
Donc là, 6 ou 9 octets, à multiplier par le nombre de logarithmes, ça peut changer bien des choses...

Merci pour ce superbe défi. :)
Image
User avatar
critorAdmin
Niveau 19: CU (Créateur Universel)
Niveau 19: CU (Créateur Universel)
Level up: 53.3%
 
Posts: 42390
Images: 17088
Joined: 25 Oct 2008, 00:00
Location: Montpellier
Gender: Male
Calculator(s):
MyCalcs profile
YouTube: critor3000
Twitter: critor2000
GitHub: critor

Re: [Mini Challenge Basic #16] Comparaison déraisonnable

Unread postby critor » 29 May 2016, 14:49

Petite amélioration toujours sans logarithme :
Code: Select all
Define compare(n,p)=
Func
While n≥10
  n/10→n
EndWhile
While p≥10
  p/10→p
EndWhile
While int(n)=int(p) and n+p>0
  10*fPart(n)→n
  10*fPart(p)→p
EndWhile
Return int(n)≤int(p)
EndFunc

(175 caractères)
Image
User avatar
critorAdmin
Niveau 19: CU (Créateur Universel)
Niveau 19: CU (Créateur Universel)
Level up: 53.3%
 
Posts: 42390
Images: 17088
Joined: 25 Oct 2008, 00:00
Location: Montpellier
Gender: Male
Calculator(s):
MyCalcs profile
YouTube: critor3000
Twitter: critor2000
GitHub: critor

Re: [Mini Challenge Basic #16] Comparaison déraisonnable

Unread postby Bisam » 29 May 2016, 17:06

Ça commence très fort !

J'ai cru avant de tester qu'il y aurait un problème si un des nombres de départ avait trop de chiffres : il me semblait que tes 10*fpart(..) perdraient une partie du nombre en convertissant en réel... mais ils ne le font pas. Ils conservent les fractions et donnent les bons résultats, même avec des nombres très grands !

Bien joué.

Pour ce qui est de l'évaluation du nombre d'octets, je pense qu'il faut compter APRÈS la vérification du code.

À présent, qui dit mieux ?
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 #16] Comparaison déraisonnable

Unread postby Adriweb » 29 May 2016, 17:27

Bizarrement, le code de critor me jète avec une erreur de syntaxe que je ne comprends pas vraiment sur le n/10→n...
J'ai réécrit la ligne, au cas où, pareil.
Tenté aussi Programme/Fonction LibPub ou non, pareil.

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: 79.9%
 
Posts: 14839
Images: 1131
Joined: 01 Jun 2007, 00:00
Location: France
Gender: Male
Calculator(s):
MyCalcs profile
Twitter: adriweb
GitHub: adriweb

Re: [Mini Challenge Basic #16] Comparaison déraisonnable

Unread postby Bisam » 29 May 2016, 17:30

Tu as essayé de réécrire la ligne précédente aussi ?
C'est peut-être le symbole ≥ qui pose problème dans ton copier-coller.
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 #16] Comparaison déraisonnable

Unread postby Ti64CLi++ » 29 May 2016, 20:09

Super, je vais essayer ce mini-défi ^^
Image
User avatar
Ti64CLi++Modo
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Level up: 32.5%
 
Posts: 3446
Images: 75
Joined: 04 Jul 2014, 14:40
Location: Clermont-Ferrand 63
Gender: Male
Calculator(s):
MyCalcs profile
Class: ENS Rennes
GitHub: Ti64CLi

Re: [Mini Challenge Basic #16] Comparaison déraisonnable

Unread postby Excale » 30 May 2016, 21:55

Je dois avouer que je n'ai pas testé en détail la correction de cette fonction.

Code: Select all
Define compare(n,p)=
Func
If n>p
10*n+1→n
ifFn(p*n=0,n=0,n*10^(int(log(p,10))-int(log(n,10)))≤p)
EndFunc


(avec cette méthode, les cas particuliers coûtent cher)
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

Re: [Mini Challenge Basic #16] Comparaison déraisonnable

Unread postby Bisam » 31 May 2016, 20:54

Je pense que cette fois-ci ça ne marche pas du tout avec les nombres très grands et proches l'un de l'autre.

Si on omet ce détail, on peut simplifier la fonction ainsi :
Code: Select all
when(p*n=0, n=0, fpart(log(n,10))≤fpart(log(p,10))) → compare(n,p)
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 #16] Comparaison déraisonnable

Unread postby Excale » 31 May 2016, 21:06

Bisam wrote:Je pense que cette fois-ci ça ne marche pas du tout avec les nombres très grands et proches l'un de l'autre.

Si on omet ce détail, on peut simplifier la fonction ainsi :
Code: Select all
when(p*n=0, n=0, fpart(log(n,10))≤fpart(log(p,10))) → compare(n,p)


Ça marche pas pour compare(420, 42).

D'autre part, je n'utilise à aucun moment les flottants. Donc soit le CAS les utilise en interne* et peut donc effectivement se 'tromper', soit ça marche pour les grands nombres.

*Peut-être qu'il 'float' avant de faire le 'int()'.
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.
1615 utilisateurs:
>1582 invités
>27 membres
>6 robots
Record simultané (sur 6 mois):
6892 utilisateurs (le 07/06/2017)
-
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)