diff --git a/getPokerHand.js b/getPokerHand.js index 1990681..0ed271e 100644 --- a/getPokerHand.js +++ b/getPokerHand.js @@ -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]))) { + 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; diff --git a/tests/getPokerHand-test.js b/tests/getPokerHand-test.js index aaa1e59..deab256 100644 --- a/tests/getPokerHand-test.js +++ b/tests/getPokerHand-test.js @@ -6,7 +6,131 @@ describe('getPokerHand', () => { const actual = getPokerHand([1, 1, 1, 1, 1]); assert.equal(actual, 'Покер'); - }); + }) +}); + + +describe('getPokerHand', () => { + 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, 'Не массив'); + } + }) +}); + +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'); + } + }) });