Lua > LPeg > Egymásba ágyazott táblák

[code]
--------------------------------
-- Feladat: A 21. percnél hallottál egy jó számot, mi a neve?
--
-- Lista a wikipediaról:
--
raw_text = [====[1. "Overture" 2:28
2. "The Grid" (featuring Jeff Bridges) 1:37
3. "The Son of Flynn" 1:35
4. "Recognizer" 2:38
5. "Armory" 2:03
6. "Arena" 1:33
7. "Rinzler" 2:18
8. "The Game Has Changed" 3:25
9. "Outlands" 2:42
10. "Adagio for Tron" 4:11
11. "Nocturne" 1:42
12. "End of Line" 2:36
13. "Derezzed" 1:44
14. "Fall" 1:23
15. "Solar Sailer" 2:42
16. "Rectifier" 2:14
17. "Disc Wars" 4:11
18. "C.L.U." 4:39
19. "Arrival" 2:00
20. "Flynn Lives" 3:22
21. "Tron Legacy (End Titles)" 3:18
22. "Finale"
]====]

-- Itt van a teljes album: http://www.youtube.com/watch?v=LadRcupWDuI

local lpeg = require 'lpeg'

lpeg.locale(lpeg)

-- A pozíció, a cím és az időtartam egy tábla

function tosecs(mins,secs)
return 60*mins+secs
end
function fromsecs(secs)
return string.format("%d:%d", secs / 60 , secs % 60)
end

number = lpeg.R"09"^1 / tonumber
position = number * lpeg.P"."
title = lpeg.P"\"" * (( lpeg.R("AZ","az") + lpeg.S"(). " )^1 / tostring ) * lpeg.P"\""
duration = ( number * lpeg.S":" * number ) / tosecs
space = lpeg.space^0

extrawords = (lpeg.R("AZ","az"," ","()")^1 )

track = lpeg.Ct(position * space * title * (space * extrawords)^0 * space * duration)
album = lpeg.Ct(track * (space * track)^0)

t = album:match(raw_text)

for i,v in ipairs(t) do
for j, k in ipairs(v) do
--print(j,k)
end
end

function search_title_by_length(length)

number = lpeg.R"09"^1 / tonumber
pattern = lpeg.C(number) * lpeg.P":" * lpeg.C(number)
mins, secs = pattern:match( length)

if mins then length = tosecs(mins,secs)
else length = tonumber(length) end

accu = 0
for i,v in ipairs(t) do
accu = accu + v[3]

if accu > length then
print(v[1],v[2],v[3], fromsecs(accu))
break
end
end

end
search_title_by_length("21:00")
[/code]

Hozzászólások

Akkor jol emlekeztem, hogy te LUA-ztal.

Most egy nagyon idiota kerdest fogok feltenni.

Van egy cucc, imapfilter a neve. A konfigja lua-ban vagyon irva, abban lehet. Kulso konyvtar hasznalatara tudtommal nincs lehetoseg.
A filtereket is luaban kell megirni, es ket halmazt szorzasjellel pluszjellel (+) lehet osszevonni. Viszont ezekbol szeretnek egy halmazt kivonni, amiket nem szeretnek a talalatban latni.

A tipp az, hogy a talalat tabla, mert a table.foreach(result, print) ket oszlopban tol ki szamokat.

Kerdes: lehet ilyet? Ha igen, hogy? Gondolom, hogy ha osszevonni lehet, akkor kivonni is lehet...
--

Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant. | Gentoo Portal