Initiation au Lua avec Scribunto/Exercices/Sur l’objet Title
Exercice 13-1
[modifier | modifier le wikicode]Écrire une fonction p.compte qui compte combien de fois un mot se trouve dans la page Initiation au Lua avec Scribunto/Chaînes de caractères.
La fonction p.compte se trouve dans le module:Tests.
local p = {}
function p.compte(frame)
local page = "Initiation au Lua avec Scribunto/Chaînes de caractères"
local article = frame.args[1]
local title = mw.title.new(page)
local texte = title.getContent(title)
local compte,position = 0,0
repeat
position = string.find(texte,article,position+1,true)
if position then
compte = compte + 1
end
until position == nil
return "Le mot "..article.." a été trouvé "..compte.." fois."
end
return p
Nous allons compter combien de fois on trouve las mots chaîne et phrase dans la page Initiation au Lua avec Scribunto/Chaînes de caractères.
{{#invoke:Tests|compte|chaîne}} nous retourne : Le mot chaîne a été trouvé 74 fois.
{{#invoke:Tests|compte|phrase}} nous retourne : Le mot phrase a été trouvé 16 fois.
Exercice 13-2
[modifier | modifier le wikicode]Nous avons dit que la fonction mw.title.new était vorace en temps d'exécution. Vérifiez-le en écrivant une fonction p.compare qui compare les temps d'exécution des fonctions : mw.title.new, title.getContent et title.namespace.
La fonction p.compare se trouve dans le module:Tests.
local p = {}
function p.compare()
local page = "Initiation au Lua avec Scribunto/Structures de contrôle"
local a = os.clock()
local title = mw.title.new(page)
local b = os.clock()
local texte = title.getContent(title)
local c = os.clock()
local num = title.namespace
local d = os.clock()
a = (b-a)*1000000
b = (c-b)*1000000
c = (d-c)*1000000
a = string.format('%d',a)
b = string.format('%d',b)
c = string.format('%d',c*10)/10
local reponse = ""
local reponse = reponse.."<br />L'instruction '''title = mw.title.new(page)''' s'exécute en "..a.." microsecondes."
local reponse = reponse.."<br />L'instruction '''texte = title.getContent(title)''' s'exécute en "..b.." microsecondes."
local reponse = reponse.."<br />L'instruction '''num = title.namespace''' s'exécute en "..c.." microsecondes."
return reponse
end
return p
{{#invoke:Tests|compare|Initiation au Lua avec Scribunto/Structures de contrôle}} nous retourne :
L'instruction title = mw.title.new(page) s'exécute en 59 microsecondes.
L'instruction texte = title.getContent(title) s'exécute en 960 microsecondes.
L'instruction num = title.namespace s'exécute en 0 microsecondes.
Sur la page Initiation au Lua avec Scribunto/Structures de contrôle, c’est title.getContent qui nécessite le plus de temps.
{{#invoke:Tests|compare|Initiation au Lua avec Scribunto/Présentation de la leçon}} nous retourne :
L'instruction title = mw.title.new(page) s'exécute en 80 microsecondes.
L'instruction texte = title.getContent(title) s'exécute en 859 microsecondes.
L'instruction num = title.namespace s'exécute en 0 microsecondes.
Sur la page Initiation au Lua avec Scribunto/Présentation de la leçon, c’est toujours title.getContent qui nécessite le plus de temps, mais moins que précédemment.
Il semblerait que le temps d'exécution de mw.title.new soit assez indépendant du contenu de la page, alors que le temps d'exécution de title.getContent soit d'autant plus important que la page contient beaucoup de caractères.
Exercice 13-3
[modifier | modifier le wikicode](à compléter)
Cette solution n'a pas été rédigée. Vous pouvez le faire en modifiant le paramètre « contenu
» du modèle. Comment faire ?
Exercice 13-4
[modifier | modifier le wikicode](à compléter)
Cette solution n'a pas été rédigée. Vous pouvez le faire en modifiant le paramètre « contenu
» du modèle. Comment faire ?