Guest User

Untitled

a guest
Apr 20th, 2025
32
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.63 KB | None | 0 0
  1. class btree_node:
  2. extends RefCounted
  3. var present = false #recursion stopper
  4. var dictkey
  5. var dictvalue
  6. var denominator
  7. var children
  8. static func create(k,v):
  9. var ret = btree_node.new()
  10. ret.dictkey = k
  11. ret.dictvalue = v
  12. ret.children = [btree_node.new(),btree_node.new()]
  13. ret.present = true
  14. return ret
  15. func shuffle_dictionary(dict: Dictionary):
  16. var tree = btree_node.create("",null) #NOTE empty key is reserved
  17. tree.denominator = (1<<63)-1 #optimal
  18. var insert = func(dictkey,dictvalue):
  19. var new = btree_node.create(dictkey,dictvalue)
  20. new.denominator = rng.randi()
  21. var currnode = tree
  22. while true:
  23. var i = 1 if new.denominator > currnode.denominator else 0
  24. if !currnode.children[i].present:
  25. currnode.children[i] = new
  26. new.present = true
  27. break
  28. else:
  29. currnode = currnode.children[i]
  30. return
  31. for key in dict.keys():
  32. insert.call(key,dict[key])
  33. var unwrap = func()->Dictionary:
  34. var ret = {}
  35. var abstract = func(currnode,prox):
  36. for ch in currnode.children:
  37. if ch.present:
  38. prox.call(ch,prox)
  39. if currnode != tree:
  40. ret[currnode.dictkey] = currnode.dictvalue
  41. return
  42. abstract.call(tree,abstract)
  43. return ret
  44. return unwrap.call()
  45. func shuffle_array(array): #don't want to write the boilerplate right now, sorry, NOTE OPTIMIZATION
  46. var dictver = arraytodict(array)
  47. return dicttoarray(shuffle_dictionary(dictver))
  48. func arraytodict(array):
  49. var ret = {}
  50. var i = 0
  51. while i < array.size():
  52. ret[str(i)] = array[i]
  53. i += 1
  54. return ret
  55. func dicttoarray(dict):
  56. var ret = []
  57. for val in dict.values():
  58. ret.push_back(val)
  59. return ret
Advertisement
Add Comment
Please, Sign In to add comment