-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathhashTable.js
89 lines (76 loc) · 1.74 KB
/
hashTable.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
let unsorted = [
'Mia',
'Tim',
'Bea',
'Zoe',
'Sue',
'Len',
'Moe',
'Lou',
'Rae',
'Max',
'Tod',
'Elm'
]
let sorted = []
unsorted.forEach(() => sorted.push(''))
function moduleString (term) {
let chars = term.split('')
let sumCode = 0
chars.forEach(char => {
sumCode += char.charCodeAt(0)
})
return sumCode % sorted.length
}
unsorted.forEach(item => {
let moduleCode = moduleString(item)
if (sorted[moduleCode] === '') sorted[moduleCode] = item
else {
let condition = true
let excedent = 0
while (condition) {
moduleCode++
if (moduleCode <= sorted.length - 1) {
if (sorted[moduleCode] === '') {
sorted[moduleCode] = item
condition = false
}
} else {
excedent++
if (sorted[excedent] === '') {
sorted[excedent] = item
condition = false
}
}
}
}
})
function find (term) {
let moduleCode = moduleString(term)
let condition = true
let excedent = 0
let foundAt = 0
let actualCode = moduleCode
while (condition) {
foundAt++
if (actualCode <= sorted.length - 1) {
if (sorted[actualCode] === term) {
console.log({ term, foundAt, estimatedIndex: moduleCode, foundIndex: actualCode })
condition = false
}
actualCode++
} else if (excedent < moduleCode) {
if (sorted[excedent] === term) {
console.log({ term, foundAt, estimatedIndex: moduleCode, foundIndex: excedent })
condition = false
}
excedent++
} else {
console.log('Not found', { term, performedOperations: foundAt - 1 })
condition = false
}
}
}
console.log(sorted.length, String(sorted))
unsorted.forEach(item => find(item))
find('NonExisting')