Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
|
|
@ -0,0 +1,94 @@
|
|||
-- DATA:
|
||||
local function node(name, weight, coverage, children)
|
||||
return { name=name, weight=weight or 1.0, coverage=coverage or 0.0, sumofweights=0, delta=0, children=children }
|
||||
end
|
||||
|
||||
local root =
|
||||
node("cleaning", nil, nil, {
|
||||
node("house1", 40, nil, {
|
||||
node("bedrooms", nil, 0.25),
|
||||
node("bathrooms", nil, nil, {
|
||||
node("bathroom1", nil, 0.5),
|
||||
node("bathroom2"),
|
||||
node("outside_lavatory", nil, 1)
|
||||
}),
|
||||
node("attic", nil, 0.75),
|
||||
node("kitchen", nil, 0.1),
|
||||
node("living_rooms", nil, nil, {
|
||||
node("lounge"),
|
||||
node("dining_room"),
|
||||
node("conservatory"),
|
||||
node("playroom",nil,1)
|
||||
}),
|
||||
node("basement"),
|
||||
node("garage"),
|
||||
node("garden", nil, 0.8)
|
||||
}),
|
||||
node("house2", 60, nil, {
|
||||
node("upstairs", nil, nil, {
|
||||
node("bedrooms", nil, nil, {
|
||||
node("suite_1"),
|
||||
node("suite_2"),
|
||||
node("bedroom_3"),
|
||||
node("bedroom_4")
|
||||
}),
|
||||
node("bathroom"),
|
||||
node("toilet"),
|
||||
node("attics", nil, 0.6)
|
||||
}),
|
||||
node("groundfloor", nil, nil, {
|
||||
node("kitchen"),
|
||||
node("living_rooms", nil, nil, {
|
||||
node("lounge"),
|
||||
node("dining_room"),
|
||||
node("conservatory"),
|
||||
node("playroom")
|
||||
}),
|
||||
node("wet_room_&_toilet"),
|
||||
node("garage"),
|
||||
node("garden", nil, 0.9),
|
||||
node("hot_tub_suite", nil, 1)
|
||||
}),
|
||||
node("basement", nil, nil, {
|
||||
node("cellars", nil, 1),
|
||||
node("wine_cellar", nil, 1),
|
||||
node("cinema", nil, 0.75)
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
-- TASK:
|
||||
local function calccover(node)
|
||||
if (node.children) then
|
||||
local cnt, sum = 0, 0
|
||||
for _,child in ipairs(node.children) do
|
||||
local ccnt, csum = calccover(child)
|
||||
cnt, sum = cnt+ccnt, sum+csum
|
||||
end
|
||||
node.coverage = sum/cnt
|
||||
node.sumofweights = cnt -- just as prep for extra credit
|
||||
end
|
||||
return node.weight, node.coverage * node.weight
|
||||
end
|
||||
calccover(root)
|
||||
|
||||
-- EXTRA CREDIT:
|
||||
local function calcdelta(node, power)
|
||||
node.delta = (1.0 - node.coverage) * power
|
||||
if (node.children) then
|
||||
for _,child in ipairs(node.children) do
|
||||
calcdelta(child, power * child.weight / node.sumofweights)
|
||||
end
|
||||
end
|
||||
end
|
||||
calcdelta(root,1)
|
||||
|
||||
-- OUTPUT:
|
||||
local function printnode(node, space)
|
||||
print(string.format("%-32s| %3.f | %8.6f | %8.6f |", string.rep(" ",space)..node.name, node.weight, node.coverage, node.delta))
|
||||
if node.children then
|
||||
for _,child in ipairs(node.children) do printnode(child,space+4) end
|
||||
end
|
||||
end
|
||||
print("NAME_HIERARCHY |WEIGHT |COVERAGE |DELTA |")
|
||||
printnode(root,0)
|
||||
Loading…
Add table
Add a link
Reference in a new issue