Skip to content

Commit 137d0e2

Browse files
committed
feat: memoria passando resposta correta caso peça posições pressionadas em etapas anteriores e retornando erro caso a etapa atual nao tenha 5 itens.
#12
1 parent a5abead commit 137d0e2

2 files changed

Lines changed: 60 additions & 177 deletions

File tree

src/622/modules/memoria/index.js

Lines changed: 22 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,18 @@
11
/**
22
* Função que resolve o módulo Memória
3-
* @param {string[]} previousStep - Array que traz as arrays das interações anteriores e suas respostas
3+
* @param {string[]} previousSteps - Array que traz as arrays das interações anteriores e suas respostas
44
* @param {string[]} currentStep - Array que traz a informação da interação atual
55
* @returns {string[]} Array com as arrays das interações anteriores e a atual, todas com as suas respectivas respostas
6+
* @throws {CURRENT_STEP_INCOMPLETED} A array com o passo atual precisa ter 5 itens.
67
*/
78

89

9-
const memoria = (previousStep, currentStep) => {
10+
const memoria = (previousSteps, currentStep) => {
11+
if (currentStep.length !== 5){
12+
throw 'CURRENT_STEP_INCOMPLETED'
13+
}
1014
let answer
11-
switch(previousStep.length) {
15+
switch(previousSteps.length) {
1216
case 0:
1317
switch(currentStep[0]){
1418
case 1: answer = currentStep[2]; break;
@@ -20,39 +24,39 @@ const memoria = (previousStep, currentStep) => {
2024
case 1:
2125
switch(currentStep[0]){
2226
case 1: answer = 4; break;
23-
case 2: answer = previousStep[0][5]; break;
27+
case 2: answer = currentStep[previousSteps[0].indexOf(previousSteps[0][5],1)]; break;
2428
case 3: answer = currentStep[1]; break;
25-
case 4: answer = previousStep[0][5]; break;
29+
case 4: answer = currentStep[previousSteps[0].indexOf(previousSteps[0][5],1)]; break;
2630
}
2731
break
2832
case 2:
2933
switch(currentStep[0]){
30-
case 1: answer = previousStep[1][5]; break;
31-
case 2: answer = previousStep[0][5]; break;
34+
case 1: answer = previousSteps[1][5]; break;
35+
case 2: answer = previousSteps[0][5]; break;
3236
case 3: answer = currentStep[3]; break;
3337
case 4: answer = 4; break;
3438
}
3539
break
3640
case 3:
3741
switch(currentStep[0]){
38-
case 1: answer = previousStep[0][5]; break;
42+
case 1: answer = currentStep[previousSteps[0].indexOf(previousSteps[0][5],1)]; break;
3943
case 2: answer = currentStep[1]; break;
40-
case 3: answer = previousStep[1][5]; break;
41-
case 4: answer = previousStep[1][5]; break;
44+
case 3: answer = currentStep[previousSteps[1].indexOf(previousSteps[1][5],1)]; break;
45+
case 4: answer = currentStep[previousSteps[1].indexOf(previousSteps[1][5],1)]; break;
4246
}
4347
break
4448
case 4:
4549
switch(currentStep[0]){
46-
case 1: answer = previousStep[0][5]; break;
47-
case 2: answer = previousStep[1][5]; break;
48-
case 3: answer = previousStep[3][5]; break;
49-
case 4: answer = previousStep[2][5]; break;
50+
case 1: answer = previousSteps[0][5]; break;
51+
case 2: answer = previousSteps[1][5]; break;
52+
case 3: answer = previousSteps[3][5]; break;
53+
case 4: answer = previousSteps[2][5]; break;
5054
}
5155
break
5256
}
5357
currentStep.push(answer)
54-
previousStep.push(currentStep)
55-
return previousStep
56-
}
58+
previousSteps.push(currentStep)
59+
return previousSteps
60+
}
5761

58-
module.exports = memoria
62+
module.exports = memoria

src/622/modules/memoria/index.test.js

Lines changed: 38 additions & 159 deletions
Original file line numberDiff line numberDiff line change
@@ -2,182 +2,61 @@ const memoria = require('./index')
22

33
describe('memoria', () => {
44
describe('passo 1', () => {
5-
let answer
6-
7-
previousStep0 = []
8-
currentStep0 = [1, 1, 3, 4, 2]
9-
expectAnswerStep0 = [[1, 1, 3, 4, 2, 3]]
10-
it('deveria retornar 3', () => {
11-
const resp = memoria(previousStep0, currentStep0)
12-
expect(resp).toStrictEqual(expectAnswerStep0)
13-
})
14-
15-
previousStep1 = []
16-
currentStep1 = [2, 3, 4, 1, 2]
17-
expectAnswerStep1 = [[2, 3, 4, 1, 2, 4]]
18-
it('deveria retornar 4', () => {
19-
const resp = memoria(previousStep1, currentStep1)
20-
expect(resp).toStrictEqual(expectAnswerStep1)
21-
})
22-
23-
previousStep2 = []
24-
currentStep2 = [3, 4, 1, 3, 2]
25-
expectAnswerStep2 = [[3, 4, 1, 3, 2, 3]]
26-
it('deveria retornar 3', () => {
27-
const resp = memoria(previousStep2, currentStep2)
28-
expect(resp).toStrictEqual(expectAnswerStep2)
29-
})
30-
31-
previousStep3 = []
32-
currentStep3 = [4, 3, 4, 1, 2]
33-
expectAnswerStep3 = [[4, 3, 4, 1, 2, 2]]
34-
it('deveria retornar 2', () => {
35-
const resp = memoria(previousStep3, currentStep3)
36-
expect(resp).toStrictEqual(expectAnswerStep3)
5+
it('Deveria retornar 3 se o número no visor do primeiro passo é 1 e o botão na segunda posição é 3', () => {
6+
previousSteps = []
7+
currentStep = [1, 1, 3, 4, 2]
8+
expectAnswerStep = [[1, 1, 3, 4, 2, 3]]
9+
const resp = memoria(previousSteps, currentStep)
10+
expect(resp).toStrictEqual(expectAnswerStep)
3711
})
3812
})
3913

4014
describe('passo 2', () => {
41-
let answer
42-
43-
previousStep4 = [[1, 1, 3, 4, 2, 3]]
44-
currentStep4 = [2, 3, 4, 1, 2]
45-
expectAnswerStep4 = [[1, 1, 3, 4, 2, 3],[2, 3, 4, 1, 2, 3]]
46-
it('deveria retornar 3', () => {
47-
const resp = memoria(previousStep4, currentStep4)
48-
expect(resp).toStrictEqual(expectAnswerStep4)
49-
})
50-
51-
previousStep5 = [[2, 3, 4, 1, 2, 4]]
52-
currentStep5 = [3, 4, 1, 3, 2]
53-
expectAnswerStep5 = [[2, 3, 4, 1, 2, 4],[3, 4, 1, 3, 2, 4]]
54-
it('deveria retornar 4', () => {
55-
const resp = memoria(previousStep5, currentStep5)
56-
expect(resp).toStrictEqual(expectAnswerStep5)
57-
})
58-
59-
previousStep6 = [[3, 4, 1, 3, 2, 3]]
60-
currentStep6 = [4, 3, 4, 1, 2]
61-
expectAnswerStep6 = [[3, 4, 1, 3, 2, 3],[4, 3, 4, 1, 2, 3]]
62-
it('deveria retornar 3', () => {
63-
const resp = memoria(previousStep6, currentStep6)
64-
expect(resp).toStrictEqual(expectAnswerStep6)
65-
})
66-
67-
previousStep7 = [[4, 3, 4, 1, 2, 2]]
68-
currentStep7 = [1, 1, 3, 4, 2]
69-
expectAnswerStep7 = [[4, 3, 4, 1, 2, 2],[1, 1, 3, 4, 2, 4]]
70-
it('deveria retornar 4', () => {
71-
const resp = memoria(previousStep7, currentStep7)
72-
expect(resp).toStrictEqual(expectAnswerStep7)
15+
it('Deveria retornar 1 se o número no visor do segundo passo é 4, a posição pressionada no passo 1 foi a terceira posição e o número que está na terceira posição do estágio atual é 1', () => {
16+
previousSteps = [[3, 4, 1, 3, 2, 3]]
17+
currentStep = [4, 3, 4, 1, 2]
18+
expectAnswerStep = [[3, 4, 1, 3, 2, 3],[4, 3, 4, 1, 2, 1]]
19+
const resp = memoria(previousSteps, currentStep)
20+
expect(resp).toStrictEqual(expectAnswerStep)
7321
})
7422
})
7523

7624
describe('passo 3', () => {
77-
let answer
78-
79-
previousStep8 = [[1, 1, 3, 4, 2, 3],[2, 3, 4, 1, 2, 3]]
80-
currentStep8 = [3, 4, 1, 3, 2]
81-
expectAnswerStep8 = [[1, 1, 3, 4, 2, 3],[2, 3, 4, 1, 2, 3], [3, 4, 1, 3, 2, 3]]
82-
it('deveria retornar 3', () => {
83-
const resp = memoria(previousStep8, currentStep8)
84-
expect(resp).toStrictEqual(expectAnswerStep8)
85-
})
86-
87-
previousStep9 = [[2, 3, 4, 1, 2, 4],[3, 4, 1, 3, 2, 4]]
88-
currentStep9 = [4, 3, 4, 1, 2]
89-
expectAnswerStep9 = [[2, 3, 4, 1, 2, 4],[3, 4, 1, 3, 2, 4], [4, 3, 4, 1, 2, 4]]
90-
it('deveria retornar 4', () => {
91-
const resp = memoria(previousStep9, currentStep9)
92-
expect(resp).toStrictEqual(expectAnswerStep9)
93-
})
94-
95-
previousStep10 = [[3, 4, 1, 3, 2, 3],[4, 3, 4, 1, 2, 3]]
96-
currentStep10 = [1, 1, 3, 4, 2]
97-
expectAnswerStep10 = [[3, 4, 1, 3, 2, 3],[4, 3, 4, 1, 2, 3], [1, 1, 3, 4, 2, 3]]
98-
it('deveria retornar 3', () => {
99-
const resp = memoria(previousStep10, currentStep10)
100-
expect(resp).toStrictEqual(expectAnswerStep10)
101-
})
102-
103-
previousStep11 = [[4, 3, 4, 1, 2, 2],[1, 1, 3, 4, 2, 4]]
104-
currentStep11 = [2, 3, 4, 1, 2]
105-
expectAnswerStep11 = [[4, 3, 4, 1, 2, 2],[1, 1, 3, 4, 2, 4], [2, 3, 4, 1, 2, 2]]
106-
it('deveria retornar 2', () => {
107-
const resp = memoria(previousStep11, currentStep11)
108-
expect(resp).toStrictEqual(expectAnswerStep11)
25+
it('Deveria retornar 4 se o número no visor do terceiro passo é 1, o número do botão pressionado no segundo passo foi 4', () => {
26+
previousSteps = [[4, 3, 4, 1, 2, 2],[1, 1, 3, 4, 2, 4]]
27+
currentStep = [1, 3, 4, 1, 2]
28+
expectAnswerStep = [[4, 3, 4, 1, 2, 2],[1, 1, 3, 4, 2, 4], [1, 3, 4, 1, 2, 4]]
29+
const resp = memoria(previousSteps, currentStep)
30+
expect(resp).toStrictEqual(expectAnswerStep)
10931
})
11032
})
11133

11234
describe('passo 4', () => {
113-
let answer
114-
115-
previousStep12 = [[1, 1, 3, 4, 2, 3],[2, 3, 4, 1, 2, 3], [3, 4, 1, 3, 2, 3]]
116-
currentStep12 = [4, 3, 4, 1, 2]
117-
expectAnswerStep12 = [[1, 1, 3, 4, 2, 3],[2, 3, 4, 1, 2, 3], [3, 4, 1, 3, 2, 3], [4, 3, 4, 1, 2, 3]]
118-
it('deveria retornar 3', () => {
119-
const resp = memoria(previousStep12, currentStep12)
120-
expect(resp).toStrictEqual(expectAnswerStep12)
121-
})
122-
123-
previousStep13 = [[2, 3, 4, 1, 2, 4],[3, 4, 1, 3, 2, 4], [4, 3, 4, 1, 2, 4]]
124-
currentStep13 = [1, 1, 3, 4, 2]
125-
expectAnswerStep13 = [[2, 3, 4, 1, 2, 4],[3, 4, 1, 3, 2, 4], [4, 3, 4, 1, 2, 4], [1, 1, 3, 4, 2, 4]]
126-
it('deveria retornar 4', () => {
127-
const resp = memoria(previousStep13, currentStep13)
128-
expect(resp).toStrictEqual(expectAnswerStep13)
129-
})
130-
131-
previousStep14 = [[3, 4, 1, 3, 2, 3],[4, 3, 4, 1, 2, 3], [1, 1, 3, 4, 2, 3]]
132-
currentStep14 = [2, 3, 4, 1, 2]
133-
expectAnswerStep14 = [[3, 4, 1, 3, 2, 3],[4, 3, 4, 1, 2, 3], [1, 1, 3, 4, 2, 3], [2, 3, 4, 1, 2, 3]]
134-
it('deveria retornar 3', () => {
135-
const resp = memoria(previousStep14, currentStep14)
136-
expect(resp).toStrictEqual(expectAnswerStep14)
137-
})
138-
139-
previousStep15 = [[4, 3, 4, 1, 2, 2],[1, 1, 3, 4, 2, 4], [2, 3, 4, 1, 2, 2]]
140-
currentStep15 = [3, 4, 1, 3, 2]
141-
expectAnswerStep15 = [[4, 3, 4, 1, 2, 2],[1, 1, 3, 4, 2, 4], [2, 3, 4, 1, 2, 2], [3, 4, 1, 3, 2, 4]]
142-
it('deveria retornar 4', () => {
143-
const resp = memoria(previousStep15, currentStep15)
144-
expect(resp).toStrictEqual(expectAnswerStep15)
35+
it('Deveria retornar 1 se o número no visor do quarto passo é 3, a posição pressionada no passo 2 foi a primeira posição e o número que está na primeira posição do estágio atual é 1', () => {
36+
previousSteps = [[3, 4, 1, 3, 2, 3],[4, 3, 4, 1, 2, 3], [1, 1, 3, 4, 2, 3]]
37+
currentStep = [3, 1, 3, 4, 2]
38+
expectAnswerStep = [[3, 4, 1, 3, 2, 3],[4, 3, 4, 1, 2, 3], [1, 1, 3, 4, 2, 3], [3, 1, 3, 4, 2, 1]]
39+
const resp = memoria(previousSteps, currentStep)
40+
expect(resp).toStrictEqual(expectAnswerStep)
14541
})
14642
})
14743

14844
describe('passo 5', () => {
149-
let answer
150-
151-
previousStep16 = [[1, 1, 3, 4, 2, 3],[2, 3, 4, 1, 2, 3], [3, 4, 1, 3, 2, 3], [4, 3, 4, 1, 2, 3]]
152-
currentStep16 = [1, 1, 3, 4, 2]
153-
expectAnswerStep16 = [[1, 1, 3, 4, 2, 3],[2, 3, 4, 1, 2, 3], [3, 4, 1, 3, 2, 3], [4, 3, 4, 1, 2, 3], [1, 1, 3, 4, 2, 3]]
154-
it('deveria retornar 3', () => {
155-
const resp = memoria(previousStep16, currentStep16)
156-
expect(resp).toStrictEqual(expectAnswerStep16)
157-
})
158-
159-
previousStep17 = [[2, 3, 4, 1, 2, 4],[3, 4, 1, 3, 2, 4], [4, 3, 4, 1, 2, 4], [1, 1, 3, 4, 2, 4]]
160-
currentStep17 = [2, 3, 4, 1, 2]
161-
expectAnswerStep17 = [[2, 3, 4, 1, 2, 4],[3, 4, 1, 3, 2, 4], [4, 3, 4, 1, 2, 4], [1, 1, 3, 4, 2, 4], [2, 3, 4, 1, 2, 4]]
162-
it('deveria retornar 4', () => {
163-
const resp = memoria(previousStep17, currentStep17)
164-
expect(resp).toStrictEqual(expectAnswerStep17)
45+
it('Deveria retornar 3 se o número no visor do quinto passo é 3, o número do botão pressionado no quarto passo foi 3', () => {
46+
previousSteps = [[1, 1, 3, 4, 2, 3],[2, 3, 4, 1, 2, 3], [3, 4, 1, 3, 2, 3], [4, 3, 4, 1, 2, 3]]
47+
currentStep = [3, 1, 3, 4, 2]
48+
expectAnswerStep = [[1, 1, 3, 4, 2, 3],[2, 3, 4, 1, 2, 3], [3, 4, 1, 3, 2, 3], [4, 3, 4, 1, 2, 3], [3, 1, 3, 4, 2, 3]]
49+
const resp = memoria(previousSteps, currentStep)
50+
expect(resp).toStrictEqual(expectAnswerStep)
16551
})
166-
167-
previousStep18 = [[3, 4, 1, 3, 2, 3],[4, 3, 4, 1, 2, 3], [1, 1, 3, 4, 2, 3], [2, 3, 4, 1, 2, 3]]
168-
currentStep18 = [3, 4, 1, 3, 2]
169-
expectAnswerStep18 = [[3, 4, 1, 3, 2, 3],[4, 3, 4, 1, 2, 3], [1, 1, 3, 4, 2, 3], [2, 3, 4, 1, 2, 3], [3, 4, 1, 3, 2, 3]]
170-
it('deveria retornar 3', () => {
171-
const resp = memoria(previousStep18, currentStep18)
172-
expect(resp).toStrictEqual(expectAnswerStep18)
173-
})
174-
175-
previousStep19 = [[4, 3, 4, 1, 2, 2],[1, 1, 3, 4, 2, 4], [2, 3, 4, 1, 2, 2], [3, 4, 1, 3, 2, 4]]
176-
currentStep19 = [4, 3, 4, 1, 2]
177-
expectAnswerStep19 = [[4, 3, 4, 1, 2, 2],[1, 1, 3, 4, 2, 4], [2, 3, 4, 1, 2, 2], [3, 4, 1, 3, 2, 4], [4, 3, 4, 1, 2, 2]]
178-
it('deveria retornar 2', () => {
179-
const resp = memoria(previousStep19, currentStep19)
180-
expect(resp).toStrictEqual(expectAnswerStep19)
52+
})
53+
describe('error', () => {
54+
it('Deveria lançar uma exceção quando o passo atual não estiver completo (número no visor mais os quatro números nos botões', () => {
55+
previousSteps = []
56+
currentStep = [1, 1, 3, 2]
57+
expect(() => {
58+
memoria(previousSteps, currentStep)
59+
}).toThrowError('CURRENT_STEP_INCOMPLETED')
18160
})
18261
})
18362
})

0 commit comments

Comments
 (0)