-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcontact3.js
121 lines (93 loc) · 2.28 KB
/
contact3.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
'use strict';
// https://www.hackerrank.com/challenges/contacts/problem
const fs = require('fs');
const { finished } = require('stream');
process.stdin.resume();
process.stdin.setEncoding('utf-8');
let inputString = '';
const value = ''
/* console.log(JSON.stringify(value).length)
const typeSizes = {
"undefined": () => 0,
"boolean": () => 8,
"number": () => 8,
"string": item => 2 * item.length,
"object": item => !item ? 0 : Object
.keys(item)
.reduce((total, key) => sizeOf(key) + sizeOf(item[key]) + total, 0)
};
const type = typeof value
const sizeOf = value => typeSizes[type](value)
console.log(sizeOf(value))
return */
/*
* Complete the contacts function below.
*/
const trie = {
}
function insert(word) {
// console.log('insert word', word)
let str = word
if (str) {
// console.log(`trie `, str)
if (!trie[str]) {
trie[str] = 0
}
for (let node in trie) {
if (str.indexOf(node) === 0) {
trie[node] += 1
}
}
}
// console.log(trie)
}
function search(word) {
// console.log('search', word)
if (Object.keys(trie).length === 0) {
return 0
}
let sum = 0
for (let node in trie) {
if (node.indexOf(word) === 0) {
sum += 1
}
}
return sum
}
function contacts(queries, ops) {
let results = []
for (let x = 0; x < queries.length; x++) {
const command = '' + queries[x][0]
const value = '' + queries[x][1]
if (command === 'add') {
insert(value)
} else if (command === 'find') {
// console.log('find', value)
let sum = search(value)
results.push(sum)
console.log(sum)
}
}
// console.log(trie)
// console.log('cache', cache)
return results
}
//////
/**
* nui1
* nui2
* nui
// se chave do map comecar com value procurado
// se o valor procurado.lenght < que chave do Map atual.length
// entao soma é igual a soma de todos os values de todas as chaves que comecam com o valor procurado
*/
let reader = fs.createReadStream('input01.txt');
reader.on('data', function (chunk) {
inputString += chunk.toString()
});
reader.on("end", () => {
inputString = inputString.trim().split('\n').map(str => str.trim().split(" "))
let ops = inputString.shift()
const result = contacts(inputString, ops)
process.exit(0)
});