Amazon Interview Question for SDE-2s


Team: AWS
Country: United States




Comment hidden because of low score. Click to expand.
2
of 2 vote

package careercup.cardapp;

/**
 * Created by Dhatchana Moorthy.
 * Date: Aug 19, 2016
 * Time: 9:46:51 AM
 */
public class Card {
    //0 for spade, 1 for heart, 2 for diamond and 3 for club
    int cardsymbol;
    int cardnumber;

    public Card(int cardsymbol, int cardnumber)
    {
        this.cardsymbol = cardsymbol;
        this.cardnumber = cardnumber;
    }
}

package careercup.cardapp;

import java.util.Stack;
import java.util.Random;

/**
 * Created by Dhatchana Moorthy.
 * Date: Aug 19, 2016
 * Time: 9:49:50 AM
 */
public class Deck {
    Stack<Card> cardstack = new Stack<Card>();

    private static Random rand = new Random();

    public Deck()
    {
        populateDeckWithCards();
        shuffle();
    }

    public void populateDeckWithCards()
    {
        for(int i=0; i < 4; i++)
        {
            for(int j=1; j < 14; j++)
            {
                cardstack.push(new Card(i, j));
            }
        }
    }

    public void shuffle()
    {
        //fisher yates shuffle algorithm
        for(int i=cardstack.size()-1; i > 0; i--)
        {
            int swapindex = rand.nextInt(i);
            
            Card temp = cardstack.get(i);
            cardstack.set(i, cardstack.get(swapindex));
            cardstack.set(swapindex, temp);
        }
    }

    public void deal(String dealtype, int numberofpersons)
    {
        //Seperate dealtype classes can be created
        if(dealtype.equals("ace"))
        {
            int i=1;
            while(!cardstack.isEmpty())
            {
                //Seperate person classes can be created
                Card card = cardstack.pop();

                System.out.println();
                int person = i%numberofpersons;
                if(person == 0)
                {
                    person = 4;
                }

                System.out.print("Person: "+person+" cardsymbol: ");
                if(card.cardsymbol == 0)
                {
                    System.out.print("Spade");
                }
                else if(card.cardsymbol == 1)
                {
                    System.out.print("heart");
                }
                else if(card.cardsymbol == 2)
                {
                    System.out.print("diamond");
                }
                else
                {
                    System.out.print("club");
                }

                if(card.cardnumber == 1)
                {
                    System.out.print(" cardnumber: ace");
                }
                else if(card.cardnumber == 11)
                {
                    System.out.print("cardnumber: Jack");
                }
                else if(card.cardnumber == 12)
                {
                    System.out.print("cardnumber: Queen");
                }
                else if(card.cardnumber == 13)
                {
                    System.out.print("cardnumber: King");                    
                }
                else
                {
                    System.out.print("cardnumber: "+card.cardnumber);
                }

                i++;
            }
        }
    }
}

package careercup.cardapp;

/**
 * Created by Dhatchana Moorthy.
 * Date: Aug 21, 2016
 * Time: 6:45:21 PM
 */
public class CardGame {

    public static void main(String[] args)
    {
        Deck deck = new Deck();

        deck.deal("ace", 4);
    }
}

- Dhatchana Moorthy August 21, 2016 | Flag Reply
Comment hidden because of low score. Click to expand.
0
of 0 vote

Attempt at a solution. Note that there is no error checking done in this code but in an interview it would be worth pointing out where errors may occur.

// ======================================================================
// Filename: deck.cc
// Description: Deck and card classes meeting requirements.
// Created: Thu Sep  1 20:51:26 2016 (-0500)
// Last-Updated: Thu Sep  1 21:29:36 2016 (-0500)
// Author: Ivan Guerra
// ======================================================================
#include <algorithm>
#include <string>
#include <vector>

class Card {
private:
    typedef std::size_t size_type;
    std::string m_suit;
    size_type m_value;
    
public:
    Card(const std::string& suit, size_type value) : m_suit(suit), m_value(value) { }
    
    std::string get_suit() const { return m_suit; }
    size_type get_value() const { return m_value; }
    void set_suit(const std::string& suit) { m_suit = suit; }
    void set_value(size_type value) { m_value = value; }

    friend bool operator==(const Card& lhs, const Card& rhs) { return (lhs.m_suit == rhs.m_suit) && (lhs.m_value == rhs.m_value); }
};

class Deck {
private:
    typedef std::size_t size_type;
    typedef std::vector<Card> card_set;
    card_set m_cards;

public:
    Deck() { }
    Deck(const card_set& cards) : m_cards(cards) { }

    size_type n_cards() const { return m_cards.size(); }
    void shuffle() { std::random_shuffle(m_cards.begin(), m_cards.end()); }
    Card draw_top() const { return m_cards[0]; }
    Card draw_bottom() const { return m_cards.back(); }
    Card draw_random();
    void add_card(const Card& val) { m_cards.push_back(val); }
    void remove_card(const Card& val) { m_cards.erase(std::find(m_cards.begin(), m_cards.end(), val)); }
    std::vector<Deck> deal(size_type n_persons, size_type hand_size);
};

Card Deck::draw_random() {
    shuffle();
    return draw_top();
}

std::vector<Deck> Deck::deal(size_type n_persons, size_type hand_size) {
    std::vector<Deck> user_decks(n_persons);
    for (auto i = 0; i < n_persons; i++) {
	for (auto j = 0; j < hand_size; j++) {
	    Card selected_card = draw_random();
	    user_decks[i].add_card(selected_card);
	    remove_card(selected_card);
	}
    }
    return user_decks;

}

- ieg September 02, 2016 | Flag Reply
Comment hidden because of low score. Click to expand.
0
of 0 vote

CardShape.java

and

package com.ankitgupta;

/**
* Created by ankitgupta on 9/9/16.
*/
public enum CardShape {
SPADE,
DIAMOND,
CLUB,
HEART;
}

and

CardNumber.java

and

package com.ankitgupta;

/**
* Created by ankitgupta on 9/9/16.
*/
public enum CardNumber {
ACE,
TWO,
THREE,
FOUR,
FIVE,
SIX,
SEVEN,
EIGHT,
NINE,
TEN,
JACK,
QUEEN,
KING;
}

and

Card.java

and

package com.ankitgupta;

/**
* Created by ankitgupta on 9/9/16.
*/
public class Card {

CardShape shape;
CardNumber number;

Card(CardShape shape,CardNumber number){
this.shape = shape;
this.number = number;
}

public CardNumber getNumber() {
return number;
}

public CardShape getShape() {
return shape;
}

public String getName(){
return number + " of " + shape;
}
}

and

Deck.java

and

package com.ankitgupta;

import java.util.Random;
import java.util.Stack;

/**
* Created by ankitgupta on 9/9/16.
*/
public class Deck {

public static Stack<Card> getNewSortedDeck(){
Stack<Card> cardDeck = new Stack<Card>();
for (CardShape shape: CardShape.values()){
for (CardNumber number: CardNumber.values()){
Card card = new Card(shape,number);
cardDeck.push(card);
}
}
return cardDeck;
}

public static Stack<Card> getShuffeledDeck(){
return getShuffeledDeck(getNewSortedDeck());
}

public static Stack<Card> getShuffeledDeck(Stack<Card> deck){
Stack<Card> cardDeck = new Stack<Card>();
int count = 0;
for (int i=deck.size();i>0;i--){
Random random = new Random();
Card randomCard = deck.remove(random.nextInt(i));
cardDeck.push(randomCard);
}
return cardDeck;
}

public static void printDeck(Stack<Card> deck){
for (int i=0 ; i<deck.size();i++) {
System.out.println("Adding Random Card No. " + (i+1) + " to the Deck : " + deck.get(i).getName());
}
}
}

and

Player.java

and

package com.ankitgupta;

import java.util.Stack;

/**
* Created by ankitgupta on 9/9/16.
*/
public class Player {

private String name;
private Stack<Card> cards;

Player (String name){
this.name = name;
this.cards = new Stack<Card>();
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public Stack<Card> getCards() {
return cards;
}

public void setCards(Stack<Card> cards) {
this.cards = cards;
}

public void addCard(Card card){
this.cards.push(card);
}

public void removeCard(Card card){
this.cards.remove(card);
}

}

and

CardGame.java

and

package com.ankitgupta;

import java.security.PublicKey;
import java.util.Stack;

/**
* Created by ankitgupta on 9/9/16.
*/
public class CardGame {
private Player[] players;
private int cardsPerPlayer;
Stack<Card> stackOfCards = Deck.getShuffeledDeck();
CardGame(Player[] players){
this.players = players;
this.cardsPerPlayer=0;
}

CardGame(Player[] players, int cardsPerPlayer){
this.players = players;
this.cardsPerPlayer = cardsPerPlayer;
}

public void dealCards(){
int playerCount = players.length;
if (playerCount>0){
int cardsToDeal = cardsPerPlayer==0? stackOfCards.size() :cardsPerPlayer*playerCount;
for (int i=0;i<cardsToDeal;i++){
players[i%playerCount].addCard(stackOfCards.pop());
}
}
}
public Stack<Card> getStackOfCards(){
return stackOfCards;
}
}

and

Deal.java

and

package com.ankitgupta;

import java.util.Stack;

/**
* Created by ankitgupta on 9/9/16.
*/
public class Deal {

public static void main(String[] args) {

Player player1 = new Player("Player1");
Player player2 = new Player("Player2");
Player player3 = new Player("Player3");
Player player4 = new Player("Player4");

Player[] players = {player1,player2,player3,player4};
CardGame game = new CardGame(players);
game.dealCards();

System.out.println("Player 1 Cards : ");
Deck.printDeck(player1.getCards());

System.out.println("Player 2 Cards : ");
Deck.printDeck(player2.getCards());

System.out.println("Player 3 Cards : ");
Deck.printDeck(player3.getCards());

System.out.println("Player 4 Cards : ");
Deck.printDeck(player4.getCards());

System.out.println("Remaining Cards : ");
Deck.printDeck(game.getStackOfCards());

}
}

and

- Ankit Gupta September 09, 2016 | Flag Reply
Comment hidden because of low score. Click to expand.
0
of 0 vote

CardShape.java

package com.ankitgupta;

/**
 * Created by ankitgupta on 9/9/16.
 */
public enum CardShape {
	SPADE,
	DIAMOND,
	CLUB,
	HEART;
}

CardNumber.java

package com.ankitgupta;

/**
 * Created by ankitgupta on 9/9/16.
 */
public enum CardNumber {
	ACE,
	TWO,
	THREE,
	FOUR,
	FIVE,
	SIX,
	SEVEN,
	EIGHT,
	NINE,
	TEN,
	JACK,
	QUEEN,
	KING;
}

Card.java

package com.ankitgupta;

/**
 * Created by ankitgupta on 9/9/16.
 */
public class Card {

	CardShape shape;
	CardNumber number;

	Card(CardShape shape,CardNumber number){
		this.shape = shape;
		this.number = number;
	}

	public CardNumber getNumber() {
		return number;
	}

	public CardShape getShape() {
		return shape;
	}

	public String getName(){
		return number + " of " + shape;
	}
}

Deck.java

package com.ankitgupta;

import java.util.Random;
import java.util.Stack;

/**
 * Created by ankitgupta on 9/9/16.
 */
public class Deck {

	public static Stack<Card> getNewSortedDeck(){
		Stack<Card> cardDeck = new Stack<Card>();
		for (CardShape shape: CardShape.values()){
			for (CardNumber number: CardNumber.values()){
				Card card = new Card(shape,number);
				cardDeck.push(card);
			}
		}
		return cardDeck;
	}

	public static Stack<Card> getShuffeledDeck(){
		return getShuffeledDeck(getNewSortedDeck());
	}

	public static Stack<Card> getShuffeledDeck(Stack<Card> deck){
		Stack<Card> cardDeck = new Stack<Card>();
		int count = 0;
		for (int i=deck.size();i>0;i--){
			Random random = new Random();
			Card randomCard = deck.remove(random.nextInt(i));
			cardDeck.push(randomCard);
		}
		return cardDeck;
	}

	public static void printDeck(Stack<Card> deck){
		for (int i=0 ; i<deck.size();i++) {
			System.out.println("Adding Random Card No. " + (i+1) + " to the Deck : " + deck.get(i).getName());
		}
	}
}

Player.java

package com.ankitgupta;

import java.util.Stack;

/**
 * Created by ankitgupta on 9/9/16.
 */
public class Player {

	private String name;
	private Stack<Card> cards;

	Player (String name){
		this.name = name;
		this.cards = new Stack<Card>();
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public Stack<Card> getCards() {
		return cards;
	}

	public void setCards(Stack<Card> cards) {
		this.cards = cards;
	}

	public void addCard(Card card){
		this.cards.push(card);
	}
	
	public void removeCard(Card card){
		this.cards.remove(card);
	}

}

CardGame.java

package com.ankitgupta;

import java.security.PublicKey;
import java.util.Stack;

/**
 * Created by ankitgupta on 9/9/16.
 */
public class CardGame {
	private Player[] players;
	private int cardsPerPlayer;
	Stack<Card> stackOfCards = Deck.getShuffeledDeck();
	CardGame(Player[] players){
		this.players = players;
		this.cardsPerPlayer=0;
	}

	CardGame(Player[] players, int cardsPerPlayer){
		this.players = players;
		this.cardsPerPlayer = cardsPerPlayer;
	}

	public void dealCards(){
		int playerCount = players.length;
		if (playerCount>0){
			int cardsToDeal = cardsPerPlayer==0? stackOfCards.size() :cardsPerPlayer*playerCount;
			for (int i=0;i<cardsToDeal;i++){
				players[i%playerCount].addCard(stackOfCards.pop());
			}
		}
	}
	public Stack<Card> getStackOfCards(){
		return stackOfCards;
	}
}

Deal.java

package com.ankitgupta;

import java.util.Stack;

/**
 * Created by ankitgupta on 9/9/16.
 */
public class Deal {

	public static void main(String[] args) {

		Player player1 = new Player("Player1");
		Player player2 = new Player("Player2");
		Player player3 = new Player("Player3");
		Player player4 = new Player("Player4");

		Player[] players = {player1,player2,player3,player4};
		CardGame game = new CardGame(players);
		game.dealCards();

		System.out.println("Player 1 Cards : ");
		Deck.printDeck(player1.getCards());

		System.out.println("Player 2 Cards : ");
		Deck.printDeck(player2.getCards());

		System.out.println("Player 3 Cards : ");
		Deck.printDeck(player3.getCards());

		System.out.println("Player 4 Cards : ");
		Deck.printDeck(player4.getCards());

		System.out.println("Remaining Cards : ");
		Deck.printDeck(game.getStackOfCards());

	}
}

- Ankit Gupta September 09, 2016 | Flag Reply


Add a Comment
Name:

Writing Code? Surround your code with {{{ and }}} to preserve whitespace.

Books

is a comprehensive book on getting a job at a top tech company, while focuses on dev interviews and does this for PMs.

Learn More

Videos

CareerCup's interview videos give you a real-life look at technical interviews. In these unscripted videos, watch how other candidates handle tough questions and how the interviewer thinks about their performance.

Learn More

Resume Review

Most engineers make critical mistakes on their resumes -- we can fix your resume with our custom resume review service. And, we use fellow engineers as our resume reviewers, so you can be sure that we "get" what you're saying.

Learn More

Mock Interviews

Our Mock Interviews will be conducted "in character" just like a real interview, and can focus on whatever topics you want. All our interviewers have worked for Microsoft, Google or Amazon, you know you'll get a true-to-life experience.

Learn More