added template service
This commit is contained in:
@@ -0,0 +1,22 @@
|
|||||||
|
package com.truecaller.truecallerassignment.backend.controller;
|
||||||
|
|
||||||
|
import java.util.concurrent.atomic.AtomicLong;
|
||||||
|
|
||||||
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestParam;
|
||||||
|
import org.springframework.web.bind.annotation.ResponseBody;
|
||||||
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
|
import com.truecaller.truecallerassignment.backend.entities.Tile;
|
||||||
|
|
||||||
|
@RestController
|
||||||
|
public class TruecallerAssignmentController {
|
||||||
|
private static final String template = "Hello, %s!";
|
||||||
|
private final AtomicLong counter = new AtomicLong();
|
||||||
|
|
||||||
|
@GetMapping("/hello-world")
|
||||||
|
@ResponseBody
|
||||||
|
public Tile sayHello(@RequestParam(name="name", required=false, defaultValue="Stranger") String name) {
|
||||||
|
return new Tile(4, 5, false);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,97 @@
|
|||||||
|
package com.truecaller.truecallerassignment.backend.entities;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
public class Tile {
|
||||||
|
private int row;
|
||||||
|
private int column;
|
||||||
|
private boolean visited;
|
||||||
|
private List<Tile> allowedMoves;
|
||||||
|
|
||||||
|
public Tile(int row, int column, boolean visited) {
|
||||||
|
super();
|
||||||
|
this.row = row;
|
||||||
|
this.column = column;
|
||||||
|
this.visited = visited;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public int getRow() {
|
||||||
|
return row;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setRow(int row) {
|
||||||
|
this.row = row;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getColumn() {
|
||||||
|
return column;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setColumn(int column) {
|
||||||
|
this.column = column;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isVisited() {
|
||||||
|
return visited;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setVisited(boolean visited) {
|
||||||
|
this.visited = visited;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getAllowedMoves() {
|
||||||
|
String moves = null;
|
||||||
|
if (allowedMoves != null) {
|
||||||
|
moves = allowedMoves.stream().map(tile -> tile.row + "-" + tile.column).collect(Collectors.joining(", "));
|
||||||
|
}
|
||||||
|
|
||||||
|
return moves;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAllowedMoves(List<Tile> allowedMoves) {
|
||||||
|
this.allowedMoves = allowedMoves;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function to generate all possible moves from a tile based on it's current position.
|
||||||
|
*
|
||||||
|
* @return List<Tile> list of all positions possible from given tile
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public void generateAllowedMoves() {
|
||||||
|
List<Tile> allowedMoves = new ArrayList<Tile>();
|
||||||
|
if (row > 3)
|
||||||
|
allowedMoves.add(getTile(row - 3, column));
|
||||||
|
if (row < 8)
|
||||||
|
allowedMoves.add(getTile(row + 3, column));
|
||||||
|
if (column > 3)
|
||||||
|
allowedMoves.add(getTile(row, column - 3));
|
||||||
|
if (column < 8)
|
||||||
|
allowedMoves.add(getTile(row, column + 3));
|
||||||
|
if (row > 2 && column > 2)
|
||||||
|
allowedMoves.add(getTile(row - 2, column - 2));
|
||||||
|
if (row > 2 && column < 9)
|
||||||
|
allowedMoves.add(getTile(row - 2, column + 2));
|
||||||
|
if (row < 9 && column > 2)
|
||||||
|
allowedMoves.add(getTile(row + 2, column - 2));
|
||||||
|
if (row < 9 && column < 9)
|
||||||
|
allowedMoves.add(getTile(row + 2, column + 2));
|
||||||
|
|
||||||
|
this.allowedMoves = allowedMoves.stream().filter(tile -> !tile.visited).collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
String moves = null;
|
||||||
|
if (allowedMoves != null) {
|
||||||
|
moves = allowedMoves.stream().map(tile -> tile.row + "-" + tile.column).collect(Collectors.joining(", "));
|
||||||
|
}
|
||||||
|
return "Tile [row=" + row + ", column=" + column + ", visited=" + visited + ", allowedMoves=" + moves
|
||||||
|
+ "]";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user