Advertisement
Waffle3z

Amalgam

Jun 26th, 2016
122
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.43 KB | None | 0 0
  1. return"Amalgam",function(t,t2)
  2. local set,names={},{}
  3. local function cycle()return #t%3 end
  4. names[cycle]="cycle"
  5. local change do
  6. local last=math.random(3)-1
  7. change=function()
  8. last=(last+math.random(2))%3
  9. return last
  10. end
  11. end
  12. names[change]="change"
  13. local function beatlast()
  14. return #t==0 and math.random(3)-1 or(t[#t]+1)%3
  15. end
  16. names[beatlast]="beatlast"
  17. local winstay do
  18. local last=math.random(3)-1
  19. winstay=function()
  20. if #t~=0 and last~=(t[#t]+1)%3 then
  21. last=(last+math.random(2))%3
  22. end
  23. return last
  24. end
  25. end
  26. names[winstay]="winstay"
  27. local function difflast(t)
  28. return function()
  29. return((t[#t]or math.random(3))+math.random(2))%3
  30. end
  31. end
  32. names[difflast]="difflast"
  33. local function hist(t)
  34. return function()
  35. return #t==0 and math.random(3)-1 or(t[math.random(#t)]+1)%3
  36. end
  37. end
  38. names[hist]="hist"
  39. local f={}for a,_ in pairs(names)do f[#f+1],set[a]=a,0 end
  40. local function rand()return math.random(3)-1 end set[rand]=0 names[rand]="rand"
  41. local last={}
  42. return function()
  43. local r=t[#t]
  44. local name="rand"
  45. if r then
  46. local mv,m=-math.huge,rand
  47. for f,v in pairs(set)do
  48. local a,b=last[f],r
  49. if a==(b+1)%3 then
  50. v=v+1 set[f]=v
  51. elseif a~=b then
  52. v=v-1 set[f]=v
  53. end
  54. if v>mv then m,mv=f,v end
  55. end
  56. ret=m()name=names[m]
  57. else
  58. ret=rand()
  59. end
  60. for f,v in pairs(set)do last[f]=f()end
  61. return ret
  62. end
  63. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement