π
<-
Chat plein-écran
[^]

[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

Message non lude Bisam » 29 Mai 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: Tout sélectionner
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.
Avatar de l’utilisateur
BisamAdmin
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Prochain niv.: 69.6%
 
Messages: 5665
Inscription: 11 Mar 2008, 00:00
Localisation: Lyon
Genre: Homme
Calculatrice(s):
MyCalcs profile

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

Message non lude critor » 29 Mai 2016, 14:39

Ordre lexicographique sur les nombres donc. ;)

Voici une petite proposition rapide qui semble marcher :
Code: Tout sélectionner
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
Avatar de l’utilisateur
critorAdmin
Niveau 19: CU (Créateur Universel)
Niveau 19: CU (Créateur Universel)
Prochain niv.: 42.5%
 
Messages: 41498
Images: 14695
Inscription: 25 Oct 2008, 00:00
Localisation: Montpellier
Genre: Homme
Calculatrice(s):
MyCalcs profile
YouTube: critor3000
Twitter/X: critor2000
GitHub: critor

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

Message non lude critor » 29 Mai 2016, 14:49

Petite amélioration toujours sans logarithme :
Code: Tout sélectionner
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
Avatar de l’utilisateur
critorAdmin
Niveau 19: CU (Créateur Universel)
Niveau 19: CU (Créateur Universel)
Prochain niv.: 42.5%
 
Messages: 41498
Images: 14695
Inscription: 25 Oct 2008, 00:00
Localisation: Montpellier
Genre: Homme
Calculatrice(s):
MyCalcs profile
YouTube: critor3000
Twitter/X: critor2000
GitHub: critor

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

Message non lude Bisam » 29 Mai 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 ?
Avatar de l’utilisateur
BisamAdmin
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Prochain niv.: 69.6%
 
Messages: 5665
Inscription: 11 Mar 2008, 00:00
Localisation: Lyon
Genre: Homme
Calculatrice(s):
MyCalcs profile

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

Message non lude Adriweb » 29 Mai 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.
Image

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...)
Avatar de l’utilisateur
AdriwebAdmin
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Prochain niv.: 80.2%
 
Messages: 14616
Images: 1218
Inscription: 01 Juin 2007, 00:00
Localisation: France
Genre: Homme
Calculatrice(s):
MyCalcs profile
Twitter/X: adriweb
GitHub: adriweb

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

Message non lude Bisam » 29 Mai 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.
Avatar de l’utilisateur
BisamAdmin
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Prochain niv.: 69.6%
 
Messages: 5665
Inscription: 11 Mar 2008, 00:00
Localisation: Lyon
Genre: Homme
Calculatrice(s):
MyCalcs profile

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

Message non lude Ti64CLi++ » 29 Mai 2016, 20:09

Super, je vais essayer ce mini-défi ^^
Image
Avatar de l’utilisateur
Ti64CLi++Modo
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Prochain niv.: 32.3%
 
Messages: 3441
Images: 75
Inscription: 04 Juil 2014, 14:40
Localisation: Clermont-Ferrand 63
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: ENS Rennes
GitHub: Ti64CLi

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

Message non lude Excale » 30 Mai 2016, 21:55

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

Code: Tout sélectionner
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)
Avatar de l’utilisateur
ExcaleAdmin
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Prochain niv.: 3.9%
 
Messages: 2955
Images: 3
Inscription: 10 Sep 2010, 00:00
Genre: Homme
Calculatrice(s):
MyCalcs profile

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

Message non lude Bisam » 31 Mai 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: Tout sélectionner
when(p*n=0, n=0, fpart(log(n,10))≤fpart(log(p,10))) → compare(n,p)
Avatar de l’utilisateur
BisamAdmin
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Prochain niv.: 69.6%
 
Messages: 5665
Inscription: 11 Mar 2008, 00:00
Localisation: Lyon
Genre: Homme
Calculatrice(s):
MyCalcs profile

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

Message non lude Excale » 31 Mai 2016, 21:06

Bisam a écrit: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: Tout sélectionner
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()'.
Avatar de l’utilisateur
ExcaleAdmin
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Prochain niv.: 3.9%
 
Messages: 2955
Images: 3
Inscription: 10 Sep 2010, 00:00
Genre: Homme
Calculatrice(s):
MyCalcs profile

Suivante

Retourner vers Mini-Challenges

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 2 invités

-
Rechercher
-
Social TI-Planet
-
Sujets à la une
Comparaisons des meilleurs prix pour acheter sa calculatrice !
Aidez la communauté à documenter les révisions matérielles en listant vos calculatrices graphiques !
Phi NumWorks jailbreak
123
-
Faire un don / Premium
Pour plus de concours, de lots, de tests, nous aider à payer le serveur et les domaines...
Faire un don
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 Calculatrices à acheter chez Calcuso
-
Stats.
1451 utilisateurs:
>1412 invités
>35 membres
>4 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)