"""
출처:프로그래머스,
https://school.programmers.co.kr/learn/courses/30/lessons/87377
"""
# 풀이 과정
def solution(line):
from itertools import combinations
# 직선 2개씩 묶음 집합
k = list(combinations(line, 2))
# 교점들의 집합
result = []
line_x, line_y = [], []
for a in k:
a = list(a)
# ad-bc check 평행 또는 일치 확인
if a[0][0] * a[1][1] - a[0][1] * a[1][0] == 0:
continue
else:
x = (a[0][1] * a[1][2] - a[0][2] * a[1][1]) / (a[0][0] * a[1][1] - a[0][1] * a[1][0])
y = (a[0][2] * a[1][0] - a[0][0] * a[1][2]) / (a[0][0] * a[1][1] - a[0][1] * a[1][0])
if int(x) == x and int(y) == y:
result.append([int(x), int(y)])
line_x.append(int(x))
line_y.append(int(y))
################### 교점까지 완료 ##################
# print(result)
# print(line_x)
line_y.sort()
print(line_y)
line_x.sort()
print(line_y)
"""
if abs(line_x[0])>=abs(line_x[-1]):
max_x=abs(line_x[0])
else:
max_x=abs(line_x[-1])
"""
check_x = max(line_x) - min(line_x) + 1
# print(check_x,"x")
map = [list("." * check_x) for b in range(min(line_y), max(line_y) + 1)]
# print(map, "map")
result.sort(key=lambda x: (-x[1]))
# print(result)
for c, d in result:
# print(max(line_y)-d,max_x+c,"좌표 확인")
map[max(line_y) - d][c - min(line_x)] = "*"
for t in range(len(map)):
map[t] = "".join(map[t])
# print(map)
return map
# print(result)
# print(int(max_x),int(max_y),"최대값")
# result.sort(key=lambda x:(-x[1],x[0]))
# result=deque(result)
answer = []
check_y = 0
star = ""
print(max_x, max_y, "최댓값")
print(result)
map = [list("." * (max_x * 2 + 1))] * (max_y * 2 + 1)
# x,y middle max_x+1: x middle max_y+1: y middle
for v, w in result:
if v >= 0 and w >= 0:
map[max_y - abs(w)][max_x + abs(v)] = "*"
elif v >= 0 and w < 0:
map[max_y - abs(w)][max_x - abs(v)] = "*"
elif v < 0 and w >= 0:
map[max_y + abs(w)][max_x + abs(v)] = "*"
else:
map[max_y + abs(w)][max_x - abs(v)] = "*"
for t in range(len(map)):
map[t] = "".join(map[t])
# print(map)
return answer