Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
import java.util.HashMap;
import java.util.Map;
import java.util.Random;
/**
* Created by newuser on 1/9/16.
*/
public class Experiment {
private TileFloor floor;
private Map<Tile,Boolean> hasVisited;
public Experiment(TileFloor floor){
this.floor=floor;
hasVisited = new HashMap<Tile,Boolean>();
}
public Experiment(){
floor = new TileFloor(7,7);
hasVisited = new HashMap<Tile,Boolean>();
}
public boolean visitedAllCells(){
return hasVisited.size()==floor.getNumberOfTiles();
}
public void simulate(){
int iterationLimit =0;
Random rand = new Random();
while(!visitedAllCells()){
// value for decision of
int move = rand.nextInt(8);
iterationLimit++;
Tile tile = floor.getRoach();
int x = tile.getX()+RoachMove.values()[move].getX();
int y = tile.getY()+RoachMove.values()[move].getY();
if(floor.checkBounds(x,y)){
hasVisited.put(tile,true);
floor.getRoach().setHasRoach(false);
floor.hasRoach(x,y);
}
if (iterationLimit==500000){
System.err.println("Iteration limit met");
break;
}
}
System.out.println("Number of legal moves: "+legalMoves());
floor.display();
}
public int legalMoves(){
int sum=0;
for(Tile m : hasVisited.keySet()){
sum+= m.getValue();
}
return sum;
}
}
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// write your code here
Scanner keyboard = new Scanner(System.in);
System.out.print("Enter rows: ");
int rows = keyboard.nextInt();
System.out.print("Enter columns: ");
int columns = keyboard.nextInt();
TileFloor floor = new TileFloor(rows,columns);
int x,y;
System.out.println("Enter initial roach position");
do {
System.out.print("X = ");
x = keyboard.nextInt();
System.out.print("Y = ");
y = keyboard.nextInt();
}while(!floor.checkBounds(x,y));
floor.hasRoach(x,y);
Experiment experiment = new Experiment(floor);
experiment.simulate();
}
}
/**
* Created by newuser on 1/9/16.
*/
public enum RoachMove {
ZERO(-1,1),
ONE(0,1),
TWO(1,1),
THREE(1,0),
FOUR(1,-1),
FIVE(0,-1),
SIX(-1,-1),
SEVEN(-1,0);
private int x;
private int y;
RoachMove(int x, int y){
this.x=x;
this.y=y;
}
public int getX(){
return x;
}
public int getY(){
return y;
}
}
/**
* Created by newuser on 1/9/16.
*/
public class Tile implements Comparable<Tile>{
private int x;
private int y;
private int value;
private boolean hasRoach;
public Tile(int x, int y){
this.x = x;
this.y = y;
value = 0;
hasRoach=false;
}
public void incrementValue(){
++value;
}
public void setHasRoach(boolean hasRoach){
this.hasRoach=hasRoach;
}
public int getValue(){
return value;
}
public int getX() {
return x;
}
public int getY() {
return y;
}
@Override
public int compareTo(Tile tile) {
if(tile.getX()!=x&& tile.getY()!=y){
return -1;
}
return 0;
}
}
/**
* Created by newuser on 1/9/16.
*/
public class TileFloor {
private Tile[][] floor;
Tile roach;
private int rows;
private int columns;
public TileFloor(int rows, int columns){
this.rows = rows;
this.columns=columns;
floor = new Tile[rows][columns];
initCells();
}
private void initCells(){
for(int i=0;i<rows;i++){
for(int j=0;j<columns;j++){
floor[i][j] = new Tile(i,j);
}
}
}
public void hasRoach(int x, int y){
roach = floor[x][y];
floor[x][y].setHasRoach(true);
floor[x][y].incrementValue();
}
public Tile getRoach(){
return roach;
}
public boolean checkBounds(int x_position, int y_position){
if(x_position<0||y_position<0){
return false;
}
if(x_position>=rows||y_position>=columns){
return false;
}
return true;
}
public void display(){
for(int i=0;i<rows;i++){
for(int j=0;j<columns;j++){
Tile tile = floor[i][j];
System.out.print(tile.getValue()+"\t");
}
System.out.println();
}
}
public int getNumberOfTiles(){
return rows*columns;
}
}
@urbanintell

This comment has been minimized.

Copy link
Owner Author

@urbanintell urbanintell commented Jan 20, 2016

SOLUTION

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment