class Ajedrez56 extends Program {
  void run() {
    Pieza p= new Peon(6, 2, "blanco");
    Pieza c= new Caballo(4, 3, "negro");
    Pieza a= new Alfil(4, 8, "negro");
    Pieza t= new Torre(6, 8, "negro");

    Pieza[] variaspiezas= { c, a, t };
    println(cuentaAmenazas(p, variaspiezas, 3));
  }

  int cuentaAmenazas(Pieza pieza, Pieza[] variaspiezas, int n) {
    int fil= pieza.fila();
    int col= pieza.columna();
    int cont= 0;
    int i= 0;
    while (i<n) {
      if (variaspiezas[i].amenaza(fil, col))
        cont= cont+1;
      i= i+1;
    }
    return cont;
  }
}

class Pieza extends Program {
  int fil, col;
  String color;
  boolean amenaza(int f, int c) {
    return false;
  }
  int fila() {
    return fil;
  }
  int columna() {
    return col;
  }
}

class Torre extends Pieza {
  Torre(int fil, int col, String color) {
    this.fil= fil;
    this.col= col;
    this.color= color;
  }
  boolean amenaza(int f, int c) {
    return f==fil || c==col;
  }
}

class Caballo extends Pieza {
  Caballo(int fil, int col, String color) {
    this.fil= fil;
    this.col= col;
    this.color= color;
  }
  boolean amenaza(int f, int c) {
    return abs(f-fil)==2 && abs(c-col)==1 || abs(f-fil)==1 && abs(c-col)==2;
  }
}

class Alfil extends Pieza {
  Alfil(int fil, int col, String color) {
    this.fil= fil;
    this.col= col;
    this.color= color;
  }
  boolean amenaza(int f, int c) {
    return false; // No era parte del control
  }
}

class Peon extends Pieza {
  Peon(int fil, int col, String color) {
    this.fil= fil;
    this.col= col;
    this.color= color;
  }
  boolean amenaza(int f, int c) {
    return false; // No era parte del control
  }
}
