Files
2019-09-28 10:14:18 -04:00

64 lines
1.3 KiB
LLVM

/*
* @progname count_dup.ll
* @version 1.0
* @author anon
* @category
* @output Text
* @description
* Count dups among ancestors?
*/
global(cnttab)
global(indtab)
global(undone)
global(allind)
global(maxcount)
global(maxindi)
proc main() {
list(undone)
list(allind)
table(cnttab)
table(indtab)
getindi(person)
set(maxcount,0)
set(maxindi,person)
call addaperson(person)
set(c,0)
while (person,dequeue(undone)) {
incr(c)
/* print(d(c)," ",key(person),"\n") */
if(eq(mod(c,1000), 0)) {
print(d(c)," ",d(maxcount)," ",key(maxindi)," ",name(maxindi),"\n")
}
if (p,father(person)) { call addaperson(p) }
if (p,mother(person)) { call addaperson(p) }
}
while(p,dequeue(allind)) {
set(count,lookup(cnttab,key(p)))
d(count) " " key(p) " " name(p) " " title(p) "\n"
}
}
proc addaperson(p)
{
enqueue(undone,p)
set(count,lookup(cnttab,key(p)))
if(ne(count,0)) {
set(count, add(count,1))
if(gt(count, maxcount)) {
set(maxcount, count)
set(maxindi, p)
}
} else {
set(count,1)
insert(indtab, key(p), p)
enqueue(allind,p)
}
insert(cnttab, key(p), count)
}