#!/usr/bin/python3 # 31-Z2-3 # Autor: Jirka Setnička # Syntaktická pomůcka, abychom mohli lépe pracovat s figurkami from collections import namedtuple Figurka = namedtuple('Figurka', ['id', 'typ', 'x', 'y']) # 1. Načteme parametry šachovnice vstup = input().split() N = int(vstup[0]) C = int(vstup[1]) bily = Figurka(None, None, int(vstup[2]), int(vstup[3])) # 2. Načteme všechny černé figurky cerni = [] for i in range(C): vstup = input().split() figurka = Figurka(i, vstup[0], int(vstup[1]), int(vstup[2])) cerni.append(figurka) # 3. Definujeme si funkci, která dostane pozici bílého pěšáka a seznam černých # figurek a vrátí tu nejbližší k němu - tuto funkci pak použijeme, abychom # si v každém z osmi směrů, ze kterých může bílého pěšáka něco ohrožovat, našli # nejbližší černou figurku. def nejblizsi(bily, cerni): nejblizsi = None # Tady si budeme držet zatím nejbližší nalezenou figurku nejblizsiVzdalenost = 0 for figurka in cerni: # Spočítáme si vzdálenost (stačí nám i takto primitivní "po mřížce") vzdalenost = abs(bily.x - figurka.x) + abs(bily.y - figurka.y) if nejblizsi is None or vzdalenost < nejblizsiVzdalenost: nejblizsi = figurka nejblizsiVzdalenost = vzdalenost return nejblizsi # 4. Zkontrolujeme všech osm směrů - funkci výše vždy předáme vyfiltrovanou část # seznamu černých figurek a necháme si najít nejbližší. Pokud to bude věž # v "rovném" nebo střelec v "šikmém" směru, tak jsme našli ohrožující figurku. nebezpecne = [] # 4.1 Nahoru fig = nejblizsi(bily, [f for f in cerni if f.x == bily.x and f.y > bily.y]) if fig is not None and fig.typ == 'V': nebezpecne.append(fig) # 4.2 Dolů fig = nejblizsi(bily, [f for f in cerni if f.x == bily.x and f.y < bily.y]) if fig is not None and fig.typ == 'V': nebezpecne.append(fig) # 4.3 Doleva fig = nejblizsi(bily, [f for f in cerni if f.x < bily.x and f.y == bily.y]) if fig is not None and fig.typ == 'V': nebezpecne.append(fig) # 4.4 Doprava fig = nejblizsi(bily, [f for f in cerni if f.x > bily.x and f.y == bily.y]) if fig is not None and fig.typ == 'V': nebezpecne.append(fig) # 4.5 Doleva nahoru fig = nejblizsi(bily, [f for f in cerni if (f.x + f.y) == (bily.x + bily.y) and f.x < bily.x]) if fig is not None and fig.typ == 'S': nebezpecne.append(fig) # 4.6 Doprava dolů fig = nejblizsi(bily, [f for f in cerni if (f.x + f.y) == (bily.x + bily.y) and f.x > bily.x]) if fig is not None and fig.typ == 'S': nebezpecne.append(fig) # 4.7 Doprava nahoru fig = nejblizsi(bily, [f for f in cerni if (f.x - f.y) == (bily.x - bily.y) and f.x > bily.x]) if fig is not None and fig.typ == 'S': nebezpecne.append(fig) # 4.8 Doleva dolů fig = nejblizsi(bily, [f for f in cerni if (f.x - f.y) == (bily.x - bily.y) and f.x < bily.x]) if fig is not None and fig.typ == 'S': nebezpecne.append(fig) # 5. Pokud je něco v seznamu nebezpečných, tak vypíšeme pořadové číslo první # takové, jinak vypíšeme NE if len(nebezpecne) > 0: print(nebezpecne[0].id) else: print('NE')