Page 1 of 1

[Mini-Challenge #3] : Quel est le groupe d'âge...

Unread postPosted: 12 Jul 2014, 18:06
by Adriweb
Pour le fun, voici un mini-challenge à la fois Lua et Basic (cf le topic frère). Voici celui en (Nspire-)Lua :

Nous devons analyser l'âge d'une personne afin de déterminer la catégorie associée :
Si l'âge est entre 0 et 2, afficher "maison"
Si l'âge est entre 3 et 5, afficher "maternelle"
Si l'âge est entre 6 et 11, afficher "primaire"
Si l'âge est entre 12 et 15: afficher "collège"
Si l'âge est entre 16 et 18: afficher "lycée"
Si l'âge est entre 19 et 22: afficher "postbac"
Si l'âge est entre 23 et 65: afficher "travail"
Si l'âge est entre 66 et 100: afficher "retraite"
Pour moins de 0 ou plus de 100, afficher "troll"


On fera donc une fonction qui prendra un nombre entier en entrée et qui retournera une chaîne en sortie.

Le but étant de faire le code le plus court possible (on ne comptera pas les caractères d'espaces/tab servant pour indenter... histoire que ça reste lisible).

GL & HF :)

Cependant, pour le prochain challenge Lua, il faudra essayer (pas crucial, mais c'est mieux :P) de faire un challenge en relation avec l'API Nspire ;)

Re: [Mini-Challenge #3] : Quel est le groupe d'âge...

Unread postPosted: 12 Jul 2014, 19:18
by Adriweb
Pour ma part, j'avais globalement trouvé une solution semblable à celle de critor+Excale+Pierrot sur l'autre topic, et donc en Lua "optimisé" (pour la taille, pas la vitesse :P) il me semble que ca donne ça :

Code: Select all
function name(n)
   n=n<0 and 102 or n
   i=1
   while({101,66,23,19,16,12,6,3,0})[i]>n do i=i+1 end
   return({"troll","retraite","travail","postbac","lycee","college","primaire","maternelle","maison"})[i]
end


Sans la première et la dernière ligne ni les espaces d'indentations et les "\r\n" en fin de chaque ligne, ca me donne 174 caractères.

Re: [Mini-Challenge #3] : Quel est le groupe d'âge...

Unread postPosted: 12 Jul 2014, 23:22
by davidElmaleh
Voila, mon code : (il devrai marcher)
Code: Select all
function name(n)
  if n*n>100n then i=1 else i=math.floor(10-8*math.exp(-n/19)) end
  Return {"troll","maison","maternelle","primaire","college","lycee","postbac","travail","retraite"}[i]
end


Merci regressi ;)

PS : ca fait 165 caractères

Re: [Mini-Challenge #3] : Quel est le groupe d'âge...

Unread postPosted: 12 Jul 2014, 23:29
by Adriweb
J'y avais pensé, à faire une régression, mais j'ai pas osé tenter x)

Mais bref, tant mieux si ca marche, cependant... pourquoi passer par un math.eval õ_Ô ?

Re: [Mini-Challenge #3] : Quel est le groupe d'âge...

Unread postPosted: 12 Jul 2014, 23:30
by davidElmaleh
J'ai oublié les fonctions exp et int en lua :p

Re: [Mini-Challenge #3] : Quel est le groupe d'âge...

Unread postPosted: 12 Jul 2014, 23:32
by Adriweb
math.exp() et math.floor()

Ca donnerait :

Show/Hide spoilerAfficher/Masquer le spoiler
Code: Select all
function name(n)
  if n<0 or n>100 then i=0 else i=math.floor(8*(1-math.exp(-n/19)))+2 end
  return ({"troll","maison","maternelle","primaire","college","lycee","postbac","travail","retraite"})[i+1]
end

Re: [Mini-Challenge #3] : Quel est le groupe d'âge...

Unread postPosted: 12 Jul 2014, 23:33
by davidElmaleh
Je corrige alors ;)

Re: [Mini-Challenge #3] : Quel est le groupe d'âge...

Unread postPosted: 12 Jul 2014, 23:37
by Adriweb
J'ai corrigé ton problème de syntaxe (cf mon post, il faut des parenthèses avant d'accéder à l'élément d'une table inlinée : ({...})[i+1] ) mais la régression ne semble pas bonne de toute facon :
20 -> travail, 30 -> retraite (jusqu'à 39), 40+ => nil

Re: [Mini-Challenge #3] : Quel est le groupe d'âge...

Unread postPosted: 12 Jul 2014, 23:41
by davidElmaleh
J'ai édité, regarde mon premier post