Advertisement
Guest User

Untitled

a guest
Apr 23rd, 2017
58
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.24 KB | None | 0 0
  1.     package knightguard;
  2.    
  3.     import java.util.ArrayList;
  4.     import java.util.HashSet;
  5.     import java.util.Scanner;
  6.     import java.util.Set;
  7.    
  8.     public class KnightGuard {
  9.    
  10.         static class Position {
  11.    
  12.             int x;
  13.             int y;
  14.    
  15.             public Position(int x, int y) {
  16.                 this.x = x;
  17.                 this.y = y;
  18.             }
  19.    
  20.             public boolean equals(Position p) {
  21.                 if (p.x == x && p.y == y) {
  22.                     return true;
  23.                 }
  24.                 return false;
  25.             }
  26.    
  27.             @Override
  28.             public String toString() {
  29.                 return x + "," + y;
  30.             }
  31.    
  32.         }
  33.    
  34.         ArrayList<Position> knightPositions;
  35.         int size;
  36.         int no_of_knights;
  37.    
  38.         public KnightGuard(int size, int k, ArrayList<Position> knightPositions) {
  39.             this.knightPositions = knightPositions;
  40.             no_of_knights = k;
  41.             this.size = size;
  42.         }
  43.    
  44.         public int getSafePositions() {
  45.             Set<Position> safePos = new HashSet<>();
  46.             for (Position p : knightPositions) {
  47.                 if (isValid(p.x - 2, p.y - 1)) {
  48.                     safePos.add(new Position(p.x - 2, p.y - 1));
  49.                 }
  50.                 if (isValid(p.x - 2, p.y + 1)) {
  51.                     safePos.add(new Position(p.x - 2, p.y + 1));
  52.                 }
  53.                 if (isValid(p.x + 2, p.y - 1)) {
  54.                     safePos.add(new Position(p.x + 2, p.y - 1));
  55.                 }
  56.                 if (isValid(p.x + 2, p.y + 1)) {
  57.                     safePos.add(new Position(p.x + 2, p.y + 1));
  58.                 }
  59.    
  60.                 if (isValid(p.x - 1, p.y - 2)) {
  61.                     safePos.add(new Position(p.x - 1, p.y - 2));
  62.                 }
  63.                 if (isValid(p.x - 1, p.y + 2)) {
  64.                     safePos.add(new Position(p.x - 1, p.y + 2));
  65.                 }
  66.                 if (isValid(p.x + 1, p.y - 2)) {
  67.                     safePos.add(new Position(p.x + 1, p.y - 2));
  68.                 }
  69.                 if (isValid(p.x + 1, p.y + 2)) {
  70.                     safePos.add(new Position(p.x + 1, p.y + 2));
  71.                 }
  72.             }
  73.    
  74.             return safePos.size();
  75.         }
  76.    
  77.         private boolean isValid(int x, int y) {
  78.             if (x < 0 || x >= size || y < 0 || y >= size) {
  79.                 return false;
  80.             }
  81.    
  82.             if (knightPositions.contains(new Position(x, y))) {
  83.                 return false;
  84.             }
  85.    
  86.             return true;
  87.         }
  88.    
  89.         public static void main(String[] args) {
  90.             Scanner s = new Scanner(System.in);
  91.             int size = s.nextInt();
  92.             int knights = s.nextInt();
  93.             ArrayList<Position> knightPos = new ArrayList<>();
  94.             for (int i = 0; i < knights; i++) {
  95.                 int x = s.next().charAt(0) - 'a';
  96.                 int y = s.nextInt() - 1;
  97.                 knightPos.add(new Position(x, y));
  98.             }
  99.    
  100.             KnightGuard knightGuard = new KnightGuard(size, knights, knightPos);
  101.             System.out.println(knightGuard.getSafePositions());
  102.    
  103.         }
  104.    
  105.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement