Amazon Interview Question
SDE-2sCountry: India
Interview Type: Phone Interview
There should be four classes:
1. CardGame
suits[4] : Suit
2. Suit
cards[13] : Card
suiteType : CardType
3. Card
cardNumber : int
type: CardType
4. CardType
type: String
There could be a separate method living somewhere that would print out a card like "Ace of Spades" or whatever.
// Deck.h
#include "Card.h"
class Deck
{
public:
Deck(); // Could take in an array of cards based on the type of game. Defined in .cpp
void Shuffle(); // Defined in .cpp
// What methods would we need a Deck to have?
// How do we want to retrieve the cards? One by one?
// Do we want to burn cards?
// How much control do we give to other classes in the game?
private:
const Card** m_ppCards; // This could also comfortably be std::vector<Card*> instead of Card**.
int m_numCards;
};
// Card.h with inline definitions.
class Card
{
public:
enum CARDSUIT { SPADES, HEARTS, DIAMONDS, CLUBS, NONE, NO_SUITS};
public:
Card(CARDSUIT suit, int cardNumber)
{
m_suit = suit;
m_cardNumber = cardNumber;
}
CARDSUIT GetSuit() const
{
return m_suit;
}
int GetCardNumber() const
{
return m_cardNumber;
}
private:
CARDSUIT m_suit;
int m_cardNumber;
};
public class Deck
{
public enum CardSuit
{
Spades = 1,
Hearts,
Clubs,
Diamonds,
None
};
public enum CardNumber
{
Ace = 1,
Two,
Three,
Four,
Five,
Six,
Seven,
Eight,
Nine,
Ten,
Jack,
Queen,
King //,Joker
};
public enum CardColor
{
Black = 1,
Red
};
}
public class Cards : Deck
{
//DECK is inherited
public Cards()
{
List<CardNumber> cards = new List<CardNumber>();
List<CardSuit> suits = new List<CardSuit>();
}
public List<Card> NewDeal()
{
List<Card> dealList = new List<Card>();
for (int n=1; n<14;n++)
{
for (int s = 1; s < 5; s++)
{
CardSuit enumSuit = ((CardSuit) s);
CardNumber enumNumber = ((CardNumber)n);
CardColor enumColor;
if (s == 1 || s == 3)
{
enumColor = ((CardColor) 1);
}
else
{
enumColor = ((CardColor)2);
}
Card card = new Card();
card.singleCardColor = enumColor.ToString();
card.singleSuit = enumSuit.ToString();
card.singleNumber = enumNumber.ToString();
dealList.Add(card);
}
}
return dealList;
}
public Card DrawCard(List<Card> deck)
{
Card card = new Card();
Random r = new Random();
string cNumber = string.Empty;
int randomNumber = r.Next(0, deck.Count+1);
int i = 0;
foreach (var c in deck)
{
if (i == randomNumber)
{
card = c;
break;
}
i++;
}
deck.Remove(card);
return card;
}
public class Card
{
public string singleSuit;
public string singleNumber;
public string singleCardColor;
}
}
- Pankaj Kumar October 15, 2013