Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Бёрдов Дмитрий #36

Open
wants to merge 8 commits into
base: master
Choose a base branch
from
79 changes: 78 additions & 1 deletion getPokerHand.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,87 @@
* @param {Array} dice пять костей, для которых нужно определить комбинацию
* @returns {String} название комбинации
*/


function getPokerHand(dice) {
// Напишите ваш замечательный код здесь

return 'Покер';
if (!Array.isArray(dice))
{
throw new Error('Не массив');
}

if (dice.length<5) {
throw new Error('Элементов меньше 5-ти');

}

if (dice.length>5) {
throw new Error('Элементов больше 5-ти');
}

dice.sort();
var num = [1,0,0,0,0];

j = 0;
for(var i = 1; i<5; i++){
if ((isNaN(dice[i])) || (isNaN(dice[j]))) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

А можно ограничиться только одной проверкой?
То есть не два числа проверять, а только одно во всех случаях?

throw new Error('Массив содержит элемент, не являющийся числом');
}
if ((dice[i]>6) || (dice[j]>6)) {
throw new Error('Массив содержит элемент, больший 6');
}
if ((dice[i]<1) || (dice[j]<1)) {
throw new Error('Массив содержит элемент, меньший 1');
}
if (dice[i]!=dice[j]){
j=i;
}
num[j]++;
}




max1 = -1;
max2 = -1;

for(var i = 0; i<5; i++){
if (num[i]>max1){
max1=num[i];
num[i]=-1;
}
}

for(var i = 0; i<5; i++) {
if (num[i]>max2){
max2=num[i];
num[i]=-1;
}
}

var res = 'Покер';
switch (max1) {
case 5: res = 'Покер'; break;
case 4: res = 'Каре'; break;
case 3:{
switch (max2) {
case 2: res = 'Фулл хаус'; break;
case 1: res = 'Тройка'; break;
}
break;
}
case 2:{
switch (max2) {
case 2: res = 'Две пары'; break;
case 1: res = 'Пара'; break;
}
break;
}
case 1: res = 'Наивысшее очко'; break;
}

return res;
}

module.exports = getPokerHand;
128 changes: 126 additions & 2 deletions tests/getPokerHand-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,131 @@ describe('getPokerHand', () => {
const actual = getPokerHand([1, 1, 1, 1, 1]);

assert.equal(actual, 'Покер');
});
})
});


describe('getPokerHand', () => {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Нужно объявить один describe а внутри него несколько it:

describe('getPokerHand', () => {
   it('should ...', () => {});
   it('should ...', () => {});
});

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Это замечание всё ещё актуально

it('should return `Каре` for [4, 1, 1, 1, 1]', () => {
const actual = getPokerHand([4, 1, 1, 1, 1]);

assert.equal(actual, 'Каре');
})
});

describe('getPokerHand', () => {
it('should return `Фулл хаус` for [1, 1, 1, 2, 2]', () => {
const actual = getPokerHand([1, 1, 1, 2, 2]);

assert.equal(actual, 'Фулл хаус');
})
});

describe('getPokerHand', () => {
it('should return `Тройка` for [1, 1, 1, 5, 6]', () => {
const actual = getPokerHand([1, 1, 1, 5, 6]);

// Напишите тесты на ваш замечательный код здесь
assert.equal(actual, 'Тройка');
})
});

describe('getPokerHand', () => {
it('should return `Две пары` for [1, 1, 2, 3, 3]', () => {
const actual = getPokerHand([1, 1, 2, 3, 3]);

assert.equal(actual, 'Две пары');
})
});

describe('getPokerHand', () => {
it('should return `Пара` for [1, 1, 4, 5, 6]', () => {
const actual = getPokerHand([1, 1, 4, 5, 6]);

assert.equal(actual, 'Пара');
})
});

describe('getPokerHand', () => {
it('should return `Наивысшее очко` for [5, 4, 3, 2, 1]', () => {
const actual = getPokerHand([5, 4, 3, 2, 1]);

assert.equal(actual, 'Наивысшее очко');
})
});

describe('getPokerHand', () => {
it('should throw error `Не массив` for 5', () => {
try{
const actual = getPokerHand(5);
throw new Error('`getPokerHand` should throw error');
} catch (error) {
assert.equal(error.message, 'Не массив');
}
})
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Попробуй воспользоваться assert.throws
Твои тесты станут компактнее
Документацию можно почитать по ссылке https://nodejs.org/api/assert.html#assert_assert_throws_block_error_message

});

describe('getPokerHand', () => {
it('should throw error `Элементов меньше 5-ти` for [1, 1, 4, 5]', () => {
try {
const actual = getPokerHand([1, 1, 4, 5]);
throw new Error('`getPokerHand` should throw error');
} catch (error) {
assert.equal(error.message, 'Элементов меньше 5-ти');
}
})
});

describe('getPokerHand', () => {
it('should throw error `Элементов больше 5-ти` for [5, 2, 3, 5, 1, 1, 5]', () => {
try{
const actual = getPokerHand([5, 2, 3, 5, 1, 1, 5]);
throw new Error('`getPokerHand` should throw error');
} catch (error) {
assert.equal(error.message, 'Элементов больше 5-ти');
}
})
});

describe('getPokerHand', () => {
it('should throw error `Не массив` for ', () => {
try{
const actual = getPokerHand();
throw new Error('`getPokerHand` should throw error');
} catch (error) {
assert.equal(error.message, 'Не массив');
}
})
});

describe('getPokerHand', () => {
it('should throw error `Массив содержит элемент, не являющийся числом` for ["a", "b", "c", "d", "e"]', () => {
try{
const actual = getPokerHand(["a", "b", "c", "d", "e"]);
throw new Error('`getPokerHand` should throw error');
} catch (error) {
assert.equal(error.message, 'Массив содержит элемент, не являющийся числом');
}
})
});

describe('getPokerHand', () => {
it('should throw error `Массив содержит элемент, больший 6` for [1, 2, 3, 4, 7]', () => {
try{
const actual = getPokerHand([1, 2, 3, 4, 7]);
throw new Error('`getPokerHand` should throw error');
} catch (error) {
assert.equal(error.message, 'Массив содержит элемент, больший 6');
}
})
});

describe('getPokerHand', () => {
it('should throw error `Массив содержит элемент, меньший 1` for [0, 2, 3, 4, 2]', () => {
try{
const actual = getPokerHand([0, 2, 3, 4, 2]);
throw new Error('`getPokerHand` should throw error');
} catch (error) {
assert.equal(error.message, 'Массив содержит элемент, меньший 1');
}
})
});