Skip to content

Instantly share code, notes, and snippets.

@cemerick
Forked from anonymous/scratch.clj
Last active November 11, 2015 17:32
Show Gist options
  • Save cemerick/c9448717d30c599ce8f2 to your computer and use it in GitHub Desktop.
Save cemerick/c9448717d30c599ce8f2 to your computer and use it in GitHub Desktop.
user=> (require 'cemerick.splice.rank)
nil
user=> (in-ns 'cemerick.splice.rank)
#<Namespace cemerick.splice.rank>
cemerick.splice.rank=> low
#cemerick.splice.rank.Rank[0]
cemerick.splice.rank=> high
#cemerick.splice.rank.Rank[2047]
cemerick.splice.rank=> (between low high)
#cemerick.splice.rank.Rank[1023]
cemerick.splice.rank=> (between low *1)
#cemerick.splice.rank.Rank[511]
cemerick.splice.rank=> (between low *1)
#cemerick.splice.rank.Rank[255]
cemerick.splice.rank=> (between low *1)
#cemerick.splice.rank.Rank[127]
cemerick.splice.rank=> (between low *1)
#cemerick.splice.rank.Rank[63]
cemerick.splice.rank=> (between low *1)
#cemerick.splice.rank.Rank[31]
cemerick.splice.rank=> (between low *1)
#cemerick.splice.rank.Rank[15]
cemerick.splice.rank=> (between low *1)
#cemerick.splice.rank.Rank[7]
cemerick.splice.rank=> (between low *1)
#cemerick.splice.rank.Rank[3]
cemerick.splice.rank=> (between low *1)
#cemerick.splice.rank.Rank[1]
cemerick.splice.rank=> (between low *1)
#cemerick.splice.rank.Rank[0 0 1024]
cemerick.splice.rank=> (between (rank [0]) (rank [42]))
#cemerick.splice.rank.Rank[21]
cemerick.splice.rank=> (between (rank [0]) *1)
#cemerick.splice.rank.Rank[10]
cemerick.splice.rank=> (between (rank [0]) *1)
#cemerick.splice.rank.Rank[5]
cemerick.splice.rank=> (between (rank [0]) *1)
#cemerick.splice.rank.Rank[2]
cemerick.splice.rank=> (between (rank [0]) *1)
#cemerick.splice.rank.Rank[1]
cemerick.splice.rank=> (between (rank [0]) *1)
#cemerick.splice.rank.Rank[0 0 1024]
cemerick.splice.rank=> (between (rank [1 28]) (rank [1 38 88]))
#cemerick.splice.rank.Rank[1 33]
cemerick.splice.rank=> (between *1 (rank [1 38 88]))
#cemerick.splice.rank.Rank[1 35]
cemerick.splice.rank=> (between *1 (rank [1 38 88]))
#cemerick.splice.rank.Rank[1 36]
cemerick.splice.rank=> (between *1 (rank [1 38 88]))
#cemerick.splice.rank.Rank[1 37]
cemerick.splice.rank=> (between *1 (rank [1 38 88]))
#cemerick.splice.rank.Rank[1 37 0 1024]
; size of output dictated solely by size of common prefix of the inputs, should be optimal given the representation
cemerick.splice.rank=> (between (rank [1 2 3 37]) (rank [1 2 3 40 0 1024]))
#cemerick.splice.rank.Rank[1 2 3 38]
; given two adjacent points, reserved low/high codes are used to indicate a jump to a lower level in the "tree"
; this *might* not be optimal, but wasn't a big consideration in my prototyping at the time, given that
; these are likely to be rare(r) than the base case where there's room in the first differing level
cemerick.splice.rank=> (between (rank [1 2 2]) (rank [1 2 3]))
#cemerick.splice.rank.Rank[1 2 2 0 1024]
cemerick.splice.rank=> (between (rank [1 0 2]) (rank [1 0 3]))
#cemerick.splice.rank.Rank[1 0 2 0 1024]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment