Nested templated data: Difference between revisions

Added AutoHotkey
m (→‎{{header|Phix}}: added syntax colouring the hard way)
(Added AutoHotkey)
Line 36:
 
''Show output on this page.''
 
=={{header|AutoHotkey}}==
<lang AutoHotkey>;-----------------------------------------------------------
Nested_templated_data(template, Payload){
UsedP := [], UnusedP := [], UnusedI := []
result := template.Clone()
x := ArrMap(template, Payload, result, UsedP, UnusedI, [])
for i, v in Payload
if !UsedP[v]
UnusedP.Push(v)
return [x.1, x.2, UnusedP]
}
;-----------------------------------------------------------
ArrMap(Template, Payload, result, UsedP, UnusedI, pth){
for i, index in Template {
if IsObject(index)
pth.Push(i), Arrmap(index, Payload, result, UsedP, UnusedI, pth)
else{
pth.Push(i), ArrSetPath(result, pth, Payload[index])
if Payload[index]
UsedP[Payload[index]] := 1
else
UnusedI.Push(index)
}
pth.Pop()
}
return [result, UnusedI, UsedP]
}
;-----------------------------------------------------------
ArrSetPath(Arr, pth, newVal){
temp := []
for k, v in pth{
temp.push(v)
if !IsObject(Arr[temp*])
Arr[temp*] := []
}
return Arr[temp*] := newVal
}
;-----------------------------------------------------------
objcopy(obj){
nobj := obj.Clone()
for k, v in nobj
if IsObject(v)
nobj[k] := objcopy(v)
return nobj
}
;-----------------------------------------------------------</lang>
Examples:<lang AutoHotkey>T := [[[1,2] , [3,4,1] , 5]]
; Autohotkey uses 1-based objects/arrays
P := ["Payload#1", "Payload#2", "Payload#3", "Payload#4", "Payload#5", "Payload#6", "Payload#7"]
Results := Nested_templated_data(objcopy(t), P)
output := Results.1
Undefined_indices := Results[2]
Unused_Payloads := Results[3]</lang>
{{out}}
<pre>T := [[[1,2] , [3,4,1] , 5]]
P := ["Payload#1", "Payload#2", "Payload#3", "Payload#4", "Payload#5", "Payload#6", "Payload#7"]
output : [[["payload#1", "payload#2"] , ["payload#3", "payload#4", "payload#1"] , "payload#5"]]
Undefined_indices : []
Unused_Payloads : ["Payload#6", "Payload#7"]
;-----------------------------------------------------------
T := [[[1,2] , [3,4,1,8] , 5]]
P := ["Payload#1", "Payload#2", "Payload#3", "Payload#4", "Payload#5", "Payload#6", "Payload#7"]
output : [[["payload#1", "payload#2"] , ["payload#3", "payload#4", "payload#1", ""] , "payload#5"]]
Undefined_indices : [8]
Unused_Payloads : ["Payload#6", "Payload#7"]</pre>
 
=={{header|Bracmat}}==
299

edits