Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- return"PatternMatch",function(t,t2)
- local set,names={},{}
- local function rep()
- local r,len=math.random(3)-1,0
- for i=#t-1,1,-1 do
- local v=t[i+1]
- for j=0,i do
- if t[i-j]==t[#t-j]and t2[i-j]==t2[#t2-j]then
- if j>=len then
- r,len=(v+1)%3,j+1
- end
- else
- break
- end
- end
- end
- return r
- end
- names[rep]="rep"
- local f={}for a,_ in pairs(names)do f[#f+1],set[a]=a,0 end
- for i=1,#f do local x=function()t,t2=t2,t local r=f[i]()t,t2=t2,t return r end set[x]=0 names[x]="anti"..names[f[i]]f[#f+1]=x end
- for i=1,#f do local x=function()return(f[i]()+1)%3 end local y=function()return(f[i]()+2)%3 end set[x]=0 set[y]=0 names[x]=names[f[i]].."+1" names[y]=names[f[i]].."+2"end
- local function rand()return math.random(3)-1 end set[rand]=0 names[rand]="rand"
- local last={}
- return function()
- local r=t[#t]
- local name="rand"
- if r then
- local mv,m=-math.huge,rand
- for f,v in pairs(set)do
- local a,b=last[f],r
- if a==(b+1)%3 then
- v=v+1 set[f]=v
- elseif a~=b then
- v=v-1 set[f]=v
- end
- if v>mv then m,mv=f,v end
- end
- ret=m()name=names[m]
- else
- ret=rand()
- end
- for f,v in pairs(set)do last[f]=f()end
- return ret
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment