using System;
using System.Collections.Generic;
using System.Linq;
public class Test
{
public static void Main()
{
var index = new Dictionary<string, HashSet<int>>
{
{ "hello", new HashSet<int> { 0, 5, 1 } },
{ "world", new HashSet<int> { 1, 23 } },
{ "onenote", new HashSet<int> { 47, 23, 1 } }
};
var query = "hello world xyz".Split();
var scores = new Dictionary<int, int>();
foreach (var term in query)
{
HashSet<int> documents;
if (!index.TryGetValue(term, out documents))
{
continue;
}
foreach (var document in documents)
{
int score;
scores.TryGetValue(document, out score);
scores[document] = score + 1;
}
}
foreach (var kvp in scores.OrderByDescending(x => x.Value).Take(3))
{
Console.WriteLine("Document {0} scored {1}", kvp.Key, kvp.Value);
}
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKdXNpbmcgU3lzdGVtLkxpbnE7CgpwdWJsaWMgY2xhc3MgVGVzdAp7CglwdWJsaWMgc3RhdGljIHZvaWQgTWFpbigpCgl7CgkgICAgdmFyIGluZGV4ID0gbmV3IERpY3Rpb25hcnk8c3RyaW5nLCBIYXNoU2V0PGludD4+CgkgICAgewoJICAgICAgICB7ICJoZWxsbyIsIG5ldyBIYXNoU2V0PGludD4geyAwLCA1LCAxIH0gfSwKCSAgICAgICAgeyAid29ybGQiLCBuZXcgSGFzaFNldDxpbnQ+IHsgMSwgMjMgfSB9LAoJICAgICAgICB7ICJvbmVub3RlIiwgbmV3IEhhc2hTZXQ8aW50PiB7IDQ3LCAyMywgMSB9IH0KCSAgICB9OwoJICAgIAoJICAgIHZhciBxdWVyeSA9ICJoZWxsbyB3b3JsZCB4eXoiLlNwbGl0KCk7CgkgICAgdmFyIHNjb3JlcyA9IG5ldyBEaWN0aW9uYXJ5PGludCwgaW50PigpOwoJICAgIGZvcmVhY2ggKHZhciB0ZXJtIGluIHF1ZXJ5KQoJICAgIHsKCSAgICAgICAgSGFzaFNldDxpbnQ+IGRvY3VtZW50czsKCSAgICAgICAgaWYgKCFpbmRleC5UcnlHZXRWYWx1ZSh0ZXJtLCBvdXQgZG9jdW1lbnRzKSkKCSAgICAgICAgewoJICAgICAgICAgICAgY29udGludWU7CgkgICAgICAgIH0KCSAgICAgICAgCgkgICAgICAgIGZvcmVhY2ggKHZhciBkb2N1bWVudCBpbiBkb2N1bWVudHMpCgkgICAgICAgIHsKCSAgICAgICAgICAgIGludCBzY29yZTsKCSAgICAgICAgICAgIHNjb3Jlcy5UcnlHZXRWYWx1ZShkb2N1bWVudCwgb3V0IHNjb3JlKTsKCSAgICAgICAgICAgIHNjb3Jlc1tkb2N1bWVudF0gPSBzY29yZSArIDE7CgkgICAgICAgIH0KCSAgICB9CgkgICAgCgkgICAgZm9yZWFjaCAodmFyIGt2cCBpbiBzY29yZXMuT3JkZXJCeURlc2NlbmRpbmcoeCA9PiB4LlZhbHVlKS5UYWtlKDMpKQoJICAgIHsKCSAgICAgICAgQ29uc29sZS5Xcml0ZUxpbmUoIkRvY3VtZW50IHswfSBzY29yZWQgezF9Iiwga3ZwLktleSwga3ZwLlZhbHVlKTsKCSAgICB9Cgl9Cn0=