// Path: src/model/Card.java
// public enum Card {
// 
// 	KNIGHT(CardType.UNIT), 
// 	ARCHER(CardType.UNIT), 
// 	CLERIC(CardType.UNIT), 
// 	WIZARD(CardType.UNIT), 
// 	NINJA(CardType.UNIT),
// 	INFERNO(CardType.SPELL), 
// 	REVIVE_POTION(CardType.ITEM), 
// 	RUNEMETAL(CardType.ITEM), 
// 	SCROLL(CardType.ITEM), 
// 	DRAGONSCALE(CardType.ITEM), 
// 	SHINING_HELM(CardType.ITEM), 
// 	CRYSTAL(CardType.UNIT);
// 	
// 	public final CardType type;
// 	
// 	Card(CardType type) {
// 		this.type = type;
// 	}
// 	
// }
// 
// Path: src/model/SquareType.java
// public enum SquareType {
// 
// 	NONE, ASSAULT, DEFENSE, POWER, DEPLOY_1, DEPLOY_2;
// 	
// }
// 
// Path: src/action/Action.java
// public abstract class Action {
// 	
// }
// 
// Path: src/action/DropAction.java
// public class DropAction extends Action {
// 
// 	public Card type;
// 	public Position to;
// 
// 	public DropAction(Card type, Position to) {
// 		super();
// 		this.type = type;
// 		this.to = to;
// 	}
// 
// 	@Override
// 	public int hashCode() {
// 		final int prime = 31;
// 		int result = 1;
// 		result = prime * result + ((to == null) ? 0 : to.hashCode());
// 		result = prime * result + ((type == null) ? 0 : type.hashCode());
// 		return result;
// 	}
// 
// 	@Override
// 	public boolean equals(Object obj) {
// 		if (this == obj)
// 			return true;
// 		if (obj == null)
// 			return false;
// 		if (getClass() != obj.getClass())
// 			return false;
// 		final DropAction other = (DropAction) obj;
// 		if (to == null) {
// 			if (other.to != null)
// 				return false;
// 		} else if (!to.equals(other.to))
// 			return false;
// 		if (type != other.type)
// 			return false;
// 		return true;
// 	}
// 
// 	@Override
// 	public String toString() {
// 		return "DropAction [type=" + type + ", to=" + to + "]";
// 	}
// 
// }
// 
// Path: src/action/EndTurnAction.java
// public class EndTurnAction extends Action {
// 
// 	@Override
// 	public String toString() {
// 		return "EndTurnAction []";
// 	}
// 	
// }
// 
// Path: src/action/SwapCardAction.java
// public class SwapCardAction extends Action {
// 
// 	public Card card;
// 
// 	public SwapCardAction(Card card) {
// 		super();
// 		this.card = card;
// 	}
// 
// 	@Override
// 	public boolean equals(Object obj) {
// 		if (this == obj)
// 			return true;
// 		if (obj == null)
// 			return false;
// 		if (getClass() != obj.getClass())
// 			return false;
// 		SwapCardAction other = (SwapCardAction) obj;
// 		if (card != other.card)
// 			return false;
// 		return true;
// 	}
// 
// 	@Override
// 	public String toString() {
// 		return "SwapCardAction [card=" + card.name() + "]";
// 	}
// 
// }
// 
// Path: src/action/UnitAction.java
// public class UnitAction extends Action {
// 
// 	public Position from;
// 	public Position to;
// 	public UnitActionType type;
// 
// 	public UnitAction(Position from, Position to, UnitActionType type) {
// 		super();
// 		this.from = from;
// 		this.to = to;
// 		this.type = type;
// 	}
// 
// 	@Override
// 	public boolean equals(Object obj) {
// 		if (this == obj)
// 			return true;
// 		if (obj == null)
// 			return false;
// 		if (getClass() != obj.getClass())
// 			return false;
// 		UnitAction other = (UnitAction) obj;
// 		if (from == null) {
// 			if (other.from != null)
// 				return false;
// 		} else if (!from.equals(other.from))
// 			return false;
// 		if (to == null) {
// 			if (other.to != null)
// 				return false;
// 		} else if (!to.equals(other.to))
// 			return false;
// 		if (type != other.type)
// 			return false;
// 		return true;
// 	}
// 
// 
// 
// 	@Override
// 	public String toString() {
// 		return "UnitAction [from=" + from + ", to=" + to + "]";
// 	}
// 
// }
// 
// Path: src/action/UnitActionType.java
// public enum UnitActionType {
// 	ATTACK, MOVE, HEAL, SWAP;
// }


import model.Card;
import model.SquareType;
import action.Action;
import action.DropAction;
import action.EndTurnAction;
import action.SwapCardAction;
import action.UnitAction;
import action.UnitActionType;

		if (action instanceof EndTurnAction)
			if (state.APLeft == 0)
				return 10000;
			else
				return 0;

		if (action instanceof SwapCardAction)
			return 0;

		if (action instanceof DropAction) {
			final DropAction drop = ((DropAction) action);
			if (drop.type == Card.INFERNO) {
				return 3;
			} else if (drop.type == Card.REVIVE_POTION) {
				if (state.units[drop.to.x][drop.to.y].hp == 0)
					return 10;
				else
					return 3;
			} else if (drop.type == Card.SCROLL)
				return 3;
			else if (drop.type == Card.DRAGONSCALE)
				return 3;
			else if (drop.type == Card.RUNEMETAL)
				return 3;
			else if (drop.type == Card.SHINING_HELM)
				return 3;
			else
				return 6;
		} else if (action instanceof UnitAction)
// Path: src/model/Card.java
// public enum Card {
// 
// 	KNIGHT(CardType.UNIT), 
// 	ARCHER(CardType.UNIT), 
// 	CLERIC(CardType.UNIT), 
// 	WIZARD(CardType.UNIT), 
// 	NINJA(CardType.UNIT),
// 	INFERNO(CardType.SPELL), 
// 	REVIVE_POTION(CardType.ITEM), 
// 	RUNEMETAL(CardType.ITEM), 
// 	SCROLL(CardType.ITEM), 
// 	DRAGONSCALE(CardType.ITEM), 
// 	SHINING_HELM(CardType.ITEM), 
// 	CRYSTAL(CardType.UNIT);
// 	
// 	public final CardType type;
// 	
// 	Card(CardType type) {
// 		this.type = type;
// 	}
// 	
// }
// 
// Path: src/model/SquareType.java
// public enum SquareType {
// 
// 	NONE, ASSAULT, DEFENSE, POWER, DEPLOY_1, DEPLOY_2;
// 	
// }
// 
// Path: src/action/Action.java
// public abstract class Action {
// 	
// }
// 
// Path: src/action/DropAction.java
// public class DropAction extends Action {
// 
// 	public Card type;
// 	public Position to;
// 
// 	public DropAction(Card type, Position to) {
// 		super();
// 		this.type = type;
// 		this.to = to;
// 	}
// 
// 	@Override
// 	public int hashCode() {
// 		final int prime = 31;
// 		int result = 1;
// 		result = prime * result + ((to == null) ? 0 : to.hashCode());
// 		result = prime * result + ((type == null) ? 0 : type.hashCode());
// 		return result;
// 	}
// 
// 	@Override
// 	public boolean equals(Object obj) {
// 		if (this == obj)
// 			return true;
// 		if (obj == null)
// 			return false;
// 		if (getClass() != obj.getClass())
// 			return false;
// 		final DropAction other = (DropAction) obj;
// 		if (to == null) {
// 			if (other.to != null)
// 				return false;
// 		} else if (!to.equals(other.to))
// 			return false;
// 		if (type != other.type)
// 			return false;
// 		return true;
// 	}
// 
// 	@Override
// 	public String toString() {
// 		return "DropAction [type=" + type + ", to=" + to + "]";
// 	}
// 
// }
// 
// Path: src/action/EndTurnAction.java
// public class EndTurnAction extends Action {
// 
// 	@Override
// 	public String toString() {
// 		return "EndTurnAction []";
// 	}
// 	
// }
// 
// Path: src/action/SwapCardAction.java
// public class SwapCardAction extends Action {
// 
// 	public Card card;
// 
// 	public SwapCardAction(Card card) {
// 		super();
// 		this.card = card;
// 	}
// 
// 	@Override
// 	public boolean equals(Object obj) {
// 		if (this == obj)
// 			return true;
// 		if (obj == null)
// 			return false;
// 		if (getClass() != obj.getClass())
// 			return false;
// 		SwapCardAction other = (SwapCardAction) obj;
// 		if (card != other.card)
// 			return false;
// 		return true;
// 	}
// 
// 	@Override
// 	public String toString() {
// 		return "SwapCardAction [card=" + card.name() + "]";
// 	}
// 
// }
// 
// Path: src/action/UnitAction.java
// public class UnitAction extends Action {
// 
// 	public Position from;
// 	public Position to;
// 	public UnitActionType type;
// 
// 	public UnitAction(Position from, Position to, UnitActionType type) {
// 		super();
// 		this.from = from;
// 		this.to = to;
// 		this.type = type;
// 	}
// 
// 	@Override
// 	public boolean equals(Object obj) {
// 		if (this == obj)
// 			return true;
// 		if (obj == null)
// 			return false;
// 		if (getClass() != obj.getClass())
// 			return false;
// 		UnitAction other = (UnitAction) obj;
// 		if (from == null) {
// 			if (other.from != null)
// 				return false;
// 		} else if (!from.equals(other.from))
// 			return false;
// 		if (to == null) {
// 			if (other.to != null)
// 				return false;
// 		} else if (!to.equals(other.to))
// 			return false;
// 		if (type != other.type)
// 			return false;
// 		return true;
// 	}
// 
// 
// 
// 	@Override
// 	public String toString() {
// 		return "UnitAction [from=" + from + ", to=" + to + "]";
// 	}
// 
// }
// 
// Path: src/action/UnitActionType.java
// public enum UnitActionType {
// 	ATTACK, MOVE, HEAL, SWAP;
// }


// Path: src/ai/util/SimpleActionComparator.java
import model.Card;
import model.SquareType;
import action.Action;
import action.DropAction;
import action.EndTurnAction;
import action.SwapCardAction;
import action.UnitAction;
import action.UnitActionType;


		if (action instanceof EndTurnAction)
			if (state.APLeft == 0)
				return 10000;
			else
				return 0;

		if (action instanceof SwapCardAction)
			return 0;

		if (action instanceof DropAction) {
			final DropAction drop = ((DropAction) action);
			if (drop.type == Card.INFERNO) {
				return 3;
			} else if (drop.type == Card.REVIVE_POTION) {
				if (state.units[drop.to.x][drop.to.y].hp == 0)
					return 10;
				else
					return 3;
			} else if (drop.type == Card.SCROLL)
				return 3;
			else if (drop.type == Card.DRAGONSCALE)
				return 3;
			else if (drop.type == Card.RUNEMETAL)
				return 3;
			else if (drop.type == Card.SHINING_HELM)
				return 3;
			else
				return 6;
		} else if (action instanceof UnitAction)
			if (((UnitAction) action).type == UnitActionType.ATTACK) {