-
Notifications
You must be signed in to change notification settings - Fork 0
/
task4.js
76 lines (67 loc) · 1.75 KB
/
task4.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
const readline = require('readline');
const _ = require('underscore');
const R = require('ramda');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
const strToArray = function(str) {
return _.map( str.split(' '), (val) => {
return parseInt(val)
})
}
var input1 = []
var input2 = []
var result = []
function promisiFunction(n, m, size) {
return new Promise( (resolve) => {
setTimeout( ()=> {
var sum = 0
for(var i = 0; i < size; i++){
sum += input1[n][i] * input2[i][m]
}
result[n][m] = sum
resolve(sum)
}, 0)
})
}
const doIt = (n) => {
var promises = []
for(var x = 0; x < n; x++) {
result[x] = []
for(var y = 0; y < n; y++) {
promises.push( promisiFunction(x, y, n))
}
}
console.log(promises) // здесь мы видим что все промисы имеют статус "в ожидании"
Promise.all(promises).then((res) => {
console.log(promises, res) // здесь все промисы и массив того, что вернулось через resolve
console.log(result)
rl.close()
})
}
const readLine = (line, index, n) => {
if (line.length == n ){
if (index < n ) {
input1[index] = line
} else {
input2[index - n] = line
}
return line
} else {
return null
}
}
console.log("\n+++++++ TASK #4 +++++++\n")
const q1 = rl.question('Enter n: ', (n) => {
console.log("Enter first matrix " + n + "x" + n)
var correctLines = 0
rl.on('line', (line) => {
if (readLine(strToArray(line), correctLines, n)) correctLines++
if (correctLines == n) console.log('Enter second matrix')
if (correctLines == n * 2) {
console.log('input accepted')
doIt(n)
}
})
})