diff --git a/getPokerHand.js b/getPokerHand.js index 1990681..c249694 100644 --- a/getPokerHand.js +++ b/getPokerHand.js @@ -6,8 +6,66 @@ */ function getPokerHand(dice) { // Напишите ваш замечательный код здесь + if (dice && dice.length !== 5) { + throw Error('Кубиков должно быть 5'); + } - return 'Покер'; + let counts = {}; + let pairs = 0; + let kare = false; + let pocker = false; + let set = false; + for (let el of dice) { + if (typeof el !== 'number') { + throw Error('В кубике все грани являются числами'); + } + if (!counts[el]) { + counts[el] = 0; + } + counts[el]++; + } + + for (el in counts) { + switch (counts[el]) { + case 2: + pairs++; + break; + case 3: + set = true; + break + case 4: + kare = true; + break; + case 5: + pocker = true; + break; + } + } + if (pocker) { + return 'Покер'; + } + + if (kare) { + return 'Каре'; + } + + if (pairs === 1 && set) { + return 'Фулл хаус'; + } + + if (set) { + return 'Тройка' + } + + if (pairs === 2) { + return 'Две пары' + } + + if (pairs === 1) { + return 'Пара' + } + + return 'Наивысшее очко'; } module.exports = getPokerHand; diff --git a/tests/getPokerHand-test.js b/tests/getPokerHand-test.js index aaa1e59..7b28b3a 100644 --- a/tests/getPokerHand-test.js +++ b/tests/getPokerHand-test.js @@ -2,11 +2,65 @@ const assert = require('assert'); const getPokerHand = require('../getPokerHand'); describe('getPokerHand', () => { + it('should throw `Кубиков должно быть 5` for [1, 1, 1, 1]', () => { + + try { + const actual = getPokerHand([1, 1, 1, 1]); + throw Error('shoud Throw Error'); + } catch (e) { + assert.equal(e.message, 'Кубиков должно быть 5'); + } + }); + + it('should throw `В кубике все грани являются числами` for [1, 1, 1, 1, `1`]', () => { + + try { + const actual = getPokerHand([1, 1, 1, 1, '1']); + throw Error('shoud Throw Error'); + } catch (e) { + assert.equal(e.message, 'В кубике все грани являются числами'); + } + }); + it('should return `Покер` for [1, 1, 1, 1, 1]', () => { const actual = getPokerHand([1, 1, 1, 1, 1]); assert.equal(actual, 'Покер'); }); - // Напишите тесты на ваш замечательный код здесь + it('should return `Каре` for [1, 1, 1, 1, 2]', () => { + const actual = getPokerHand([1, 1, 1, 1, 2]); + + assert.equal(actual, 'Каре'); + }); + + it('should return `Фулл хаус` for [1, 5, 1, 1, 5]', () => { + const actual = getPokerHand([1, 5, 1, 1, 5]); + + assert.equal(actual, 'Фулл хаус'); + }); + + it('should return `Тройка` for [1, 2, 1, 3, 1]', () => { + const actual = getPokerHand([1, 2, 1, 3, 1]); + + assert.equal(actual, 'Тройка'); + }); + + it('should return `Две пары` for [1, 2, 5, 1, 2]', () => { + const actual = getPokerHand([1, 2, 5, 1, 2]); + + assert.equal(actual, 'Две пары'); + }); + + it('should return `Пара` for [1, 2, 5, 1, 3]', () => { + const actual = getPokerHand([1, 2, 5, 1, 3]); + + assert.equal(actual, 'Пара'); + }); + + it('should return `Наивысшее очко` for [1, 2, 3, 4, 5]', () => { + const actual = getPokerHand([1, 2, 3, 4, 5]); + + assert.equal(actual, 'Наивысшее очко'); + }); });