@denisT Mine is only 2x or 3x slower than yours. So I’m getting better. 
I was focused on using little memory because I thought that would make it faster. But yours uses more memory and is faster.
(
fn scoreTheParents nodeSet objSet =
(
parentScores = #()
for i = 1 to objSet.count do parentScores[i] = 0
for n in nodeSet do
(
parent = n
while parent != undefined do
(
parent = parent.parent
parentIndex = findItem objSet parent
if parentIndex != 0 do
(
parentScores[parentIndex] += 1
)
)
)
parentScores
)
fn findCommonParent =
(
local objSet = objects as array
local nodeSet = getCurrentSelection()
commonParent = undefined
dist = 0
if nodeSet.count > 0 do
(
scores = scoreTheParents nodeSet objSet
targetScore = amax scores
parent = nodeSet[1]
currentScore = 0
while commonParent == undefined do
(
dist += 1
parent = parent.parent
parentIndex = findItem objSet parent
currentScore = scores[parentIndex]
if currentScore == targetScore do commonParent = parent
if dist > scores.count do
(
dist = 0
exit
)
)
)
#(commonParent,dist)
)
(
t0 = timestamp()
h0 = heapfree
cp = findCommonParent()
format "time:% heap:%\n" (timestamp() - t0) (h0 - heapfree)
format "\tcommon:% distance:%\n" cp[1] cp[2]
)
)
My results
time:52 heap:432L
common:$Box:Box148 @ [0.000000,0.000000,0.000000] distance:40
time:53 heap:492L
common:$Box:Box148 @ [0.000000,0.000000,0.000000] distance:40
time:48 heap:492L
common:$Box:Box148 @ [0.000000,0.000000,0.000000] distance:40
time:55 heap:492L
common:$Box:Box148 @ [0.000000,0.000000,0.000000] distance:40
time:60 heap:432L
common:$Box:Box148 @ [0.000000,0.000000,0.000000] distance:40
denisT results
time:22 heap:29996L
common:$Box:Box148 @ [0.000000,0.000000,0.000000] distance:0 depth:0
time:21 heap:29996L
common:$Box:Box148 @ [0.000000,0.000000,0.000000] distance:0 depth:0
time:22 heap:30016L
common:$Box:Box148 @ [0.000000,0.000000,0.000000] distance:0 depth:0
time:18 heap:29996L
common:$Box:Box148 @ [0.000000,0.000000,0.000000] distance:0 depth:0
time:22 heap:30036L
common:$Box:Box148 @ [0.000000,0.000000,0.000000] distance:0 depth:0