From bdce2cd0cd375187f0a07d2bdacbef5a3aa316c7 Mon Sep 17 00:00:00 2001 From: Atnes Ness Date: Wed, 26 Apr 2017 16:59:33 +0500 Subject: [PATCH] =?UTF-8?q?=D0=A0=D0=B5=D0=B0=D0=BB=D0=B8=D0=B7=D0=BE?= =?UTF-8?q?=D0=B2=D0=B0=D0=BD=20=D1=84=D1=83=D0=BD=D0=BA=D1=86=D0=B8=D0=BE?= =?UTF-8?q?=D0=BD=D0=B0=D0=BB=20=D0=B8=20=D0=BF=D0=BE=D0=BA=D1=80=D1=8B?= =?UTF-8?q?=D1=82=D0=B8=D0=B5=20=D1=82=D0=B5=D1=81=D1=82=D0=B0=D0=BC=D0=B8?= =?UTF-8?q?=20=D1=84=D1=83=D0=BD=D0=BA=D1=86=D0=B8=D0=B8=20getPokerHand?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- getPokerHand.js | 60 +++++++++++++++++++++++++++++++++++++- tests/getPokerHand-test.js | 56 ++++++++++++++++++++++++++++++++++- 2 files changed, 114 insertions(+), 2 deletions(-) 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, 'Наивысшее очко'); + }); });