From 686ab0d327b8f009b98838b5990df0f131fc56f9 Mon Sep 17 00:00:00 2001 From: Levan Loria Date: Fri, 22 Sep 2017 21:50:15 +0200 Subject: [PATCH] Adding cpp example. --- cpp/Makefile | 27 ++++++ cpp/bin/shuffle | Bin 0 -> 16676 bytes cpp/include/shuffling.h | 65 +++++++++++++++ cpp/obj/shuffle.o | Bin 0 -> 8052 bytes cpp/obj/shuffling.o | Bin 0 -> 4364 bytes cpp/src/output | Bin 0 -> 10228 bytes cpp/src/shuffle.cpp | 41 ++++++++++ cpp/src/shuffling.cpp | 176 ++++++++++++++++++++++++++++++++++++++++ js/lib/shuffling.js | 15 ++-- js/shufflingDeck.js | 4 +- 10 files changed, 318 insertions(+), 10 deletions(-) create mode 100644 cpp/Makefile create mode 100755 cpp/bin/shuffle create mode 100644 cpp/include/shuffling.h create mode 100644 cpp/obj/shuffle.o create mode 100644 cpp/obj/shuffling.o create mode 100755 cpp/src/output create mode 100644 cpp/src/shuffle.cpp create mode 100644 cpp/src/shuffling.cpp diff --git a/cpp/Makefile b/cpp/Makefile new file mode 100644 index 0000000..eed288a --- /dev/null +++ b/cpp/Makefile @@ -0,0 +1,27 @@ +# Makefile for shuffling + +CC = g++ +CFLAGS = -W -Wall -ansi -pedantic +LFLAGS = +EXEC=$(BIN)shuffle + +BIN =bin/ +OBJ =obj/ +INCLUDE =include/ +LIB =lib/ +SRC =src/ + + +H= + +clean: + rm -rf $(OBJ)*.o $(BIN)* + + +all: $(EXEC) +$(BIN)shuffle: $(OBJ)shuffling.o $(OBJ)shuffle.o + $(CC) $(LFLAGS) -o $@ $^ +$(OBJ)shuffling.o: $(SRC)shuffling.cpp + $(CC) $(LFLAGS) -o $@ -c $< $(CFLAGS) +$(OBJ)shuffle.o: $(SRC)shuffle.cpp $(INCLUDE)shuffling.h + $(CC) $(LFLAGS) -o $@ -c $< $(CFLAGS) diff --git a/cpp/bin/shuffle b/cpp/bin/shuffle new file mode 100755 index 0000000000000000000000000000000000000000..e1b01d8fbcba88f47813fcf142bef3092cfab00f GIT binary patch literal 16676 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 literal 0 HcmV?d00001 diff --git a/cpp/include/shuffling.h b/cpp/include/shuffling.h new file mode 100644 index 0000000..0405bbb --- /dev/null +++ b/cpp/include/shuffling.h @@ -0,0 +1,65 @@ +// +// Shuffling.h +// Shuffling cards +// +// Created by Levan Loria on 22/11/17. +// + +#ifndef SHUFLLING_H +#define SHUFLLING_H + + +/* ------------------- Structure of Deck (Double - LinkedList) ----------------------------- */ + + +struct Card{ + int value; // value of the card + Card *next; // next card + Card *previous; // previous card +}; + +typedef struct Card Card; + + +struct Deck{ + int size; // size of deck + Card *top_card; // card on the top of the deck + Card *bottom_card; // card on the bottom of the deck + Deck(); + void addCardOnTop(Card*); // adding card on the top of the deck + Card* removeTopCard(); // removing card from top of the deck + void putBottom(); // putting the top card on the bottom of the deck +}; + +typedef struct Deck Deck; + + +void addCardOnTop(Deck *deck, Card *card); // adding card on the top of the deck +Card* removeTopCard(); // removing top card from the deck +void putBottom(); // putting top card on the bottom + + +/* -------------------------------- class of Shuffling ----------------------------------------- */ + +class Shuffling +{ +private: + int nCards; // number of cards + int rounds; // rounds + Deck* handDeck; // hand deck + Deck* tableDeck; // table deck + Card* cards; // array of all cards (initial position of cards depends on this array indices) +public: + Shuffling(int numberOfCards); + void shuffle(); // shuffle 1 round + bool compareDecks(); // comparing initial and current hand positions + void start(); // starting shuffle + + int getRounds(); // get rounds + Deck* getHandDeck(); // get handDeck + Deck* getTableDeck(); // get tableDeck + Card* getCards(); // get cards array +}; + + +#endif diff --git a/cpp/obj/shuffle.o b/cpp/obj/shuffle.o new file mode 100644 index 0000000000000000000000000000000000000000..52571fdcb6f92fe02d772b3aa19d3c9aa70bf2b1 GIT binary patch literal 8052 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 LzN#g9Rhsr+1tEqb literal 0 HcmV?d00001 diff --git a/cpp/obj/shuffling.o b/cpp/obj/shuffling.o new file mode 100644 index 0000000000000000000000000000000000000000..81d0cd58942f78d4045131fb68c4459f2b306f7f GIT binary patch literal 4364 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 Kf;%XdwfHZ7^k&xp literal 0 HcmV?d00001 diff --git a/cpp/src/shuffle.cpp b/cpp/src/shuffle.cpp new file mode 100644 index 0000000..c51c17f --- /dev/null +++ b/cpp/src/shuffle.cpp @@ -0,0 +1,41 @@ +// +// Shuffle.cpp +// Shuffling cards +// +// Created by Levan Loria on 22/11/17. +// + + + +#include + +#include "../include/shuffling.h" + +using namespace std; + + +int main(int argc, const char **argv) +{ + + int numberOfCards; + + if(argc != 2){ + cout<<"Program takes one integer argument!"<start(); + + cout<getRounds()< + +#include "../include/shuffling.h" + +using namespace std; +/* -------------------------------- Deck structure ----------------------------------------- */ + + +Deck::Deck(){ + size = 0; + top_card = NULL; + bottom_card = NULL; +} + +void Deck::addCardOnTop(Card* card){ + size++; + + if(top_card == NULL){ + bottom_card = top_card = card; + }else{ + + top_card->next = card; + card->previous = top_card; + top_card = card; + + } +} + +Card* Deck::removeTopCard(){ + + Card *card = top_card; + + // If only 1 card left in the deck + if(size == 1){ + top_card = NULL; + bottom_card = NULL; + size = 0; + + return card; + } + + + // else removing top card from deck + size--; + top_card = card->previous; + top_card->next = NULL; + + card->previous = NULL; // removing link from old deck + + return card; //returns old top card +} + + +void Deck::putBottom(){ + + // new bottom card + Card* card = top_card; + + // top pointing on 2nd card from top + top_card = card->previous; + top_card->next = NULL; + + card->previous = NULL; + + // adding old top card on the bottom + bottom_card->previous = card; + card->next = bottom_card; + bottom_card = card; + +} + + +/* -------------------------------- Shuffling class ----------------------------------------- */ + + +Shuffling::Shuffling(int numberOfCards){ + + nCards = numberOfCards; + rounds = 0; + + handDeck = new Deck(); + tableDeck = new Deck(); + + cards = new Card[numberOfCards]; + for(int i=0;iaddCardOnTop(cards+i); + } +} + +// shuffle 1 round +void Shuffling::shuffle(){ + + while(handDeck->size != 2){ + Card* card = handDeck->removeTopCard(); // removing card form the handDeck + tableDeck->addCardOnTop(card); // putting removed card on the tableDeck + handDeck->putBottom(); // putting top card of handDeck on the bottom of handDeck + + } + + + + // if only 2 cards left in the handDeck, putting them on the tableDeck + tableDeck->addCardOnTop(handDeck->removeTopCard()); + tableDeck->addCardOnTop(handDeck->removeTopCard()); + + rounds++; + + handDeck = tableDeck; // taking cards from table + tableDeck = new Deck(); // 0 cards on the table +} + +// compares initial and current handDeck +bool Shuffling::compareDecks(){ + + + Card* top = handDeck->top_card; + + // values of card in array = [1,2,..,nCards] and initial handDeck values were [nCards,..,1] + for(int i=nCards-1; i>=0; i--){ + + if(top->value != cards[i].value){ + return false; + } + + top = top->previous; + + } + + return true; +} + + +// starts shuffling +void Shuffling::start(){ + + // If only 1 card in the deck ==> 1 + if(nCards == 1){ + rounds++; + return; + } + + // shuffle -> rounds++ -> check -> shuffle ... + do { + shuffle(); + } while (!compareDecks()); + +} + + +// Shuffling class getters +int Shuffling::getRounds(){ + return rounds; +} + +Deck* Shuffling::getHandDeck(){ + return handDeck; +} + +Deck* Shuffling::getTableDeck(){ + return tableDeck; +} + +Card* Shuffling::getCards(){ + return cards; +} diff --git a/js/lib/shuffling.js b/js/lib/shuffling.js index 0c2e625..0df5484 100644 --- a/js/lib/shuffling.js +++ b/js/lib/shuffling.js @@ -1,6 +1,6 @@ /* ------------------- Structure of Deck (Double - LinkedList) ----------------------------- */ function Card(value){ - this.value = value; // value of card + this.value = value; // value of the card this.next = null; // next card (node) this.previous = null; // previous card (node) }; @@ -13,7 +13,7 @@ function Deck(){ }; -// adding card on the deck +// adding card on the top of the deck Deck.prototype.add = function(card){ if(this._length){ @@ -77,7 +77,7 @@ function Shuffling(){ this.cards = []; // all cards - this.round = 0; // number of rounds + this.rounds = 0; // number of rounds this.handDeck = new Deck(); // holding deck @@ -109,7 +109,7 @@ Shuffling.prototype.shuffle = function(){ this.tableDeck.add(this.handDeck.removeTop()); this.tableDeck.add(this.handDeck.removeTop()); - this.round++; + this.rounds++; this.handDeck = this.tableDeck; // taking cards from table this.tableDeck = new Deck(); // 0 cards on the table @@ -143,16 +143,15 @@ Shuffling.prototype.start = function(){ // If only 1 card in the deck ==> 1 if(this.cards.length == 1){ - return 1; + this.rounds++; + return; } - // shuffle -> round++ -> check -> shuffle ... + // shuffle -> rounds++ -> check -> shuffle ... do { this.shuffle(); } while (!this.compareDecks()); - - return this.round; }; diff --git a/js/shufflingDeck.js b/js/shufflingDeck.js index 16be171..698ef68 100644 --- a/js/shufflingDeck.js +++ b/js/shufflingDeck.js @@ -26,7 +26,7 @@ if(numberOfCards === undefined || !Number.isInteger(numberOfCards) || numberOfCa let shaffleCards = new Shuffling(); // Initialization of Shuffling object shaffleCards.initDecks(numberOfCards); // Initialization of decks -let rounds = shaffleCards.start(); // start shuffling +shaffleCards.start(); // start shuffling -console.log(rounds); +console.log(shaffleCards.rounds);