Random selection of a word in a set with lua and mkiv
Hi all, Assuming that we have a set of words or expressions, say {Maths, Physics, Algebra, Analysis, Chemistry, Geometry, Wave equation, Schrödinger equation} is it possible to write a lua function, named for instance randomselectword which returns one of the words or expressions selected at random in the above set? Indeed this is intended to be used in a TeX file processed with mkiv. Thanks in advance for any idea and help. Best regards: OK
On 8-6-2011 6:52, Otared Kavian wrote:
Hi all,
Assuming that we have a set of words or expressions, say {Maths, Physics, Algebra, Analysis, Chemistry, Geometry, Wave equation, Schrödinger equation} is it possible to write a lua function, named for instance randomselectword which returns one of the words or expressions selected at random in the above set? Indeed this is intended to be used in a TeX file processed with mkiv.
something function document.r(str) local set = utilities.parsers.settings_to_array(str) context(set[math.round(math.random(1,#set))]) end \ctxlua{document.r("math physics")} (untested) ----------------------------------------------------------------- Hans Hagen | PRAGMA ADE Ridderstraat 27 | 8061 GH Hasselt | The Netherlands tel: 038 477 53 69 | voip: 087 875 68 74 | www.pragma-ade.com | www.pragma-pod.nl -----------------------------------------------------------------
This following code works, except that the first random is always the same (Analysis) for some reason. Anyone knows why ? \enableregime[il1]\starttext\startluacode userdata = userdata or {} math.randomseed( os.time() ) function userdata.random(...) context(arg[math.random(1, #arg)]) end\stopluacode\def\CHOOSERANDOM#1{\ctxlua{userdata.random(#1)}}\dorecurse{10}{\CHOOSERANDOM{"Maths", "Physics", "Algebra", "Analysis", "Chemistry", "Geometry", "Wave equation", "Schrödinger equation"}\par}\stoptext Mathieu
From: otared@gmail.com Date: Wed, 8 Jun 2011 18:52:36 +0200 To: ntg-context@ntg.nl Subject: [NTG-context] Random selection of a word in a set with lua and mkiv
Hi all,
Assuming that we have a set of words or expressions, say {Maths, Physics, Algebra, Analysis, Chemistry, Geometry, Wave equation, Schrödinger equation} is it possible to write a lua function, named for instance randomselectword which returns one of the words or expressions selected at random in the above set? Indeed this is intended to be used in a TeX file processed with mkiv.
Thanks in advance for any idea and help.
Best regards: OK ___________________________________________________________________________________ If your question is of interest to others as well, please add an entry to the Wiki!
maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context webpage : http://www.pragma-ade.nl / http://tex.aanhet.net archive : http://foundry.supelec.fr/projects/contextrev/ wiki : http://contextgarden.net ___________________________________________________________________________________
On 8-6-2011 7:00, Mathieu Dupont wrote:
This following code works, except that the first random is always the same (Analysis) for some reason. Anyone knows why ? \enableregime[il1]\starttext\startluacode userdata = userdata or {} math.randomseed( os.time() ) function userdata.random(...) context(arg[math.random(1, #arg)]) end\stopluacode\def\CHOOSERANDOM#1{\ctxlua{userdata.random(#1)}}\dorecurse{10}{\CHOOSERANDOM{"Maths", "Physics", "Algebra", "Analysis", "Chemistry", "Geometry", "Wave equation", "Schrödinger equation"}\par}\stoptext
Because context remembers the seed (is reported in the log). Delete the tuc file and you will get another value. We could get oscillation otherwise. ----------------------------------------------------------------- Hans Hagen | PRAGMA ADE Ridderstraat 27 | 8061 GH Hasselt | The Netherlands tel: 038 477 53 69 | voip: 087 875 68 74 | www.pragma-ade.com | www.pragma-pod.nl -----------------------------------------------------------------
I see.So it can be fixed by simply adding the first line before the second :\CHOOSERANDOM{""}\CHOOSERANDOM{"Maths", "Physics", "Algebra", "Analysis", "Chemistry", "Geometry", "Wave equation", "Schrödinger equation"}Thanks, that fixes one of my problems ! Mathieu
Date: Wed, 8 Jun 2011 19:07:50 +0200 From: pragma@wxs.nl To: ntg-context@ntg.nl CC: mathieudupont@hotmail.com Subject: Re: [NTG-context] Random selection of a word in a set with lua and mkiv
On 8-6-2011 7:00, Mathieu Dupont wrote:
This following code works, except that the first random is always the same (Analysis) for some reason. Anyone knows why ? \enableregime[il1]\starttext\startluacode userdata = userdata or {} math.randomseed( os.time() ) function userdata.random(...) context(arg[math.random(1, #arg)]) end\stopluacode\def\CHOOSERANDOM#1{\ctxlua{userdata.random(#1)}}\dorecurse{10}{\CHOOSERANDOM{"Maths", "Physics", "Algebra", "Analysis", "Chemistry", "Geometry", "Wave equation", "Schrödinger equation"}\par}\stoptext
Because context remembers the seed (is reported in the log). Delete the tuc file and you will get another value. We could get oscillation otherwise.
----------------------------------------------------------------- Hans Hagen | PRAGMA ADE Ridderstraat 27 | 8061 GH Hasselt | The Netherlands tel: 038 477 53 69 | voip: 087 875 68 74 | www.pragma-ade.com | www.pragma-pod.nl -----------------------------------------------------------------
Dear Hans, dear Mathieu, Thank you very much for your quick thoughts and solutions! It is amazing how fast one gets a solution to one's problem on this list… Just a note for Mathieu: I think that \enableregime[il1] is not needed in mkiv, since a unicode regime is the default there (however with mkii I use \enableregime[utf] but in the case we are discussing, one has to use lua, so mkiv is mandatory). Best regards: OK On 8 juin 2011, at 19:00, Mathieu Dupont wrote:
This following code works, except that the first random is always the same (Analysis) for some reason.
Anyone knows why ?
\enableregime[il1] \starttext \startluacode userdata = userdata or {} math.randomseed( os.time() ) function userdata.random(...) context(arg[math.random(1, #arg)]) end \stopluacode \def\CHOOSERANDOM#1{\ctxlua{userdata.random(#1)}} \dorecurse{10}{\CHOOSERANDOM{"Maths", "Physics", "Algebra", "Analysis", "Chemistry", "Geometry", "Wave equation", "Schrödinger equation"}\par} \stoptext
Mathieu
From: otared@gmail.com Date: Wed, 8 Jun 2011 18:52:36 +0200 To: ntg-context@ntg.nl Subject: [NTG-context] Random selection of a word in a set with lua and mkiv
Hi all,
Assuming that we have a set of words or expressions, say {Maths, Physics, Algebra, Analysis, Chemistry, Geometry, Wave equation, Schrödinger equation} is it possible to write a lua function, named for instance randomselectword which returns one of the words or expressions selected at random in the above set? Indeed this is intended to be used in a TeX file processed with mkiv.
Thanks in advance for any idea and help.
Best regards: OK ___________________________________________________________________________________ If your question is of interest to others as well, please add an entry to the Wiki!
maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context webpage : http://www.pragma-ade.nl / http://tex.aanhet.net archive : http://foundry.supelec.fr/projects/contextrev/ wiki : http://contextgarden.net ___________________________________________________________________________________
If your question is of interest to others as well, please add an entry to the Wiki!
maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context webpage : http://www.pragma-ade.nl / http://tex.aanhet.net archive : http://foundry.supelec.fr/projects/contextrev/ wiki : http://contextgarden.net ___________________________________________________________________________________
%%%%%%%%%%%%%%%%%% Otared Kavian Département de Mathématiques Université de Versailles Saint-Quentin Bâtiment Fermat 45 avenue des Etats Unis 78035 Versailles cedex Téléphone: +33 1 39 25 46 42 Secrétariat: +33 1 39 25 46 44 Secrétariat: +33 1 39 25 46 46 e-mail: Otared.Kavian@math.uvsq.fr
On 8-6-2011 10:12, Otared Kavian wrote:
Thank you very much for your quick thoughts and solutions! It is amazing how fast one gets a solution to one's problem on this list…
well, this was an easy one -)
Just a note for Mathieu: I think that \enableregime[il1]
depends on the input encoding ... regimes are still supported but indeed all ends up in utf internally Hans ----------------------------------------------------------------- Hans Hagen | PRAGMA ADE Ridderstraat 27 | 8061 GH Hasselt | The Netherlands tel: 038 477 53 69 | voip: 087 875 68 74 | www.pragma-ade.com | www.pragma-pod.nl -----------------------------------------------------------------
participants (3)
-
Hans Hagen
-
Mathieu Dupont
-
Otared Kavian