Snake and Ladder
Sabse achha design decision: Snake aur Ladder ko ALAG classes mat banao — dono "Jump" hain (start → end). Ladder mein end > start, snake mein end < start. Ek Map<Integer, Integer> jumps hi kaafi hai aur code aadha ho jaata hai.
Turn rotation ke liye Queue use karo — player nikaalo, khilao, wapas peeche daal do. Dice ko interface banao (rollable) taaki test mein fixed-value dice inject kar sako. Interviewer aksar poochta hai "6 aane par extra turn kaise?" — Queue mein wapas aage daal do.
class Game {
private final Map<Integer, Integer> jumps = new HashMap<>(); // snake + ladder dono
private final Deque<Player> turnOrder = new ArrayDeque<>();
private final Dice dice;
void playTurn() {
Player p = turnOrder.poll();
int roll = dice.roll();
int next = p.getPosition() + roll;
if (next <= 100) {
p.setPosition(jumps.getOrDefault(next, next)); // jump apne aap lag gaya
}
if (roll == 6) turnOrder.addFirst(p); else turnOrder.addLast(p);
}
}- Snake aur Ladder ko ek hi Jump abstraction se model karo
- Turn rotation Queue/Deque se — extra turn addFirst se
- Dice ko interface banao taaki deterministic test likha ja sake
Board banate waqt validate karo: snake ka start > end hona chahiye, ladder ka start < end. Ek hi cell par do jumps nahi ho sakte. 100 par na snake ka mooh ho na ladder ka top. 1 par snake ka mooh nahi ho sakta.
Ye validations batana dikhata hai ki tumne INVALID INPUT socha hai — bahut kam candidates ye karte hain aur ye alag se marks deta hai.
void addJump(int start, int end) {
if (start == end) throw new InvalidBoardException("start aur end same");
if (jumps.containsKey(start)) throw new InvalidBoardException("cell par pehle se jump");
if (start == 100 || start == 1) throw new InvalidBoardException("boundary cell");
jumps.put(start, end);
}Classic rule hai ki 100 par pahunchne ke liye EXACT roll chahiye — 97 par ho aur 5 aa jaaye to move cancel. Ye if condition (next <= 100) se handle hota hai; batao ki ye ek configurable RULE hai, hardcoded behaviour nahi.
Multiple dice support ke liye Dice class mein count rakho — roll() sabka jod return kare. Ye chhota sa extension interviewer ke "2 dice se khel sakte ho?" ka jawab de deta hai.