-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
77 lines (68 loc) · 1.71 KB
/
index.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
const dic = require("./dictionary.json");
/*
const include = [];
const execlude = [];
const letterPosition ={
0:'',
1:'',
2:'',
3:'',
4:''
}
const validLetterInvalidPosition = {
0:[],
1:[],
2:[],
3:[],
4:[]
}
*/
const include = [];
const execlude = [];
const letterPosition ={
0:'',
1:'',
2:'',
3:'',
4:''
}
const validLetterInvalidPosition = {
0:[],
1:[],
2:[],
3:[],
4:[]
}
const extractWords = new RegExp(/(\w+)/gm)
const sentenceToWords = (i)=> i.match(extractWords)
const setLowerCase = (i)=>i?.toLowerCase()
const hasCorrectLength = (i) => i.length === 5;
const includeAll = (w) => include.every((ai) => w.includes(ai));
const excludeAll = (w) => execlude.every((ai) => !w.includes(ai));
const hasLetterPosition = (w) =>
Object.keys(letterPosition).every(
(i) => letterPosition[i] === w[i] || !letterPosition[i]
);
const hasValidLetterInvalidPosition = (w) =>
Object.keys(validLetterInvalidPosition).every(
(i) =>
!validLetterInvalidPosition[i].includes(w[i]) ||
!validLetterInvalidPosition[i].length
);
const wordsSource = Array.from(new Set([
...Object.keys(dic)?.flat()?.map(setLowerCase),
...Object.values(dic)?.map(sentenceToWords)?.flat()?.map(setLowerCase) // to exclude values, comment this line and replace with []
]))
const outputWords = wordsSource
?.filter(i=> typeof i === 'string')
?.filter(hasCorrectLength)
?.filter(includeAll)
?.filter(excludeAll)
?.filter(hasLetterPosition)
?.filter(hasValidLetterInvalidPosition);
console.clear();
console.log('')
console.log('output',outputWords);
console.log(
"................................................................................"
);