Last active
July 12, 2017 17:00
-
-
Save Resisty/ff0d900d34997aad8ea0f5ae893a027a to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/python3 | |
ROW = 0 | |
COL = 1 | |
def num_queen_attacks(boardlen, queen, obs): | |
counts = [0] * 8 # queen can attack in eight directions, moving clockwise: | |
# 0 is North, 1 is NE, etc | |
counts[0] = queen[ROW] | |
counts[1] = min([queen[ROW], boardlen - queen[COL] - 1]) | |
counts[2] = boardlen - queen[COL] - 1 | |
counts[3] = min([boardlen - queen[ROW] - 1, boardlen - queen[COL] - 1]) | |
counts[4] = boardlen - queen[ROW] - 1 | |
counts[5] = min([boardlen - queen[ROW] - 1, queen[COL]]) | |
counts[6] = queen[COL] | |
counts[7] = min([queen[ROW], queen[COL]]) | |
for obstacle in obs: | |
if obstacle[ROW] == queen[ROW]: # obstacle and queen are aligned horizontally | |
dist = obstacle[COL] - queen[COL] | |
if dist < 0: # obstacle to the left, direction is "6" | |
counts[6] = -dist - 1 if -dist - 1 < counts[6] else counts[6] | |
else: # obstacle to the right, direction is "2" | |
counts[2] = dist - 1 if dist - 1 < counts[2] else counts[2] | |
if obstacle[COL] == queen[COL]: # obs and queen are aligned vertically | |
dist = obstacle[ROW] - queen[ROW] | |
if dist < 0: # obstacle above, direction is "0" | |
counts[0] = -dist - 1 if -dist - 1 < counts[0] else counts[0] | |
else: # obstacle below, direction is "4" | |
counts[4] = dist - 1 if dist - 1 < counts[4] else counts[4] | |
if obstacle[ROW] - queen[ROW] == obstacle[COL] - queen[COL]: # obs and queen are aligned NW/SE | |
dist = obstacle[ROW] - queen[ROW] | |
if dist < 0: # obstacle is NW, direction is "7" | |
counts[7] = -dist - 1 if -dist - 1 < counts[7] else counts[7] | |
else: # obstacle is SE, direction is "3" | |
counts[3] = dist - 1 if dist - 1 < counts[3] else counts[3] | |
if obstacle[ROW] - queen[ROW] == -(obstacle[COL] - queen[COL]): # obs and queen are aligned NE/SW | |
dist = obstacle[ROW] - queen[ROW] | |
if dist < 0: # obstacle is NE, direction is "1" | |
counts[1] = -dist - 1 if -dist - 1 < counts[1] else counts[1] | |
else: # obstacle is SW, direction is "5" | |
counts[5] = dist - 1 if dist - 1 < counts[5] else counts[5] | |
return sum(counts) | |
n,k = input().strip().split(' ') | |
n,k = [int(n),int(k)] | |
rQueen,cQueen = input().strip().split(' ') | |
rQueen,cQueen = [int(rQueen) - 1,int(cQueen) - 1] # -1 because indexing arrays at 1 is a dick move | |
obstacles = [] | |
for a0 in range(k): | |
rObstacle,cObstacle = input().strip().split(' ') | |
obstacles.append([int(rObstacle) - 1,int(cObstacle) - 1]) # don't be a dick, arrays start at 0 | |
# your code goes here | |
# don't tell me what to do | |
print(num_queen_attacks(n, (rQueen, cQueen), obstacles)) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
AAAAAAAAAAAAAAAAARGH NE/SW backwards. That took way too long to discover.