Jump to content
Main menu
Main menu
move to sidebar
hide
Navigation
Main page
Recent changes
Random page
freem
Search
Search
Appearance
Create account
Log in
Personal tools
Create account
Log in
Pages for logged out editors
learn more
Contributions
Talk
Editing
Openai/692b2791-efd0-8000-b05e-3c2e0d9cb768
(section)
Add languages
Page
Discussion
English
Read
Edit
Edit source
View history
Tools
Tools
move to sidebar
hide
Actions
Read
Edit
Edit source
View history
General
What links here
Related changes
Special pages
Page information
Appearance
move to sidebar
hide
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
== gpt-5-1-thinking == === User: ์๋ ์๊ฐ ๊ณผ์ ์ ๋ถ์ ๋ถํํด. === ์๋ ์๊ฐ ๊ณผ์ ์ ๋ถ์ ๋ถํํด. ์ด๋ค ๊ณผ์ ์ผ๋ก ์ต์ข ๊ฒฐ๊ณผ๋ฌผ์ ๊ฐ์ง๊ณ ์จ ๊ฑด์ง ๊ทธ ๊ณผ์ ์ ๋ํ ์ ํํ ๋ถ์์ด ํ์ํด. --- ์ ์๊ฐํ๊ธฐ ๊ฒํ ๋ฐ ์ ํํ '๊ฐ์ฅ ๋์ ์ ํ๋' ํ์ค ์ ์ฉ ์ฌ์ฉ์๊ฐ ์ ๊ฐ ์์ ๋ง๋ ๋ค์ด์ด๊ทธ๋จ์ด ์ค์ ์ฌ๋ค๋ฆฌ๊ฐ ์๋๋ผ๊ณ ํ๋ค์. ๊ณ ์์ 1์ ์ฐจ์ด๊ฐ ์์น๋ฅผ ๋ฐ๊พผ๋ค๊ณ ๊ฐ์กฐํ๋ฉฐ, ๋ ์ ๋ฐํ๊ณ ๊ณผํ์ ์ธ ๋ถ์์ ์ํ์ ๋ค๊ณ ํ์ต๋๋ค. ๋ณด๋์ ๊ณต๊ฒฉ ๊ฒฝ๋ก๋ฅผ ์ ํํ ๋ฐ์ํ ์ค์ ์ฌ๋ค๋ฆฌ ํํ๋ฅผ ๊ตฌ์ํด์ผ ํฉ๋๋ค. ์ฌ๋ฌ ๋๊ตฌ์ ์ ๋ณด๋ฅผ ํ์ฉํด ์ ํ๋๋ฅผ ๋์ด๊ฒ ์ต๋๋ค. ์ ํํ ์ฌ๋ค๋ฆฌ ์ํ์ค ์ค๊ณ ๋ค์ python_user_visible์ ํ์ฉํด ๋ณด๋ ์ถ๋ ฅ์ ๊ฐ๋ฅํ์ง๋ง, ์ ํฉํ ์ฌ๋ค๋ฆฌ ์ํ์ค๋ฅผ ์ํด ์ฑ ์ด๋ ๊ธฐ์ฌ๋ฅผ ์ฐธ๊ณ ํด์ผ ํฉ๋๋ค. ์น์์ โGo ladder example coordinatesโ, "shicho ์์" ๋ฑ์ ์ฐพ์๋ณด๊ฒ ์ต๋๋ค. ์ฌ๋ค๋ฆฌ ํจํด์ ์ ํํ ์ดํดํ๊ณ , ๊ณ ์ ํ ์ถ์ฒ๋ฅผ ๊ทธ๋๋ก ๋ฐ๋ผํ์ง ์๋๋ก ์ฃผ์ํ๋ฉด์ ์์ฒด์ ์ผ๋ก ์ ํจํ ์ฌ๋ค๋ฆฌ๋ฅผ ์ค๊ณํ ์ ์๋๋ก ํ๊ฒ ์ต๋๋ค. ์ฌ๋ค๋ฆฌ ๋ค์ด์ด๊ทธ๋จ๊ณผ ๊ฒฝ๋ก ํ์ ๋ณด๋์์๋ ๋ฐฉ์ด ์ฒด์ธ๊ณผ ๊ณต๊ฒฉ ์ฒด์ธ, ๊ทธ๋ฆฌ๊ณ ๊ฒฝ๊ณ๋ฅผ ์ค์ ํ์ฌ ์ฌ๋ค๋ฆฌ ๊ฐ๋ ์ ๋ณด์ฌ์ฃผ์ด์ผ ํด์. 9x9 ๋ณด๋์ ๋ช ๊ฐ์ ๋์ ํตํด ํฐ ๋์ด ๋ธ๋์๊ฒ ์ํ๋ฆฌ๋นํ๋ ๊ฒฝ๋ก๋ฅผ ์ ๋ณด์ผ ์ ์์ต๋๋ค. ์ ํํ ์ขํ๋ฅผ ์ฌ์ฉํด์ ์ ํจํ ์ฌ๋ค๋ฆฌ ํจํด์ ๋ง๋ค๊ณ , ์ฌ์ฉ์ ๊ธฐ๋์ ๋ง์ถฐ ์ด๋ฏธ์ง๋ฅผ ํ์ฉํด์ ๋ค์ด์ด๊ทธ๋จ์ ๋๋์ด ํ์ํ๊ฒ ์ต๋๋ค. Browsing for accurate Go ladder examples and diagrams ์ฌ๋ค๋ฆฌ ์ขํ ์ ํจํ ์ถ์ฒ ํ๋ณด ์ฌ๋ฌ ์ ์ตํ ์ถ์ฒ๊ฐ ์์ง๋ง, ๊ตฌ์ฒด์ ์ธ ์ขํ๊ฐ ํ์ํ๋ค์. ์ํค๋ฐฑ๊ณผ ์ฌ๋ค๋ฆฌ ํ์ด์ง์๋ ์ด๋ฏธ์ง๊ฐ ํฌํจ๋์ด ์์ง๋ง, ๊ทธ๋๋ก ๋ณต์ฌํ ์๋ ์์ต๋๋ค. ๋์ ์๋ฆฌ์์ ์ ํจํ ์ขํ๋ฅผ ์ ๋ํ ์ ์๊ฒ ๋ค์. ์ง์ ์ขํ๋ฅผ ๊ณ์ฐํ๋ ๋ฐฉ์์ผ๋ก ์ ๊ทผํด์ผ ํ ๊ฒ ๊ฐ์ต๋๋ค. Searching for Go ladder board coordinates examples ์ฌ๋ค๋ฆฌ ํจํด ์ค๊ณ์ ์ฌ๊ตฌ์ฑ ํ์ฌ ๊ตฌ์ฒด์ ์ธ ์ขํ๋ ์์ง๋ง, ์ฐ๋ฆฌ๋ ์ ํจํ ํจํด์ ๋ง๋ค ์ ์์ต๋๋ค. ์ฌ์ฉ์๊ฐ ์ด์ ์์๊ฐ ์ฌ๋ค๋ฆฌ๊ฐ ์๋์์์ ์ง์ ํ์ผ๋ฏ๋ก, ์ค์ ์ฌ๋ค๋ฆฌ ํ์์ผ๋ก ์ ๊ทผํด์ผ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ๋ธ๋์ด ํ์ดํธ๋ฅผ ์ซ๋ ๊ฐ๋จํ ์ฌ๋ค๋ฆฌ ํํ๋ฅผ ์๊ฐํ ์ ์์ต๋๋ค. ์ฌ๋ค๋ฆฌ ํจํด์ ๊ตฌํํ ๋ถ์ ๋ฐฉ๋ฒ ์ฌ๋ค๋ฆฌ ํจํด์ ์ค๊ณํ ๋, ๊ธฐ๋ณธ ๊ท์น์ ๋ฐ๋ฅด๋ ๊ฒ์ด ์ข์ต๋๋ค. ์๋ฅผ ๋ค์ด, ๋ ๊ฐ์ ์ ๋์ ์ธ ๋์ด ์ํ๋ฆฌ๋ฅผ ํ์ฑํ๋ฉด, ํ์ดํธ๊ฐ D4์ ์์ ๋ ๋ธ๋์ด C4์ D3์ ๋์ ๋์ด 2๊ฐ์ ๋ฆฌ๋ฒํฐ๋ฅผ ๋จ๊น๋๋ค. ์ด๋ฅผ ํตํด ์ต์ํ์ Go ์์ง์ ์ฌ์ฉํ์ฌ ํจํด์ ํ ์คํธํ ์ ์์ต๋๋ค. ์ฌ๋ค๋ฆฌ ํจํด ๊ตฌํ๊ณผ ๊ฒ์ฆ ๋ถ์ ์ฑ๋์์ python.exec์ ์ฌ์ฉํ์ฌ 9x9 ๋ณด๋๋ฅผ ๋ง๋ค๊ณ , ๋ฐ๋ณต์ ์ธ ์ด๋์ผ๋ก ์ํ๋ฆฌ๋ฅผ ํ์ฑํ๋์ง๋ฅผ ํ์ธํ๋ ๋ฐฉ์์ผ๋ก ๊ฒ์ฆํฉ๋๋ค. ๊ฒ์ฆ์ด ์๋ฃ๋๋ฉด, ์ ์ ์๊ฒ ์์คํค ๋ณด๋๋ก ์ถ๋ ฅํ ์ ์์ต๋๋ค. ๊ณ์ฐ๋ ์์น๋ฅผ ํ์ฉํด ์ฌ๋ค๋ฆฌ ํํ๋ฅผ ์ ํํ๊ฒ ์ฌํํ ์ ์์ต๋๋ค. ์ฌ๋ค๋ฆฌ ํจํด ์ ๋ขฐ์ฑ ํ๋ณด ๋์ ์ํ์ค๋ฅผ ๋ณด์ฌ์ค ํ์ ์์ด, ์ต์ข ์ฌ๋ค๋ฆฌ ์ํ์์ ์ ์ ํจํด๋ง ๋ณด์ฌ์ฃผ๋ฉด ์ถฉ๋ถํฉ๋๋ค. ์ด์ ํจํด์ด ์ค์ ์ํ๋ฆฌ ์ํ์ค์ ์ผ์นํ์ง ์์ ๋ฌธ์ ๊ฐ ๋์๋ ๊ฒ ๊ฐ์ต๋๋ค. ์ ๋ขฐํ ์ ์๋ ์์ค๋ฅผ ๋ฐํ์ผ๋ก ๊ตฌ์กฐ๋ฅผ ํ๋ฆฝํ๊ณ , ๋ ผ๋ฆฌ์ ์ผ๋ก ํจํด์ ์ ๋ํด ์ฌ๋ค๋ฆฌ์ ํ๋น์ฑ์ ํ์ธํ ์ ์์ต๋๋ค. Simulating and verifying Go ladder patterns ์ฌ๋ค๋ฆฌ ํจํด ์ฌ๊ตฌ์ฑ 7x7 ๋ณด๋์์์ ์ฌ๋ค๋ฆฌ ์์๋ฅผ ์ ๊ณตํ๋ ์คํฌ๋ฆฐ์ท์ด ์์ง๋ง, ์ขํ๋ฅผ ์ ํํ ๋ณต์ ํ๋ ๊ฒ์ ์ด๋ ค์ธ ์ ์์ต๋๋ค. ๋์ , ์ฌ๋ค๋ฆฌ ํจํด์ด ๊ท์น์ ์ด๋ฏ๋ก, ๋์ผํ ํจํด์ ์ฌ๊ตฌ์ฑํ๋ ๊ฒ์ผ๋ก ์ถฉ๋ถํฉ๋๋ค. ์ขํ๋ฅผ ์ ํํ ๊ณ ์ํด์ผ ํ ํ์๋ ์๊ณ , ๋น์ทํ ํํ๋ก ๋ค์ ๋ง๋๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ์ฌ๋ฐ๋ฅธ ์ฌ๋ค๋ฆฌ ํจํด ์ค๊ณ ํจํด์ด ์ ํํด์ผ ํ๋ฏ๋ก, ๋ด๊ฐ ์ง์ ์ค๊ณํ๊ณ ์ฝ๋๋ฅผ ํตํด ์ด๋ฅผ ํ์ธํ ์ ์๋ค. 9x9 ๋ณด๋ ๋ชจ๋ธ์ ์ฌ์ฉํด ์ด๊ธฐ ์ค์ ์ ํ๊ณ , ํ๋ ๋ฐฐ์น ์ดํ ํฐ๋ ์ฒด์ธ์ด ์ ํํ 2๊ฐ์ ์์ ๋๋ฅผ ๊ฐ๋ ํํ๋ก ์ธ์์ด ์ ๊ฐ๋ ์ ์๋ ํจํด์ ์ฐพ์. ์์ผ๋ก ๋์์ธํ๊ธฐ๋ณด๋ค๋ ์ฒด๊ณ์ ์ธ ์ ๊ทผ ๋ฐฉ์์ ์ ํธํ๋ค. ์ฌ๋ค๋ฆฌ ํจํด์ ์ฌ๊ตฌ์ฑ ํ๋์ ํญ์ ๋ฐฑ๋ ๊ทธ๋ฃน์ ์ํ๋ฆฌ ์ํ๋ก ๋ง๋ค๋ฉฐ, ๋ฐฑ์ ๋ ํ์ฅํ๋ ค๋ ํํ๋ก ๋์ํ๋ค. ํ์ ๋งค๋ฒ ์์ง์์ ๋ฐฑ๋์ด 2๊ฐ์ ์์ ๋๋ฅผ ๊ฐ์ง๋ค 1๋ก ์ค์ด๋ค๋๋ก ๋ง๋ค์ด์ผ ํ๋ค. ์ด ๊ณผ์ ์ ๋ฐ๋ณตํ๋ ๋ฐฉ์์ผ๋ก ์ฌ๋ค๋ฆฌ ํจํด์ ๊ตฌํํ ์ ์๋ค. ์ฌ๋ค๋ฆฌ์ ๋์ ํจํด ๋ฐฑ์ด ๋ง์ง๋ง ์์ ๋์ ๋์ ๋์ผ๋ฉฐ ์๋ก์ด ๊ทธ๋ฃน์ ํ์ฑํ๊ณ , ๊ทธ ๊ทธ๋ฃน์ ๋ค์ 2๊ฐ์ ์์ ๋๋ฅผ ๊ฐ์ง๋๋ค. ์ด์ , ๊ฐ ๋จ๊ณ๋ง๋ค ๋ฐฑ์ด ํ๋์ ์์ ๋์ ๋์ผ๋ฉด ๋ฐฑ์ ์ํ๋ฆฌ๋ฅผ ๊ฑธ ์ ์๊ฒ ๋๊ณ , ํ์ ์ด์ ๋ฐ๋ผ ๋ฐ์ํฉ๋๋ค. ์ด ๊ณผ์ ์ ๋ฐ๋ณตํ๋ฉด์ ์ฌ๋ค๋ฆฌ ๊ตฌ์กฐ๋ฅผ ๋ง๋ค์ด๊ฐ๋๋ค. ์ฌ๋ค๋ฆฌ ์ค๊ณ: ํจํด ์์ฑ ๊ณํ ๋ฐฑ์ด ํ์ฅ ํ, ์๋ก์ด ๊ทธ๋ฃน์ ํญ์ 2๊ฐ์ ์์ ๋๋ฅผ ๊ฐ์ ธ์ผ ํฉ๋๋ค. ์ด๋ฅผ ์ํด ๋ณด๋์ ๊ฒฝ๋ก ๊ทธ๋ฆฌ๋๋ฅผ ์ค๊ณํด์ผ ํ๋ฉฐ, ๊ฒฐ๊ตญ์๋ 0๊ฐ์ ์์ ๋์์ ์กํ๊ฒ ๋ฉ๋๋ค. 9x9 ๋ณด๋์์ ์ขํ๋ฅผ ์ฌ์ฉํด ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ๋์ ๊ด๊ณ๋ฅผ ์์ฑํ๋ฉฐ, ํจํด์ ์๋์ผ๋ก ์์ฑํ๊ฑฐ๋ ํ์ธํ ๋ฐฉ๋ฒ์ ์ฐพ๋ ์ค์ ๋๋ค. ๋์์ธ๋ 7x7 ์ฌ๋ค๋ฆฌ ํจํด ๊ฒ์ฌ === Let's build a tiny Go helper to simulate a proposed ladder. === from typing import List, Tuple, Set Board = List[List[str]] # 'B', 'W', or '.' def empty_board(size=9) -> Board: return [['.' for _ in range(size)] for _ in range(size)] def neighbors(x, y, size=9): for dx,dy in [(-1,0),(1,0),(0,-1),(0,1)]: nx,ny = x+dx, y+dy if 0 <= nx < size and 0 <= ny < size: yield nx,ny def get_group(board: Board, x: int, y: int) -> Set[Tuple[int,int]]: size = len(board) color = board[y][x] assert color in ('B','W') group = set() stack = [(x,y)] while stack: cx,cy = stack.pop() if (cx,cy) in group: continue if board[cy][cx] != color: continue group.add((cx,cy)) for nx,ny in neighbors(cx,cy,size): if board[ny][nx] == color and (nx,ny) not in group: stack.append((nx,ny)) return group def liberties(board: Board, group: Set[Tuple[int,int]]) -> Set[Tuple[int,int]]: size = len(board) libs = set() for x,y in group: for nx,ny in neighbors(x,y,size): if board[ny][nx] == '.': libs.add((nx,ny)) return libs def place(board: Board, x: int, y: int, color: str) -> Board: size = len(board) assert board[ny][nx] != color if False else True ๋์งํธ ๋ฐ๋ํ ๊ทธ๋ฃน ์ฐพ๊ธฐ from typing import List, Tuple, Set Board = List[List[str]] # 'B', 'W', or '.' def empty_board(size=9) -> Board: return [['.' for _ in range(size)] for _ in range(size)] def neighbors(x, y, size=9): for dx,dy in [(-1,0),(1,0),(0,-1),(0,1)]: nx,ny = x+dx, y+dy if 0 <= nx < size and 0 <= ny < size: yield nx,ny def get_group(board: Board, x: int, y: int) -> Set[Tuple[int,int]]: size = len(board) color = board[y][x] assert color in ('B','W') group = set() stack = [(x,y)] while stack: cx,cy = stack.pop() if (cx,cy) ์ฌ๋ค๋ฆฌ ํจํด ์ค๊ณ 7x7 ๋ณด๋์์ ์ฌ๋ค๋ฆฌ ํจํด์ ์ ์ํฉ๋๋ค. ์ด๊ธฐ ๋ ๋ฐฐ์ด์ ์ค์ ํ๊ณ , ์๋ฅผ ๋ค์ด, ํฐ ๋์ด (4,1)์ ์์นํ์ฌ ์ถ์ ์ ์์ํ๊ฒ ํฉ๋๋ค. ํฐ ๋ ๊ทธ๋ฃน์ 2๊ฐ์ ์์ ๋๋ฅผ ๊ฐ์ง๋ฉฐ, ๋ฐ๋ณต๋๋ ํจํด์ ๋๊ฐ์ ์ผ๋ก ์๋์ชฝ์ผ๋ก ์ด๋ํฉ๋๋ค. ํ๋ฉด์์ ์ถ์ ํด ๊ฐ๋ฉฐ ํจํด์ ์ฌ๊ตฌ์ฑํ ์ ์์ต๋๋ค. ์ฌ๋ค๋ฆฌ ํจํด ์ค๊ณ์ ๋์ฒด ์ ๊ทผ๋ฒ ๋ณด์ฌ์ค ์ด๋ฏธ์ง์์ ์ ํํ ์ขํ๋ฅผ ์ถ์ถํ๋ ๊ฒ์ด ์ด๋ ค์ด ์ํฉ์ด์ง๋ง, ๋์ ๋ ผ๋ฆฌ์ ์ธ ๋ฐฉ์์ ์ฌ์ฉํ๋ ค ํฉ๋๋ค. Go ๊ด๋ จ ์ฌ์ดํธ์์ ํ์ค ํจํด์ ์ ํํ๊ฑฐ๋, ๊ธฐ์กด์ ์๋ ค์ง ํจํด์ ์ฐธ๊ณ ํ ์ ์์ต๋๋ค. ์ค์ํ ๊ฒ์ ๋ฐ๋ณต๋๋ ์ฌ๋ค๋ฆฌ ํํ๋ฅผ ๋ฐ๋ผ๊ฐ๋ ๊ฒ์ด์ง, ์ธ๋ถ ์ขํ์ ์ผ์นํ ํ์๋ ์์ต๋๋ค. ์ฌ๋ค๋ฆฌ ํจํด ์ฌ๊ฒํ ์ฐ๋ฆฌ๊ฐ ๊ฐ์ง 9x9 ๋ณด๋์์ ํฐ ๋๊ณผ ๊ฒ์ ๋์ ๋๊ฐ์ ๋ฐฉํฅ์ผ๋ก ๋ฐฐ์น๋์์ง๋ง, ์ ํ์ ์ธ ์ฌ๋ค๋ฆฌ ํํ๋ ๊ฒ์ ๋๊ณผ ํฐ ๋์ด ๊ต๋๋ก ๊ฒน์ณ์ ธ ๋ค๋ฆฌ์ฒ๋ผ ์ฐ๊ฒฐ๋ฉ๋๋ค. ์ด ๋ฐฐ์ด์ ์ค์ ์ถ๊ฒฉ ์ํ๋ฅผ ๋ํ๋ด์ง ์์ผ๋ฉฐ, ์์ ์์น๋ ์ด๊ธฐ ๊ตฌ๋๋ ๋ณด์ฌ์ฃผ์ง ์๋ ์ ์์ ๋ค์ ์ ์ ์ธ ํํ์ ๋๋ค. ์ฌ๋ค๋ฆฌ ์งํ ์ํฉ ๊ทธ๋ฆผ ์ค๊ณ ์ฐ๋ฆฌ๋ 9x9 ๋๋ 7x7 ๋ณด๋๋ก ์ค๊ฐ ๋จ๊ณ์์ ์ฌ๋ค๋ฆฌ ๊ทธ๋ฆผ์ ๊ทธ๋ฆด ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ํฐ ๋ 1์ D3, ๊ฒ์ ๋ 2๋ C3(์ํ๋ฆฌ), ํฐ ๋ 3์ C4, ๊ฒ์ ๋ 4๋ B4 ๋ฑ์ผ๋ก ๊ฐ ๋จ๊ณ๋ฅผ ์ซ์ 1๋ถํฐ N๊น์ง ํ์ํ์ฌ ๋จ๊ณ๋ณ๋ก ๋ณด์ฌ์ค ์ ์์ต๋๋ค. ์ฌ์ฉ์๋ ์ ํํ ์์น๋ฅผ ๊ฐ์กฐํ๋ฏ๋ก ๋์ ์ธ ๋ค์ด์ด๊ทธ๋จ๋ ํ์ฉํ ์ ์์ต๋๋ค. ์ฌ๋ค๋ฆฌ ์งํ ์ํฉ ๊ทธ๋ํฝ ์ค๊ณ ๋ณด๊ณ ์์์ 9x9 ๋๋ 7x7 ๋ณด๋๋ก ์ผ๋ถ ๋์ ํ์ํ๋ ์ค๊ฐ ์ฌ๋ค๋ฆฌ ๋จ๊ณ๋ฅผ ๋ณด์ฌ์ฃผ๋, ๊ฐ ๋จ๊ณ๋ฅผ ์์ฐจ์ ์ผ๋ก ๋ง๊ฒ๋ 1๋ถํฐ N๊น์ง ๋ฒํธ๋ฅผ ๋ถ์ฌ์ ํ์ํ ์ ์์ต๋๋ค. ๋ค๋ง, ๋ ์์ ๋ฒํธ๋ฅผ ๊ฒน์น๋ ๊ฑด ์ด๋ ต๊ธฐ ๋๋ฌธ์, ๋ฒํธ๋ ๋ณ๋๋ก ๋์ดํ๋ ๊ฒ ์ข๊ฒ ์ด์. ๊ทธ๋ฌ๋ฉด์ 7x7 ๋ณด๋๋ก ์ฝ๊ฒ ์งํํ ์ ์๊ฒ ๊ตฌ์ฑํ๋ ๊ฒ ์ข๊ฒ ๋ค์. ๊ตฌ์ฒด์ ์ฌ๋ค๋ฆฌ ํจํด ์ค๊ณ ์ฌ๋ค๋ฆฌ ํจํด์ ์์ฑํ๋ ค๋ฉด ๋จผ์ ์ค์ฌ ๊ทผ์ฒ์ ์์ ์ขํ์์ ๊ฒฝ๋ก๋ฅผ ์ค์ ํด ๋ด ๋๋ค. ํฐ ๋์ด ๋๊ฐ์ ์ผ๋ก ๋ด๋ ค๊ฐ๋ฉฐ ์ฐ๊ฒฐ๋๋ ๊ฒฝ๋ก๋ฅผ ์ค์ ํ ํ, ๊ฐ ๋จ๊ณ๋ณ๋ก ํฐ ๋์ ์ถ๊ฐํ๊ณ , ๊ฒ์ ๋์ ๋ฐ๋ ๋ฐฉํฅ์ ๋ฐฐ์นํฉ๋๋ค. ์ด๋ฅผ 7x7 ๋ณด๋์์ ๋จ์ํํ์ฌ ์๋ฎฌ๋ ์ด์ ํ ์ ์์ต๋๋ค. ์ฌ๋ค๋ฆฌ ์๊ณ ๋ฆฌ์ฆ ์ค๊ณ "์ด๋ค ์์ง์ ์์"๋ฅผ ์ ์ํ๋ ๋์ , ์์ง์ ์์๋ฅผ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ์ค๊ณํ ํ ์ด๋ฅผ ๋ฐํ์ผ๋ก ๋ณด๋๋ฅผ ์๋ ์์ฑํ๋ ๋ฐฉ์์ผ๋ก ์ ๊ทผํ๊ณ ์ ํฉ๋๋ค. ๋จผ์ , ์ฌ๋ค๋ฆฌ ์ถ์ ์๊ณ ๋ฆฌ์ฆ์ ์ ์ํ๊ณ , ๋น ๋ณด๋์์ ์ฐ์์ ์ผ๋ก ์ด๋ํ๋ฉฐ ์ฌ๋ค๋ฆฌ ํจํด์ด ์์ฑ๋ ์ง ํ์ธํด ๋ณด๊ฒ ์ต๋๋ค. Searching for Go ladder sequence examples in SGF ์ฌ๋ค๋ฆฌ ๊ตฌ์กฐ ์ค๊ณ ์ขํ ์กฐํ์ ์ด๋ ค์์ ๊ณ ๋ คํด, ์์ฒด์ ์ผ๋ก ์ฌ๋ค๋ฆฌ ๊ตฌ์กฐ๋ฅผ ์๋ฎฌ๋ ์ด์ ํ์ฌ ์์ฑํ๋ ๋ฐฉ์์ ํํ๊ฒ ์ต๋๋ค. 7x7 ๋ณด๋ ์์์ ์ต๋จ์ ์ฌ๋ค๋ฆฌ ์์๋ฅผ ์ค๊ณํ๊ณ , ๊ฐ ์ด๋์ ๋ณด์ฅํ๋๋ก ํ์ฌ ํฉ๋ฒ์ ์ด๋ฉฐ ๊ตฌ์กฐ์ ์ธ ์ฌ๋ค๋ฆฌ ํจํด์ ๊ตฌํํ ์ ์์ต๋๋ค. ์ฌ๋ค๋ฆฌ ์งํ ์กฐ๊ฑด ์กฐ์ ์ฌ๋ค๋ฆฌ๊ฐ ์์ ๊ทธ๋ฃน์์ ์๋ฆฌ๋ฉด์ ์๊ธฐ๋๋ฐ, ๋ธ๋์ ํฐ ๋์ ์์ ๋๋ฅผ 2๋ก ์ค์ด๊ธฐ ์ํด ์ถ๊ฐ ๋์ ๋์์ผ ํฉ๋๋ค. ํฐ ๊ทธ๋ฃน์ด ์ํ๋ฆฌ๊ฐ ๋๊ธฐ ์ ์๋ ๋ธ๋์ด ์ํ๋ฆฌ๋ฅผ ๋ง๋ค์ด์ผ ํ๋ค๋ ์กฐ๊ฑด์ ์ถ๊ฐํด์ผ ํฉ๋๋ค. ๊ทธ๋์ ๋งค๋ฒ ํฐ ๋์ด ํ์ฅ๋ ๋, ๋ธ๋์ ๋ง์ง๋ง ์์ง์์ด ์ํ๋ฆฌ๋ฅผ ๋ง๋ค๋๋ก ์ค๊ณํด์ผ ํฉ๋๋ค. ์ฌ๋ค๋ฆฌ ์๊ณ ๋ฆฌ์ฆ ์ค๊ณ ์ฐ๋ฆฌ๋ ์์ ๋ณด๋์ ์์ง์์ ์ ์ํ์ฌ, ๊ฐ ๋ธ๋์ ์์ง์์ด ์ํ๋ฆฌ๋ก ์ด์ด์ง๋์ง ํ์ธํ ์ ์กฐ์ ํ ์ ์์ต๋๋ค. 7x7 ํฌ๊ธฐ์ ๋น ๋ณด๋์์ ์์ํด, ์ขํ๋ฅผ ์ค์ ํ๊ณ , ์ฌ๋ค๋ฆฌ ์๊ณ ๋ฆฌ์ฆ์ ์คํํด์ ๋งค ๋จ๊ณ๋ง๋ค ํฐ ๋ ๋์ํ์ ๊ณ ๋ฅผ ์ ์์ต๋๋ค. ์ฌ๋ค๋ฆฌ ํจํด ๋ถ์ ๋ธ๋์ ์ํ๋ฆฌ ํฌ์ธํธ๋ (x0-1,y0) ๋๋ (x0-2,y0+1) ๋ฑ์ผ ์ ์์ต๋๋ค. ์ด๋ค์ ์ ํํ ํ๋จํ๋ ค๋ฉด ์ธ์ ์ฑ์ ๋ถ์ํด์ผ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ํฐ ๋์ ๋ง์ง๋ง ํ์ฅ ์ง์ ์ด๋, ์ฌ๋ค๋ฆฌ ํจํด์ ๊ดํ ๊ฐ๋จํ 2x3 ์ง์ฌ๊ฐํ ๊ตฌ์กฐ๋ฅผ ๊ณ ๋ คํด๋ณผ ์ ์์ต๋๋ค. ์คํํ๋ ์ฌ๋ค๋ฆฌ ํจํด ์๋ฎฌ๋ ์ด์ === Let's experiment with a small local ladder-like pattern on a 5x5 board for clarity. === size = 5 b = [['.' for _ in range(size)] for _ in range(size)] === Place W at (1,0) and (0,1); B at (0,0) and (1,1) === b[0][1] = 'W' b[1][0] = 'W' b[0][0] = 'B' b[1][1] = 'B' def show(board): size = len(board) cols = [chr(ord('A')+i) for i in range(size)] print(" " + " ".join(cols)) for y in range(size): row = f"{size-y:2d}" for x in range(size): c = board[y][x] row += " " + ('.' if c=='.' else ('โ' if c=='B' else 'โ')) print(row) print() show(b) === compute liberties of W group === gW = get_group(b,1,0) print("W group:", gW, "libs:", liberties(b,gW)) A B C D E 5 โ โ . . . 4 โ โ . . . 3 . . . . . 2 . . . . . 1 . . . . . W group: {(1, 0)} libs: {(2, 0)} ์ฌ๋ค๋ฆฌ ์ฐ๊ฒฐ ๋ฐฉ์ ์์ ์ฐ๋ฆฌ๊ฐ ์๋ชป ์ดํดํ ๋ถ๋ถ์ ๋๊ฐ์ ์ฐ๊ฒฐ์ ์ฐ๊ฒฐ๋ ๊ฒ์ผ๋ก ๋ณธ ์ ์ด์์. ๋๊ฐ์ ์ ์ธ์ ํ ๊ทธ๋ฃน์ผ๋ก ์ธ์ ๋์ง ์์ผ๋ฏ๋ก ๊ทธ๋ฃน์ด ๋ถ๋ฆฌ๋ ์ํ๋ก ๊ฐ์ฃผํด์ผ ํฉ๋๋ค. ์ด์ ํฐ ๋์ ์ฌ๋ค๋ฆฌ๋ ์ํ ๋ฐ ์์ง ์ธ์ ์ผ๋ก ์ฐ๊ฒฐ๋ ๋๋ค๋ก ๊ตฌ์ฑ๋๋ค๋ ์ ์ ์ผ๋์ ๋๊ณ ๊ฒฝ๋ก๋ฅผ ๋ค์ ์ค๊ณํด๋ณด์ฃ . ์ฌ๋ค๋ฆฌ ํํ ์๊ฐํ ์ฌ๋ค๋ฆฌ ๋ชจ์์ 'ํ๋ค'์ '์ฐ์ฅ'์ด ๋ฐ๋ณต๋๋ ํจํด์ ๊ฐ์ง๊ณ ์์ด์. ํฐ ๋์ ๊ฒฝ๋ก๋ ๋๊ฐ ์ด๋ฐ ์์ผ๋ก ์ฐ๊ฒฐ๋ฉ๋๋ค: ๊ฐ ๋ธ๋ก์์ ์ฒซ ๋ฒ์งธ ์ด์ ํฐ ๋์ ๋๊ณ , ๋ธ๋ก์ด ๋ด๋ ค๊ฐ๋ฉด์ ๊ฐ๊ฐ ํ ์นธ์ฉ ์ผ์ชฝ์ผ๋ก ์ด๋ํ๋ ๋ฐฉ์์ ๋๋ค. ์ฌ๋ค๋ฆฌ ๊ฒฝ๋ก ์๊ฐํ ๋ฐ ๊ทธ๋ฃน ์ฐ๊ฒฐ ๋ฌธ์ ์ฌ๋ค๋ฆฌ์ ๊ฒฝ๋ก๋ ์ธ๋ก๋ก ํ ์นธ์ฉ ๋ด๋ ค๊ฐ๋ฉด์ ๊ฐ ์ธ๊ทธ๋จผํธ๊ฐ ํ๋์ฉ ์ผ์ชฝ์ผ๋ก ๋ฐ๋ฆฝ๋๋ค. ํ์ง๋ง ๊ฒฝ๋ก๊ฐ ๋๊ฐ์ ์ผ๋ก ์ฐ๊ฒฐ๋๊ธฐ์ ๊ทธ๋ฃน์ด ๋ถ๋ฆฌ๋ผ๋ฒ๋ฆฝ๋๋ค. ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ฌ๋ค๋ฆฌ๋ฅผ ํ ๋ฒ์ ํ ๋๋ง ์ฐ์ฅํ๋ ๋ฐฉ์์ผ๋ก ์ค๊ณํด์ผ ํ๋ฉฐ, ์ด๋๋ ํญ์ ์ฐ๊ฒฐ๋ ์ฑ๋ก ํ์ฅ๋ฉ๋๋ค. ์ฌ๋ค๋ฆฌ ํจํด ์ค๊ณ ๋ฐ ํ์ฅ ์ฐ๊ฒฐ ํ์ฌ ๊ทธ๋ฃน์ (y=4, y=5)์ ์์นํ ๋ ๋๋ก ์ฐ๊ฒฐ๋์ด ํ์ฅ๋ฉ๋๋ค. ํ์ง๋ง ๋ค์ ์ํ๋ฆฌ์์๋ ๋ง์ง๋ง ๋๋ง ์ฌ์ฉํ๋ ๊ฒ์ด ์๋๋ผ ๊ทธ๋ฃน ์ ์ฒด์ ํํ๋ฅผ ๋ฐ์ํด์ผ ํฉ๋๋ค. ๊ทธ๋์ ๊ฐ ํ์ฅ์ด ์ด์ ๋๊ณผ ์ง์ ์ผ๋ก ์ฐ๊ฒฐ๋๋๋ก ์ค๊ณํด์ผ ํ๋ฉฐ, ๊ฒฝ๋ก๋ ๋์ฒด๋ก ์๋-์ค๋ฅธ์ชฝ ๋ฐฉํฅ์ผ๋ก ์งํ๋ฉ๋๋ค. Searching for ladder diagrams and ASCII representations ์ฌ๋ค๋ฆฌ ์์ฑ ์๊ณ ๋ฆฌ์ฆ ์ค๊ณ ์ง๊ธ์ ์กฐ๊ธ ๋ณต์กํด ๋ณด์ด์ง๋ง, ์๊ณ ๋ฆฌ์ฆ์ ์ ๊ทผ์ด ํจ๊ณผ์ ์ผ ๊ฒ์ ๋๋ค. ๊ฐ๋จํ ์ฌ๋ค๋ฆฌ ์ํ์ค๋ฅผ ์ ์ํ๊ณ ๊ท์น์ ํ๋ก๊ทธ๋จ์ ๋งก๊ธฐ๋, ์ด๋์ ์กฐ์ ํ์ฌ ๊ฐ์ ์ก๊ธฐ ๊ฒฝ๋ก์ ๋๋ฌํ๋๋ก ํฉ๋๋ค. ์ด ๊ณผ์ ์ python์ ์ฌ์ฉํด ์กฐ์ ํ๋ฉฐ, ์ต์ข ๊ฒฐ๊ณผ๋ฅผ ์ป์ ํ ์ํ๋ฅผ ํ์ธํ๋ฉด ๋ฉ๋๋ค. Zํ ํจํด ์ค๊ณ ์์ 7x7 ๋ณด๋์์ 'Zํ' ํจํด์ ์ฒ์๋ถํฐ ๋๊น์ง ๊ตฌ์ฑํด๋ณด๊ฒ ์ต๋๋ค. ๋จ๊ณ๋ณ๋ก ์งํํ ๊ฒ์. ์ฒซ ๋ฒ์งธ๋ B๋ฅผ D4์ ๋๊ณ , ๋ ๋ฒ์งธ๋ W๋ฅผ E4์ ๋๋ฉฐ, ๊ทธ ์ดํ์๋ ๊ทธ์ ๋ง์ถฐ ์งํํฉ๋๋ค. ๊ฐ ๋จ๊ณ๋ง๋ค W ๊ทธ๋ฃน์ ์ํ๋ฆฌ ์ํ๊ฐ ์๋์ง ๊ณ์ฐํ๊ณ , ํจํด์ด ๋ฐ๋ณต๋ ๋๊น์ง ์กฐ์ ํ ๊ฒ์ ๋๋ค. ์ค๊ณ๋ ์ฌ๋ค๋ฆฌ ํจํด ๋ง๋ค๊ธฐ === Let's experiment step-by-step to build a ladder on 7x7 board. === size = 7 board = empty_board(size) def place_and_show(board, x_char, y_num, color): # x_char 'A'.., y_num 1..size with 1 bottom x = ord(x_char) - ord('A') y = size - y_num # convert to 0-based from top nb = place_move(board, x, y, color) if nb is None: print(f"Illegal move {color} at {x_char}{y_num}") return board print(f"{color} at {x_char}{y_num}") print_board(nb) return nb board = empty_board(size) print_board(board) === Try to define some standard ladder-ish pattern === moves = [ ('B','D',4), ('W','E',4), ('B','E',3), ('W','F',3 A B C D E F G 7 . . . . . . . 6 . . . . . . . 5 . . . . . . . 4 . . . . . . . 3 . . . . . . . 2 . . . . . . . 1 . . . . . . . B at D4 A B C D E F G 7 . . . . . . . 6 . . . . . . . 5 . . . . . . . 4 . . . โ . . . 3 . . . . . . . 2 . . . . . . . 1 . . . . . . . W at E4 A B C D E F G 7 . . . . . . . 6 . . . . . . . 5 . . . . . . . 4 . . . โ โ . . 3 . . . . . . . 2 . . . . . . . 1 . . . . . . . B at E3 A B C D E F G 7 . . . . . . . 6 . . . . . . . 5 . . . . . . . 4 . . . โ โ . . 3 . . . . โ . . 2 . . . . . . . 1 . . . . . . . W at F3 A B C D E F G 7 . . . . . . . 6 . . . . . . . 5 . . . . . . . 4 . . . โ โ . . 3 . . . . โ โ . 2 . . . . . . . 1 . . . . . . . B at F2 A B C D E F G 7 . . . . . . . 6 . . . . . . . 5 . . . . . . . 4 . . . โ โ . . 3 . . . . โ โ . 2 . . . . . โ . 1 . . . . . . . W at G2 A B C D E F G 7 . . . . . . . 6 . . . . . . . 5 . . . . . . . 4 . . . โ โ . . 3 . . . . โ โ . 2 . . . . . โ โ 1 . . . . . . . ๋ณด๋ ์ํ ์ถ๋ ฅ ํ์ธ ์ต์ข ๋ณด๋๋ฅผ ์ถ๋ ฅํ์ ๋์ ํจํด์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค: 7ํ: ................ 4ํ: D4 (๊ฒ์ ), E4 (ํฐ์) 3ํ: E3 (๊ฒ์ ), F3 (ํฐ์) 2ํ: F2 (๊ฒ์ ), G2 (ํฐ์) ์ขํ๋ฅผ ๋ค์ ํ๋ฒ ํ์ธํ๊ณ , ๋ณด๋๋ฅผ ์ถ๋ ฅํด๋ณด๊ฒ ์ต๋๋ค. ๋ณด๋ ์ํ ์ถ๋ ฅ print_board(board) A B C D E F G 7 . . . . . . . 6 . . . . . . . 5 . . . . . . . 4 . . . โ โ . . 3 . . . . โ โ . 2 . . . . . โ โ 1 . . . . . . . ๊ณ์๋ ๋ค์ด์ด๊ณ ๋ ํจํด์ ๋ํ ์ฌ๊ฒํ ํ์ฌ ํจํด์ ๋์ผํ ๋๊ฐ์ ๋ชจ์์ ๋ณต์ ํ์ง๋ง, ์์ ๋๋ฅผ ๊ณ ๋ คํ์ง ์์์ด์. E4, F3, G2์ ํฐ์ ๋์ ์๋ก ์ฐ๊ฒฐ๋์ง ์์๊ณ , ๋๋ ทํ ์ฒด์ธ์ด ์์ด์. ๋ ๋๋ ํญ์ ํ๋์ ์ฐ๊ฒฐ๋ ์ฒด์ธ ํํ์ฌ์ผ ํ๋ฏ๋ก, ์ด ํจํด์ ์๋ชป๋ ๊ฒ ๊ฐ์ต๋๋ค. ํ์ ๋ค์ ์ก์์ผ ํ ๊ฒ ๊ฐ์์. ๋ ์ด๋ ํจํด ์ฌํ์ธ ๋ฐ ๋ถ์ ํฐ ๋๋ค์ด ๋๊ฐ์ ์ผ๋ก ๋๋์ด์ ธ ์์ง๋ง, ๋ ๋๋ ๋๊ฐ์ ํํ๋ผ๋ ์ฌ์ ํ ํ๋์ ์ฐ๊ฒฐ๋ ์ฒด์ธ ํํ์ฌ์ผ ํด์. ์ด์ ์ ํด์์์๋ ๋์ฒด๋ก ์๋ชป ๋ ์ ์ด ์์๋ ๊ฒ ๊ฐ์์. ๋ ๋๋ ๋์์ ์ด์ ๋๋ค์ด ์กํ๊ธฐ ์ ๊น์ง ํ๋์ ์ฒด์ธ์ผ๋ก ์ ์ง๋์ด์ผ ํ๋ค๋ ์ ์ ๋จธ๋ฆฟ์์์ ๋ค์ ์ ๋ฆฌํด์ผ ํ ํ์๊ฐ ์์ด์. ๋ ๋ ๋ชจ์ ๋ฐ ๋๊ฐ์ ์ฐ๊ฒฐ ์ ํ์ ์ธ ๋ ๋ ๊ฒฝ๋ก๊ฐ ์ค๋ฅธ์ชฝ ์์์ ์ผ์ชฝ ์๋๋ก ๋ด๋ ค๊ฐ๋ ํํ๋ฅผ ๋ ์ฌ๋ฆฌ๋ค์. ์ด ๋๊ฐ์ ๋ชจ์์์ ํฐ ๋๋ค์ A1, C3, E5, G7 ๊ฐ์ ์์๋ก ๋ฐฐ์น๋์ง๋ง, ์ฌ์ค ์ด๋ค์ ์ธ์ ํ์ง ์์์. ๊ทธ๋์ ๋๊ฐ์ ์ผ๋ก ๋ณด์ด์ง๋ง ์ ํํ๊ฒ ์ฐ๊ฒฐ๋ ๊ทธ๋ฃน์ ์๋ ์ ์๋ค๋ ์ ์ ๊ณ ๋ คํด์ผ ํ ๊ฒ ๊ฐ์์. ์ค๋ช ๋ฐ ๊ณ ์ ์ฌ๋ค๋ฆฌ ํจํด ๋ถ์ ๋ ๋ ๋ชจ์ ์ฌํ์ธ ๋ฐ ๊ท์น๋ถํฐ ์์ ์ธํฐ๋ท์ด ์์ด์ ์ด๋ฏธ์ง๋ฅผ ๋ค์ด๋ก๋ํ ์๋ ์์ง๋ง, ์ฌ์ค ๊ทธ ์ด๋ฏธ์ง๋ฅผ ๋ณผ ํ์๋ ์์ด์. ๋์ , ์๊ณ ์๋ ๊ท์น์ ๋ฐํ์ผ๋ก ๋ค์ ์๊ฐํด ๋ณด์ฃ . ๋ ๋ ํํ๋ ํฐ ๋๋ค์ด ์ฐ์๋ '๋น๊ธ' ๋ชจ์์ผ๋ก ์ด์ด์ ธ ์์ผ๋ฉฐ, ์ด๋ ํ ๋์ฉ ๊ต์ฐจ๋ ํจํด์ผ๋ก ๋ํ๋ฉ๋๋ค. ํฐ ๋๋ค์ด ์๋ก ์ฐ๊ฒฐ๋์ด ์๋ ํํ๊ฐ ๋ง์ ๊ฒ ๊ฐ๋ค์. ๋จ์ํ ์์๋ก ๋ ๋ ๊ตฌ์กฐ ํ์ธํ๊ธฐ 4๊ฐ์ ๋๋ก 2x2 ์ฌ๊ฐํ์ ์๋ก ๋๋ฉฐ ์ฐ๊ฒฐ ์ํ๋ฅผ ์ ๊ฒํ ์ ์์ต๋๋ค. ์ด์ ๋ ๋ ๊ตฌ์กฐ์ ๋ํ ๊ท์น์ ๊ฐ๋จํ ํ์ธํ๊ฑฐ๋, ์๊ฐ ์ ์ฝ์ ์ํด ์์ ๋ณด๋์์ ๋์ ์ธ ์์๋ฅผ ๋ณด์ฌ์ฃผ๋ ๋ฐฉ๋ฒ์ ์๊ฐํด๋ด ๋๋ค. ๋ฐ๋์ ์ฒ์๊ณผ 3๋ฒ์ ์์น๋ง ๋ณด์ฌ์ค๋ ์ถฉ๋ถํ ๊ฒ ๊ฐ์ต๋๋ค. 7x7 ๋ณด๋์์ ๋ ๋ ํ๋ฆ ๋์์ธํ๊ธฐ ์ฐ๋ฆฌ๋ ๊ฐ๋จํ ์์ ํํ๋ฅผ ๋์์ธํ ์ ์์ต๋๋ค. ๋ณด๋ ํฌ๊ธฐ๋ 7๋ก ์ค์ ํ๊ณ , ํ๋จ์ ํฐ ๋์ด ์์นํ๋ฉฐ ์๋ก ๊ฒ์ ๋์ด ์ซ์์ต๋๋ค. ํฐ ๋์ด 2๊ฐ์ ์์ ๋๋ฅผ ๊ฐ์ง ๋, ์ด๋ฅผ atari ์ํ๋ก ๋ง๋ค๊ณ ํฐ ๋์ด ํ์ฅํ๋ ํจํด์ ์ฌํํ ๊ฒ์ ๋๋ค. ์ด๋ฅผ ํ์ด์ฌ์ผ๋ก ํ์ธํด๋ณด๊ฒ ์ต๋๋ค. ์ค๊ณํ ๋ฐ๋ ์ฌ๋ค๋ฆฌ ์์ ํ์ธ size = 7 board = empty_board(size) === place helper to use internal x,y 0-based rather than alphabetic === def place_xy(board, x, y, color): nb = place_move(board, x, y, color) if nb is None: print("Illegal", color, x,y) return board return nb def libs_of_white(board): size = len(board) libs_info = [] for y in range(size): for x in range(size): if board[y][x] == 'W': g = get_group(board,x,y) libs_info.append((g, liberties(board,g))) return libs_info === Setup: white stone at (3,5), black at (2,5) and (3,4) === board = empty_board(size) board = place_xy(board, 2,5,'B') # C2? but coords not important yet board = place_xy(board, 3,4,'B') board = place_xy(board, 3,5,'W') print_board(board) print(libs_of_white(board)) A B C D E F G 7 . . . . . . . 6 . . . . . . . 5 . . . . . . . 4 . . . . . . . 3 . . . โ . . . 2 . . โ โ . . . 1 . . . . . . . [({(3, 5)}, {(4, 5), (3, 6)})] ํฐ ๋ ํ์ฅ ํ ํจํด ๊ฒ์ฆ ํฐ ๋์ด (3,5) ์์น์ ์๊ณ , ์์ ๋๋ (4,5)์ (3,6)์ ๋๋ค. ๊ฒ์ ๋์ด (4,5)์ ๋์ด๋ฉด ํฐ ๋์ด atari ์ํ๊ฐ ๋์ด (3,6)๋ง ๋จ์ต๋๋ค. ํฐ ๋์ (3,6)์ผ๋ก ํ์ฅํด์ผ ํ๋ฉฐ, ์ด ํ ํจํด์ด ํ ์นธ์ฉ ์๋ก, ์ผ์ชฝ์ผ๋ก ์ด๋ํ๋์ง ํ์ธํ๊ฒ ์ต๋๋ค. ๊ฒ์ฌ ์ค๋ฅธ์ชฝ์ผ๋ก ๋ฐฑ์ด ํ์ฅํ ํ ์ํ === Continue ladder: B plays (4,5), W plays (3,6) === board1 = place_xy(board,4,5,'B') print("After B at (4,5):") print_board(board1) libsW1 = libs_of_white(board1) print("White groups & liberties:", libsW1) board2 = place_xy(board1,3,6,'W') print("After W at (3,6):") print_board(board2) libsW2 = libs_of_white(board2) print("White groups & liberties:", libsW2) After B at (4,5): A B C D E F G 7 . . . . . . . 6 . . . . . . . 5 . . . . . . . 4 . . . . . . . 3 . . . โ . . . 2 . . โ โ โ . . 1 . . . . . . . White groups & liberties: [({(3, 5)}, {(3, 6)})] After W at (3,6): A B C D E F G 7 . . . . . . . 6 . . . . . . . 5 . . . . . . . 4 . . . . . . . 3 . . . โ . . . 2 . . โ โ โ . . 1 . . . โ . . . White groups & liberties: [({(3, 5), (3, 6)}, {(4, 6), (2, 6)}), ({(3, 5), (3, 6)}, {(4, 6), (2, 6)})] ์์ ๋์ ์งํ ๋ฐฉํฅ ์ฒดํฌ ํฐ ๋ ๊ทธ๋ฃน์ (3,5)์ (3,6)์ ์์ผ๋ฉฐ, ์์ ๋๋ (4,6)๊ณผ (2,6)์ ๋๋ค. ๋ ๋ ๊ฐ์ ์์ ๋๋ฅผ ํ๋ณตํ๋ค์. ๊ฒ์ ๋์ด (2,6)๋ฅผ ๋๋ฉด, ํฐ ๋์ (4,6)์ผ๋ก ํ์ฅํ ์ ์์ต๋๋ค. ๊ต์ฐจ์ ์ธ ์ผ์ชฝ-์ค๋ฅธ์ชฝ ์งํ์ ๋ชฉํ๋ก ํ์๊ณ ์๊ฐํ๋๋ฐ, ๋ณด๋ ์์์ ์ธ๋ฑ์ค๋ฅผ ํ์ธํ๋ฉฐ ์ ๋ฆฌํ ํ์๊ฐ ์์ต๋๋ค. ๋ณด๋ ์์น ๊ณ์ฐ ํ์ธ print_board(board2) A B C D E F G 7 . . . . . . . 6 . . . . . . . 5 . . . . . . . 4 . . . . . . . 3 . . . โ . . . 2 . . โ โ โ . . 1 . . . โ . . . ๋ณด๋ ํด์ ๋ฐ ์งํ ํ์ธ y=0์ด 7๋ฒ ํ, y=6์ด 1๋ฒ ํ์ผ๋ก ํด์๋๋ฉฐ, y๊ฐ ์๋๋ก ์ฆ๊ฐํ๋ค๋ ์ ์ ๋ง์ต๋๋ค. (3,5)์ (3,6)์ ์์น๋ ๊ฐ๊ฐ 2ํ๊ณผ 1ํ์ ๊ฐ๊น์ ๋ณด์ด๋ค์. ๊ณ๋จ ๋ชจ์์ด ์ด์ ์๋๋ก ์งํ๋๋ฏ๋ก, ์์ชฝ ์ผ๋ก ์งํํ ์๋ ์์ง๋ง, ์ค์ํ ๊ฑด ๋ณด๋๋ฅผ ๋ฒ์ด๋์ง ์๋ ๊ฒ์ ๋๋ค. ํ์ธ ๋ฐ ๋ฐ๋ํ ์ํ ์ ๋ฐ์ดํธ board3 = place_xy(board2,2,6,'B') # B at (2,6) print("After B at (2,6):") print_board(board3) print("White libs:", libs_of_white(board3)) board4 = place_xy(board3,4,6,'W') # W extends at (4,6) print("After W at (4,6):") print_board(board4) print("White libs:", libs_of_white(board4)) After B at (2,6): A B C D E F G 7 . . . . . . . 6 . . . . . . . 5 . . . . . . . 4 . . . . . . . 3 . . . โ . . . 2 . . โ โ โ . . 1 . . โ โ . . . White libs: [({(3, 5), (3, 6)}, {(4, 6)}), ({(3, 5), (3, 6)}, {(4, 6)})] After W at (4,6): A B C D E F G 7 . . . . . . . 6 . . . . . . . 5 . . . . . . . 4 . . . . . . . 3 . . . โ . . . 2 . . โ โ โ . . 1 . . โ โ โ . . White libs: [({(4, 6), (3, 5), (3, 6)}, {(5, 6)}), ({(4, 6), (3, 5), (3, 6)}, {(5, 6)}), ({(4, 6), (3, 5), (3, 6)}, {(5, 6)})] ํฐ ๋์ ์ํ์ ๋ผ๋ ํจํด ๊ฒํ B๊ฐ (2,6)์ ๋์ด๊ณ W๊ฐ (4,6)์ ๋์ฌ ์ด์ ํฐ ๋ ๊ทธ๋ฃน์ (3,5), (3,6), (4,6)์ ์์นํ๊ฒ ๋์์ต๋๋ค. ํ์ฌ ํฐ ๊ทธ๋ฃน์ (5,6)๋ง์ ์ ์ธํ๊ณ ํ ๊ฐ์ง ์์ ๋๋ฅผ ๊ฐ์ง๋๋ค. ์ด ์ํ์์ W๋ ์ํ๋ฆฌ ์ํ์ด๋ฉฐ, ์ผ๋ฐ์ ์ธ ๋ผ๋์์๋ ๊ฐ ํ์ฅ์ด ๋ ๊ฐ์ ์์ ๋๋ฅผ ์ ์งํด์ผ ํ๋๋ฐ, ์ด ๊ฒฝ์ฐ์ ๊ทธ๋ ์ง ์์ ํ์ด ๊ณง ์ก์ ์ ์์ต๋๋ค. ๊ฒํ ๋ฐ ๋์ฒด ๊ฒฝ๋ก ์ ์ ์ด์ ๋จ๊ณ๋ฅผ ๋ค์ ์ดํด๋ณด๊ฒ ์ต๋๋ค. B๊ฐ (2,6)์ ๋์ธ ํ, W์ ๊ทธ๋ฃน์ ํ ๊ฐ์ง ์์ ๋๋ง ๊ฐ์ก์ต๋๋ค. ๊ทธ๋์ B๋ ์ํ๋ฆฌ์๊ณ , W๊ฐ ํ์ฅ ํ ๋ฐ๋ณต ๊ฐ๋ฅํ ์์ ๋๋ฅผ ๊ณ์ ์ ์งํด์ผ ํ๋๋ฐ, 1๋ก ๋๋ ํจํด์ด ๊นจ์ก์ต๋๋ค. ๋์ฒด ๋ฐฉ์์ ๊ณ ๋ คํด, B๊ฐ (4,6)์ ์ ํํ๋ ๋ฐฉ์์ผ๋ก ์งํํ๋ฉด ๋ค๋ฅด๊ฒ ์ ๊ฐ๋ ์ ์์ต๋๋ค. ํ์ธ๋ ๋๋ ํจํด ๋ฐ ๋ณํ ๋ถ์ === Branch: from board2, B plays at (4,6) instead. === print("Starting from board2:") print_board(board2) print("Libs of W:", libs_of_white(board2)) board3b = place_xy(board2,4,6,'B') print("After B at (4,6):") print_board(board3b) print("Libs of W:", libs_of_white(board3b)) board4b = place_xy(board3b,2,6,'W') print("After W at (2,6):") print_board(board4b) print("Libs of W:", libs_of_white(board4b)) Starting from board2: A B C D E F G 7 . . . . . . . 6 . . . . . . . 5 . . . . . . . 4 . . . . . . . 3 . . . โ . . . 2 . . โ โ โ . . 1 . . . โ . . . Libs of W: [({(3, 5), (3, 6)}, {(4, 6), (2, 6)}), ({(3, 5), (3, 6)}, {(4, 6), (2, 6)})] After B at (4,6): A B C D E F G 7 . . . . . . . 6 . . . . . . . 5 . . . . . . . 4 . . . . . . . 3 . . . โ . . . 2 . . โ โ โ . . 1 . . . โ โ . . Libs of W: [({(3, 5), (3, 6)}, {(2, 6)}), ({(3, 5), (3, 6)}, {(2, 6)})] After W at (2,6): A B C D E F G 7 . . . . . . . 6 . . . . . . . 5 . . . . . . . 4 . . . . . . . 3 . . . โ . . . 2 . . โ โ โ . . 1 . . โ โ โ . . Libs of W: [({(2, 6), (3, 5), (3, 6)}, {(1, 6)}), ({(2, 6), (3, 5), (3, 6)}, {(1, 6)}), ({(2, 6), (3, 5), (3, 6)}, {(1, 6)})] ํจํด ์ ์ฉ์ ์ํ ์์ ๋ฐ ์ ๊ทผ ๋ฌธ์ ๋ ์ฌ์ ํ ๋์ผํฉ๋๋ค: W์ ํ์ฅ ํ, ์์ ๋๊ฐ 1๋ก ๋ค์ ๊ฐ์ํฉ๋๋ค. 2๊ฐ์ ์์ ๋๋ฅผ ์ ์งํ๋ ค๋ ์๋๊ฐ ์คํจํ์ฃ . ์์ ํจํด์ ๊ณ์ํ๋ ค๋ฉด B์ ์ํ๋ฆฌ๋ง์ผ๋ก ๋ถ์กฑํ๊ณ , W์ ์ฒด์ธ์ 2๊ฐ์ ์์ ๋๋ฅผ ์ ์งํ๋ ๋ฐ๋ณต ๊ตฌ๋๋ก ๋ฐฐ์นํ ๋ฐฉ๋ฒ์ ์๊ฐํด์ผ ํฉ๋๋ค. ์ฌ๋ค๋ฆฌ ํจํด ๋ถ์์ ์ํ ์์ด๋์ด ์๋ก์ด ์์ด๋์ด๋ก, ์ค์ ๊ณ (Go) ๋ณด๋์์ ์๋ ค์ง ์ฌ๋ค๋ฆฌ ํจํด์ ์ค๊ณํ ์ ์์ ๊ฒ ๊ฐ์์. ํ ์คํธ ์ค๋ช ์ ํตํด ์ขํ ๊ฒฝ๋ก๋ฅผ ์ฝ์ผ๋ฉด ๋ ๋ํธ์์ ์ฐจ๋จ ๊ธฐ๋ก๊ณผ ์ฌ๋ค๋ฆฌ ๊ฒฝ๋ก ๋ ๋ํธ์์ ๋ ์ด์ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์ค์ง ์๋๋ก ์ฃผ์ํด์ผ ํ์ง๋ง, ์ด๋ฏธ "E14, E15, D15, D16, C16..." ๊ฐ์ ํจํด์ ํ์ธํ์ต๋๋ค. ์ด ๊ฒฝ๋ก๋ '์, ์ผ์ชฝ' ํจํด์ผ๋ก ์งํ๋๋ฉฐ, ๊ฐ ์ขํ๊ฐ ๊ทธ์ ๋ฐ๋ผ ๋ฐ๋ณต๋ฉ๋๋ค. ๊ณ๋จ์ ๊ฒฝ๋ก์ ๋ฐ๋ฅธ W ๋ ํ์ฅ W ๋์ด ์์์ ์์ ๊ฒฝ๋ก๋ฅผ ๋ฐ๋ผ ์๊ณ๋ฐฉํฅ์ผ๋ก ํ์ฅ๋ฉ๋๋ค: "์1, ์ผ์ชฝ1, ์1, ์ผ์ชฝ1..." ์ด๋ฐ ์์ผ๋ก ์ด์ด์ง๋ ๊ฒฝ๋ก๋ ์์ฐ์ค๋ฝ๊ฒ ๊ณ๋จ์ ํํ๋ก ํ์ฅ๋ฉ๋๋ค. ๊ฐ ๋จ๊ณ์์ B๊ฐ ์ผ์ชฝ ์๋์์ ์ํ๋ฆฌ๋ฅผ ๋๋ฉฐ, ๊ทธ ์์ง์์ ๋ถ์ํด ์ ์ฐจ์ ์ธ ํจํด์ ๋์์ธํ ์ ์์ต๋๋ค. ๋ ์ด๋ ํจํด ์ค๊ณ ๋ฐ B ๋ ์์น ์กฐ์ ๋จผ์ ์์ P2๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ก์ปฌ ์ขํ๊ณ๋ฅผ ์ ํํ์ฌ, W ๋ 3๊ฐ๊ฐ 'โ' ๋ชจ์์ ์ฒซ ๋ฒ์งธ ๋จ๊ณ๊ฐ ๋๋๋ก ๋ฐฐ์นํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์, B ๋์ ์ ์ ํ ๋ฐฐ์นํ์ฌ W ๊ทธ๋ฃน์ด ์ ํํ 2๊ฐ์ ์์ ๋๋ฅผ ์ ์งํ๋ฉฐ ๊ณ์ ํ์ฅํ ์ ์๋๋ก ๋ง๋ญ๋๋ค. Python์ ์์ ๋ ๊ณ์ฐ ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ฌ ์ด ๋์์ ์คํํด ๋ณผ ์ ์์ต๋๋ค. ๋์์ธ๋ ํจํด์ผ๋ก ํ์ ์ํ๋ฆฌ ์ฐพ๊ธฐ === Work on local 5x5 board for more room === size = 5 b = empty_board(size) === W stones at (1,2), (1,1), (0,1) === for (x,y) in [(1,2),(1,1),(0,1)]: b[y][x] = 'W' print_board(b) print("White libs: ", liberties(b, get_group(b,1,2))) A B C D E 5 . . . . . 4 โ โ . . . 3 . โ . . . 2 . . . . . 1 . . . . . White libs: {(2, 1), (0, 0), (0, 2), (2, 2), (1, 0), (1, 3)} B ๋ ์์น ์กฐ์ ๋ฐ ์์ ๋ ์ ํ ์์ ๋๊ฐ ๋๋ฌด ๋ง์ผ๋ฏ๋ก(6๊ฐ), B ๋์ ๋ฐฐ์นํ์ฌ ์์ ๋๋ฅผ 2๋ก ์ ํํด์ผ ํฉ๋๋ค. B ๋์ ๋ ๋ ๊ฒฝ๋ก ์ฃผ์์ ๋ฐฐ์น๋ ์ ์์ผ๋ฉฐ, ๋ฐ๋ณต๋๋ ํจํด์ผ๋ก B ์ฒด์ธ์ด W ๊ทธ๋ฃน์ ๋ฐ๋ํธ์ ๋ฐฐ์น๋ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, B๋ฅผ (2,2)์ (2,1)์ ๋๊ณ ์์ ๋๋ฅผ ํ์ธํด ๋ณด๊ฒ ์ต๋๋ค. ์์๋๋ W ๊ทธ๋ฃน์ ์์ ๋ ๊ณ์ฐ def libs_for_W(b): # For first W stone found size = len(b) for y in range(size): for x in range(size): if b[y][x]=='W': g = get_group(b,x,y) return liberties(b,g) b2 = empty_board(size) for (x,y) in [(1,2),(1,1),(0,1)]: # W group b2[y][x]='W' for (x,y) in [(2,2),(2,1)]: b2[y][x]='B' print_board(b2) print("W libs:", libs_for_W(b2)) A B C D E 5 . . . . . 4 โ โ โ . . 3 . โ โ . . 2 . . . . . 1 . . . . . W libs: {(1, 0), (0, 2), (1, 3), (0, 0)} B ๋ ์์น ๋ฐฐ์นํ์ฌ ์์ ๋ ์ ํ ๋จ์ ์์ ๋๋ 4๊ฐ: (1,0), (0,2), (1,3), (0,0). ๋ ๋ ๋จ๊ณ์์๋ ์ ํํ ๋ ๊ฐ์ ์์ ๋๊ฐ ํ์ํฉ๋๋ค. B ๋์ (1,0)๊ณผ (0,2)์ ๋ฐฐ์นํ์ฌ ์์ ๋๋ฅผ ์ ํํ ์ ์์ต๋๋ค. ํ์ง๋ง W ๊ทธ๋ฃน์ด ์ฃฝ๊ฑฐ๋ ์์ด ์ํ๋ฆฌ๊ฐ ๋์ง ์๋๋ก ์ฃผ์ํด์ผ ํฉ๋๋ค. (1,3)๊ณผ (0,2)์ B๋ฅผ ๋๋ ๊ฒ์ ์๋ํด ๋ณด๊ฒ ์ต๋๋ค. Ladder step์ ์ํ ๋ฐ๋ํ ์ํ ํ๊ฐ b3 = empty_board(size) for (x,y) in [(1,2),(1,1),(0,1)]: b3[y][x]='W' for (x,y) in [(2,2),(2,1),(1,3),(0,2)]: b3[y][x]='B' print_board(b3) print("W libs:", libs_for_W(b3)) A B C D E 5 . . . . . 4 โ โ โ . . 3 โ โ โ . . 2 . โ . . . 1 . . . . . W libs: {(1, 0), (0, 0)} W ๊ทธ๋ฃน ์์ ๋ ์ ํ ๋ฐ ์ ๊ฐ ์๋๋ฆฌ์ค ์ด์ W ๊ทธ๋ฃน์ (1,0)๊ณผ (0,0) ๋ ๊ฐ์ ์์ ๋๋ฅผ ๊ฐ์ต๋๋ค. ์ํ๋ ํํ๋ก ๋ ์ธ์ ํ ์ ์ ์ ์์ ๋๊ฐ ์์ต๋๋ค. B ๋์ (2,2), (2,1), (1,3), (0,2) ์์น์์ '๋ฒฝ' ๋ ๊ฐ์ ๋๊ฐ์ ๋ชจ์์ ํ์ฑํฉ๋๋ค. B๊ฐ (1,0)์ด๋ (0,0)์์ ์ํ๋ฆฌํ๋ฉด W๊ฐ ๋ค๋ฅธ ๊ณณ์ผ๋ก ํ์ฅ๋์ด ์ ๋จ๊ณ๋ฅผ ํ์ฑํ ์ ์์ต๋๋ค. ๋ชจ์ ๋ฐ๋ฌ ๋จ๊ณ ์๋ฎฌ๋ ์ด์ def apply_ladder_step(board, atari_move, extend_move): """board: Board; atari_move and extend_move are (x,y) coords for B then W.""" b = place_move(board, atari_move[0], atari_move[1], 'B') print("After B at", atari_move) print_board(b) libs = libs_for_W(b) print("W libs now:", libs) b2 = place_move(b, extend_move[0], extend_move[1], 'W') print("After W at", extend_move) print_board(b2) print("W libs now:", libs_for_W(b2)) return b2 print("Initial pattern:") print_board(b3) print("W libs:", libs_for_W(b3)) === B at (1,0), W extend (0,0) === b_after = apply_ladder_step(b3, (1,0 Initial pattern: A B C D E 5 . . . . . 4 โ โ โ . . 3 โ โ โ . . 2 . โ . . . 1 . . . . . W libs: {(1, 0), (0, 0)} After B at (1, 0) A B C D E 5 . โ . . . 4 โ โ โ . . 3 โ โ โ . . 2 . โ . . . 1 . . . . . W libs now: {(0, 0)} After W at (0, 0) --------------------------------------------------------------------------- TypeError Traceback (most recent call last) Cell In[15], line 19 16 print("W libs:", libs_for_W(b3)) 18 # B at (1,0), W extend (0,0) ---> 19 b_after = apply_ladder_step(b3, (1,0), (0,0)) Cell In[15], line 10, in apply_ladder_step(board, atari_move, extend_move) 8 b2 = place_move(b, extend_move[0], extend_move[1], 'W') 9 print("After W at", extend_move) ---> 10 print_board(b2) 11 print("W libs now:", libs_for_W(b2)) 12 return b2 Cell In[3], line 68, in print_board(board) 67 def print_board(board: Board): ---> 68 size = len(board) 69 cols = [chr(ord('A')+i) for i in range(size)] 70 print(" " + " ".join(cols)) TypeError: object of type 'NoneType' has no len() ์ค๋ฅ ๋ถ์ ๋ฐ ์์น ์ฌ๊ฒํ ์ค๋ฅ ๋ฉ์์ง๋ place_move๊ฐ None์ ๋ฐํํ๋ค๋ ๊ฒ์ธ๋ฐ, ์ด๋ W๊ฐ (0,0)์์ ํ์ฅ์ ์๋ํ์ผ๋ ์์ด์ด๋ ์ ์ ๋ก ๋ถ๊ฐ๋ฅํ์์ ์๋ฏธํฉ๋๋ค. ์ด๋ฅผ ๋ค์ ์คํํ์ฌ ์ด์ ๋ฅผ ์ถ๋ ฅํ๋๋ก ํ๊ฒ ์ต๋๋ค. B๊ฐ (1,0)์์ ์ด๋ํ ํ W๋ (0,0)๋ง ์์ ๋๊ฐ ์์ ์ ์์ต๋๋ค. ์ด ๊ฒฝ์ฐ, ๋ฐ๋ก ๋ํ๋๋ ์บก์ฒ ์ํฉ์ ์ ๊ฒํ๊ฒ ์ต๋๋ค. ๋๋ฒ๊น ์ค๋ชฉ ๋ ์ฐฉ์ ๋ฐ ํฌํ ํ์ธ === Recreate b3 === size = 5 b3 = empty_board(size) for (x,y) in [(1,2),(1,1),(0,1)]: b3[y][x]='W' for (x,y) in [(2,2),(2,1),(1,3),(0,2)]: b3[y][x]='B' print_board(b3) print("W libs:", libs_for_W(b3)) === B move at (1,0) === bB = place_move(b3,1,0,'B') print("After B at (1,0):") print_board(bB) print("W libs:", libs_for_W(bB)) === Try W at (0,0) === bW = place_move(bB,0,0,'W') print("bW is", bW) A B C D E 5 . . . . . 4 โ โ โ . . 3 โ โ โ . . 2 . โ . . . 1 . . . . . W libs: {(1, 0), (0, 0)} After B at (1,0): A B C D E 5 . โ . . . 4 โ โ โ . . 3 โ โ โ . . 2 . โ . . . 1 . . . . . W libs: {(0, 0)} bW is None ์์ด ๋ฌธ์ ์ ํจํด ์ฌ์ค๊ณ (0,0)์์ W๋ฅผ ๋๋ ๊ฒ์ ์์ด๋ก ๋ถ๊ฐ๋ฅํ๋ค๋ ๊ฒ์ ํ์ธํ์ต๋๋ค. ์ด ๊ต์ฐจ์ ์๋ ์์ ๋๊ฐ ์๊ณ ์ ์ ๊ทธ๋ฃน๋ ์บก์ฒํ์ง ์์ผ๋ฏ๋ก, ์ฐ๋ฆฌ์ ์ด์ ๊ฐ์ ์ด ์๋ชป๋ ๊ฒ ๊ฐ์ต๋๋ค. ์ฌ์ค Go์์๋ ์์ด์ด ์๋์ง๋ง ๊ทธ๋ฃน์ ์บก์ฒํ๋ ์์ง์์ด ๊ฐ๋ฅํ์ง๋ง, ๊ณ๋จ ๋ชจ์์์๋ ์์ด์ด ์์ผ๋ฏ๋ก ํจํด์ด ์คํจํ์ต๋๋ค. ๊ทธ๋์ ๋ ์ง์ ์ ์ธ ์ ๊ทผ๋ฒ์ ์๋ํด๋ณด๊ฒ ์ต๋๋ค. 7x7 ๋ณด๋์์ ์ํ์ค ๊ฒ์ ์ ์ 7x7 ๋ณด๋์์ ์ต๋ N ๊ธธ์ด(์: B/W 6์)์ ์ํ์ค๋ฅผ ๊ฒ์ํ๋ ๋ฐฉ๋ฒ์ ์ ์ํ๋ ค๊ณ ํฉ๋๋ค. ์์ ๋ช ๊ฐ์ '๋ณด์กฐ' ๋์ ํฌํจ์ํฌ ์ ์์ง๋ง, ๊ฒ์ ๊ณต๊ฐ์ด ์ปค์ง ์ ์์ต๋๋ค. ๊ทธ๋๋ ์ํ๋ ๊ฒฝ๋ก ๋ชจ์, ์ฆ W์ ํ์ฅ์ด ๊ณ๋จ์ ํจํด์ ๋ฐ๋ฅด๋๋ก ๋ง๋ค๊ฒ ์ต๋๋ค. ์์ P0๋ก๋ถํฐ์ ์ํ์ค ๊ณ์ฐ P0๋ฅผ ์์์ผ๋ก, P1..Pk๋ฅผ ๊ณ์ฐํด์ผ ํฉ๋๋ค. ๋ชฉํ๋ ๊ฐ ๋จ๊ณ์์ B์ ๋์๋ง ๋๊ณผ atari ์ด๋ ํจํด์ ์ฐพ๋ ๊ฒ์ ๋๋ค. ๊ฐ ๋จ๊ณ์์ B์ ์ด๋ ํ W ์ง๋จ์ด atari ์ํ๊ฐ ๋๋ฉฐ, W๊ฐ ํ์ฅ๋ ํ ๋ ๊ฐ์ ์์ ๋๋ฅผ ๊ฐ์ง๋๋ก ๋ง๋๋ ๊ฒ์ ๋๋ค. ๋ชจ๋ ์์ง์์ ํฉ๋ฒ์ ์ด์ด์ผ ํ๋ฉฐ, ์์ด์ ํผํด์ผ ํฉ๋๋ค. B์ ์ด๋ ๊ณ์ฐ ๋ฐฉ์ ๋จ์ํ B_i ์ด๋์ W ์ง๋จ์ ์์ ๋๋ฅผ 1๋ก ๋ง๋๋ ์์น๋ฅผ ์ฐพ๋ ๋ฐฉ์์ผ๋ก ํด๊ฒฐํ ์ ์์ต๋๋ค. ์ฃผ์ด์ง ๋ณด๋์์ W์ ์์ ๋๋ฅผ ๊ณ์ฐํ๊ณ , B๋ฅผ ์ ์ ํ ์์น์ ๋์ด W์ ์์ ๋๊ฐ ์ ํํ P_i๊ฐ ๋๋๋ก ํด์ผ ํฉ๋๋ค. ์ด ๊ณผ์ ์ ์์คํ ์ ํธ๋ ๊ฒ๊ณผ ๊ฐ์ต๋๋ค. ์ง์ ์ ์ธ ์์ ํ์ฉ์ผ๋ก ์ ๊ทผ ๋ฐฉ์ ๋จ์ํ ๊ณ ๋ฏผ์ ํด๋ณด๋, ๋ณต์กํ ์์ฑ์ ์ ๊ทผ๋ฒ์ ์ฌ์ฉํ๋ ๋์ , ์๋ ค์ง SGF ํ์ผ์์ ์์๋ฅผ ๊ฐ์ ธ์์ ํด๋น ํจํด์ ๊ทธ๋๋ก ๋ณต์ ํ๋ ๋ฐฉ๋ฒ์ด ๋ ํจ์จ์ ์ผ ์ ์๊ฒ ์ด์. "ladder-example.sgf"์ ๊ฐ์ ํ์ผ์ ์ฐพ์์ ๊ทธ ํ ์คํธ ์ค๋ช ์ ๋ถ์ํ๊ณ , ์ขํ๋ฅผ ์ถ์ถํ ์ ์์ต๋๋ค. ๊ฒ์ํ์ฌ ์ฌ๋ค๋ฆฌ ๋ฌธ์ SGF ์์ ์ฐพ๊ธฐ ๋จ์ํ๋ ์ ๊ทผ์ผ๋ก ์์ ํ์ฌ ๋๋ฌด ๋ง์ ์๊ฐ๊ณผ ๋ ธ๋ ฅ์ ๋ค์ฌ 'atari' ์ํ์ค๋ฅผ ์๋ฒฝํ๊ฒ ๋ง๋๋ ๊ฒ๋ณด๋ค, ์ฌ์ฉ์๊ฐ ์์ฒญํ 'ladder' ๋๋ฉด์ ๋ ์ง์คํ๋ ๊ฒ์ด ๋์ ๊ฒ ๊ฐ์์. ์ด์ ๋๋ฉด์ด ๋ถ์ ํํ์ผ๋ฏ๋ก, ์ด์ ๋ ์ค์ ์ ์๋ฅผ ๋ ์ ๋ฐ์ํ๋ ๋๋ฉด์ ์ค๊ณํ ์ ์์ต๋๋ค. โ์ง๊ทธ์ฌ๊ทธโ ํจํด์ ์ค์ฌ์ผ๋ก ์ ํํ ๋ง์ถฐ๋ณด์ฃ . ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ์๋ ํ์ ์ค๊ณ ์์ 6x6 ๋๋ 7x7 ๋ณด๋์์ ๋ค์๊ณผ ๊ฐ์ ์กฐ๊ฑด์ ๋ง๋ ํจํด์ ์๋์ผ๋ก ์ฐพ์๋ด๋ ์๊ณ ๋ฆฌ์ฆ์ ์ค๊ณํด ๋ณด๊ฒ ์ต๋๋ค: B๊ฐ ํ ์๋ฅผ ๋๋ฉฐ ๊ณ์๋๋ ladder W์ ํ๊ฒ ๊ทธ๋ฃน์ ์ธ์ ํด ์๋ค "atari+ํ์ฅ"์ ๋ฐ๋ณตํ๋ฉฐ ๊ฐํ๊ฑฐ๋ ํ ๋๋ฆฌ์ ๋ค๋ค๋ฅผ ๋๊น์ง, ๊ฐ ์๊ฐ ๊ท์น์ ์ํด ๊ฐ์ ๋ก ์ ํด์ง๋๋ค. ์๊ณ ๋ฆฌ์ฆ ์ค๊ณ ๊ฐ์ ์ด๊ธฐ ๋ ๋ฐฐ์น๊ฐ ํ์ํฉ๋๋ค. ํฐ ๊ฒ์ ๋ฒ์์ง๋ง ๋๊ฐ์ ๊ฒฝ๋ก์ ๊ฐ๊น์ด ํจํด์ผ๋ก ์ ํํ ์ ์์ต๋๋ค. W ๊ทธ๋ฃน์ ์์น๋ฅผ ์ฐพ๊ณ , B์ ๋์ ๋์ ์ผ๋ก ๋ฐฐ์น๋ atari ์์ ๊ณ ์ ๋ ๋๋ค๋ก ์ด๋ฃจ์ด์ง๋ฉฐ, ๊ฒฝ๋ก ๋์ 'ํฌํผ' ๋ ์ถ๊ฐ๊ฐ ๊ฐ๋ฅํฉ๋๋ค. ์ด๊ธฐ ๋ณด๋์์ ์ต์ํ ํ๋์ B ๋์ W ๊ทธ๋ฃน์ ์ธ์ ํ ์ํ์ฌ์ผ ํฉ๋๋ค. ๋จ์ํ๋ ์๊ณ ๋ฆฌ์ฆ ์ค๊ณ ์ฐ๋ฆฌ๋ ๊ณ ์ ๋ B ๋์ ๋ฌด์ํ๊ณ , W์ ์ฒซ ๋๋ง ๊ฐ์ด๋ฐ์ ๋๊ณ ์์ํด์. B๋ atari ์์๋๋ก ๋์ ๋๋ฉฐ ํจํด์ ํ์ธํฉ๋๋ค. B์ ์ฒซ ๋ฒ์งธ ์ด๋์ P0 ๊ทผ์ฒ์์ ์ ํ๋๋ฉฐ, ์ดํ W์ ์์ ๋๊ฐ ๋ณํํ๊ฒ ์ฃ . ์ ์ฒด ์ด๋ ์ํ์ค๋ฅผ ํ์ํ๋ฉด ํฐ ๊ฐ์ง๊ฐ ์๊น๋๋ค. ๋ณด๋ ์ํ๋ฅผ ์ขํ๊ธฐ ์ผ๋จ B๊ฐ ๊ต์ฐจ์ ์ ๋๊ณ W๊ฐ ์๋ฅด๊ณ , B๊ฐ atari๋ฅผ ํ๋ ์ผ๋ฐ์ ์ธ ํจํด์ ์์ ํด์ผ๊ฒ ์ฃ . ํ์ง๋ง ์๊ฐ ์ ์ฝ์ ๊ณ ๋ คํ๋ฉด, ์ด ๊ฒ์ ์์ฒด๊ฐ ๋๋ฌด ๊ด๋ฒ์ํ ์ ์์ต๋๋ค. ๊ทธ๋์ 2๋จ๊ณ ์ฌ๋ค๋ฆฌ ํจํด์ ์ ํํ ๋ง์ถ ๋ณด๋ ์ํ๋ฅผ ๊ฒ์ํ๋ ๋ฐฉ์์ผ๋ก ์ขํ ๋๊ฐ๊ฒ ์ต๋๋ค. ๋จ๊ณ๋ณ ์ฌ๋ค๋ฆฌ ํจํด ๊ตฌํ ์ฌ์ฉ์๊ฐ ๊ธฐ๋ํ๋ ๊ฒ์ W๊ฐ 2๋จ๊ณ ์ด์์ ํ์ฅ์ ํตํด ์ง๊ทธ์ฌ๊ทธ ๋ชจ์์ ๋ง๋๋ ๋ณด๋์ ๋๋ค. ํ์ง๋ง ๋๋ฌด ์ธ๋ฐํ๊ฒ ์ ๊ทผํ ํ์๋ ์๊ฒ ์ฃ . ๋์ , 3๊ฐ์ ์ ์ ์ธ ๋ณด๋๋ก ๊ฐ ๋จ๊ณ์ ์์ง์์ ์๋์ผ๋ก ์ค๊ณํ๊ณ ์ฝ๋๋ก ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํฉ๋ฒ์ฑ์ ํ์ธํ๋ ๋ฐฉ์์ผ๋ก ๊ฐ์ํํ ์ ์์ต๋๋ค. ์กฐ์ ๋ ๋ณด๋ ์ํ๋ฅผ ํตํ 2๋จ๊ณ ์ฌ๋ค๋ฆฌ ์์ฑ ์ฐ๋ฆฌ๋ B๊ฐ ๋ ๋ฒ์งธ ์ด๋ ํ ํ ๊ฐ์ ์์ ๋๋ฅผ ๊ฐ๋ ๋ณด๋ ์ํ๋ฅผ ๋ง๋ค์์ด์. ๋ชฉํ๋ 3๋จ๊ณ์ด์ง๋ง 2๋จ๊ณ๋ก ์ถฉ๋ถํ ์ ์์ต๋๋ค. ์ด๊ธฐ B ๋ ์์น๋ฅผ ์กฐ์ ํ์ฌ ์ํ๋ ์์ ๋ ํจํด์ ๋ง๋ค๊ธฐ ์ํด, ๊ณ ์ ๋ B ๋๋ค์ ์ค๊ณ ๋ณ์๋ก ์ฌ์ฉํ๊ณ , ์ด๋ฅผ ํ๋ก๊ทธ๋จ์ผ๋ก ์กฐ์ ํ๋ฉฐ ์ฐพ์ ์ ์์ต๋๋ค. ๊ณํ ์๋ฆฝ: ์ฌ๋ค๋ฆฌ ํจํด ์์ฑ ์ฐ๋ฆฌ๋ ์ด๋ฏธ ์ ํด์ง B์ W ๋์ ์ฌ์ฉํ์ฌ ๋ณด๋๋ฅผ ์ค์ ํ๊ณ , ๋ช ๊ฐ์ง ๋์ ๋ณด๋ ์ํ ์์ง์์ ํฌํจํฉ๋๋ค. ์ด๊ธฐ ๋ณด๋์์ B ๋์ (2,5)์ (3,4)๋ก ๊ณ ์ ํ๊ณ , W ๋์ (3,5)๋ก ๋ฐฐ์นํฉ๋๋ค. ์ดํ B์ W์ ์ฒซ ๋ฒ์งธ ์ด๋์ ํฌํจํด, B2 ๋ฐ W2์ ์์น๋ฅผ ์ฐพ๋ ๋ฐฉ์์ผ๋ก, W์ ์์ ๋๊ฐ ์ ํํ 2๊ฐ ๋๋ ์์น๋ฅผ ์ฐพ์ ์ฌ๋ค๋ฆฌ ๋ชจ์์ ๋ณต์ํ๋ ค๊ณ ํฉ๋๋ค. ์ฌ๋ค๋ฆฌ ํจํด ๊ตฌํ ๊ณํ 7x7 ๋ณด๋์์ B ์ด๊ธฐ ์์น๋ (2,5)์ (3,4), W ์ด๊ธฐ ์์น๋ (3,5)๋ก ๊ณ ์ ํฉ๋๋ค. ์ดํ B1์ (4,5)๋ก ๋๊ณ , W1์ (3,6)์ผ๋ก ๋ฐฐ์นํฉ๋๋ค. ๊ทธ ๋ค์์ B2 ์์น๋ฅผ ์ ํํ๋๋ฐ, ํ๋ณด ์์น์ ๊ณ ์ ๋ B๋์ด ์ํฅ์ ๋ฏธ์น ์ ์์ด ์ด๋ฅผ ๊ณ ๋ คํ์ฌ ๋ผ์ด๋ธ๋ฆฌ ์๊ฐ 2์ธ ๋ฐฐ์ด์ ์ฐพ์์ผ ํฉ๋๋ค. ๋จ์ํ๋ ์ฌ๋ค๋ฆฌ ์๊ณ ๋ฆฌ์ฆ ๋ผ์ด๋ธ๋ฆฌ ์๊ฐ ์ ํํ 2์ฌ์ผ ํ๋ค๋ ์กฐ๊ฑด์ ์ํํ ์ ์์ต๋๋ค. ๋์ B๊ฐ ํญ์ W ๊ทธ๋ฃน์ ์ํ๋ฆฌํ๊ณ , W๊ฐ ํด๋น ์์น๋ก ํ์ฅํ๋ ์ํ์ค๋ง ๊ณ ๋ คํฉ๋๋ค. W๊ฐ ๋ค๋ฅธ ์ ํ์ ํ ์๋ ์์ง๋ง, ์ฐ๋ฆฌ๋ ์ฌ๋ค๋ฆฌ ํจํด๋ง ๋ณด์ฌ์ค๋๋ค. ๊ฒ์ ํ๋ฆ์ ๊ฐ์ ๋ ์์ง์๋ง ๋ณด์ฌ์ฃผ๋ ๋ฐฉ์์ผ๋ก ๋จ์ํํ์์ต๋๋ค. ์ฌ๋ค๋ฆฌ ํํ ์ต์ข ๋จ๊ณ ์ค๊ณ ์ฐ๋ฆฌ๋ ๋ผ์ด๋ธ๋ฆฌ ์๊ฐ 2๋ณด๋ค ๋ง๋๋ผ๋ ์ฌ๋ค๋ฆฌ ํจํด์ ์ ์งํ ์ ์์์ ๋ฐ์๋ค์ ๋๋ค. ์ด๋ฅผ 7x7 ๋ณด๋๋ก ๋จ์ํํ์ฌ, W ๊ทธ๋ฃน ๊ฒฝ๋ก์ B ๊ทธ๋ฃน ๊ฒฝ๋ก๋ฅผ ์ฌ๋ค๋ฆฌ ํ์์ผ๋ก ํํํ๋ ค๊ณ ํฉ๋๋ค. W ๊ทธ๋ฃน์ ๋ผ์ด๋ธ๋ฆฌ๊ฐ ์ ํด์ง ํ, B ๋๋ค์ ์ ์ ํ ๋ฐฐ์นํ๋๋ก ์ค์ ํ์ฌ ์์ฝ๊ฒ ์ฐ๊ฒฐ ์ํ๋ฅผ ๋ง๋ค์ด๋ผ ์ ์์ต๋๋ค. ๋์งํธ ์ฌ๋ค๋ฆฌ ํจํด ๊ฒ์ from random import choice size = 9 board = empty_board(size) === define W ladder path positions P0..P4 (staircase from bottom-right towards top-left) === P = [(6,6), (6,5), (5,5), (5,4), (4,4)] # (x,y) for x,y in P: board[y][x]='W' print("Initial W path:") print_board(board) gW = get_group(board, P[0][0], P[0][1]) print("W stones:", gW) print("Initial liberties:", liberties(board,gW), "count", len(liberties(board,gW))) Initial W path: A B C D E F G H I 9 . . . . . . . . . 8 . . . . . . . . . 7 . . . . . . . . . 6 . . . . . . . . . 5 . . . . โ โ . . . 4 . . . . . โ โ . . 3 . . . . . . โ . . 2 . . . . . . . . . 1 . . . . . . . . . W stones: {(4, 4), (5, 5), (6, 5), (5, 4), (6, 6)} Initial liberties: {(3, 4), (4, 3), (6, 4), (6, 7), (4, 5), (7, 6), (5, 6), (5, 3), (7, 5)} count 9 B ๋ ๋ฐฐ์น ๋ฐ ๋ผ์ด๋ธ๋ฆฌ ๊ด๋ฆฌ W ๊ฒฝ๋ก๋ ์ ์ฐ๊ฒฐ๋์์ต๋๋ค. ์ด์ B ๋์ ๋ฐฐ์นํ์ฌ W ๊ทธ๋ฃน์ ๋ผ์ด๋ธ๋ฆฌ๋ฅผ 1๋ก ์ค์ฌ์ผ ํฉ๋๋ค. ์ต์ข ๋ผ์ด๋ธ๋ฆฌ๋ฅผ ์ธ๋ถ ๊ฒฝ๊ณ์ ๋๊ณ , ์ด๋ฅผ ์ ์ธํ ๋๋จธ์ง ๋ผ์ด๋ธ๋ฆฌ์ B ๋์ ๋ฐฐ์นํ๋ฉด์๋ W ๊ทธ๋ฃน์ด ์บก์ณ๋์ง ์๋๋ก ์ฃผ์ํด์ผ ํฉ๋๋ค. ํ์ธ ํ ์งํํฉ๋๋ค. B๋ ๋ฐฐ์น ํตํ W ๊ทธ๋ฃน ๋ฐฉ์ด ํ์ธ def add_attackers(board, W_start, final_lib): gW = get_group(board, W_start[0], W_start[1]) libs = liberties(board, gW).copy() libs.discard(final_lib) for L in list(libs): x,y = L # skip if final_lib if L == final_lib: continue new_b = place_move(board, x,y,'B') if new_b is None: # illegal (suicide) or captured W; skip placing B here continue # ensure W group still has at least 1 liberty gW_new = get_group(new_b, W_start[0], W_start[1]) libs_new = liberties(new_b, gW_new) if len(libs_new)==0: # cannot place here (captures W, we want atari but not capture yet) continue # accept placement board = new_b return board board2 = copy_board(board) final_lib = (3,4) board2 = add_attackers(board2, P[0], final_lib) print_board(board2) gW2 = get_group(board2, P[0][0], P[0][1]) print("Libs after adding attackers:", liberties(board2,gW2), "count", len(liberties(board2,gW2))) A B C D E F G H I 9 . . . . . . . . . 8 . . . . . . . . . 7 . . . . . . . . . 6 . . . . โ โ . . . 5 . . . . โ โ โ . . 4 . . . . โ โ โ โ . 3 . . . . . โ โ โ . 2 . . . . . . โ . . 1 . . . . . . . . . Libs after adding attackers: {(3, 4)} count 1 ๋ณด๋ ์ํ ์ ๊ฒ ์ด์ W ๊ทธ๋ฃน์ด ์ ํํ 1๊ฐ์ ๋ผ์ด๋ธ๋ฆฌ๋ฅผ ๊ฐ์ก๊ณ , B ๋์ด ์ ์ ํ ๋ฐฐ์น๋์์ต๋๋ค. W ์ฒด์ธ์ ๋๊ฐ์ ํํ๋ก ๋ณด์ด๊ณ , B๋ ์ธ๋ถ ๊ฒฝ๋ก๋ฅผ ๋ฐ๋ผ ๋ฐฐ์น๋์์ต๋๋ค. ๋ณด๋ ๋ ์ด์์์ 9x9 ๋ฐฉ์์ผ๋ก ์ฌ๊ฒํ ํ ํ, ๋ฏธ์ธ ์กฐ์ ์ด ํ์ํ ์ ์์ต๋๋ค. ๋ณด๋ ์ขํ ๋งคํ ์ ๊ฒ ๋ณด๋์์ ๊ฐ ์์น๋ฅผ ํ์ธํ๋ฉด์ ํ์ํ ์ขํ๋ค์ ์ฐพ๊ณ ์์ต๋๋ค. W ๋์ ์ค์ ๋ก E5, F5, F4, G4, G3์ ์์นํ๊ณ ์๊ณ , ํด๋น ์ขํ์ ๋ํด ์ ํํ๊ฒ ๋งคํ๋์์ต๋๋ค. ๋ค์ ๋งํด, E5์์ G3๊น์ง W ๋๋ค์ด ์๋ง๊ฒ ๋ฐฐ์ด๋์ด ์์์ ํ์ธํ์์ต๋๋ค. ์ขํ์ ๋ณด๋ ํ์ธ W ๋์ ๊ฒฝ๋ก๋ ์ ํํ E5์์ G3๊น์ง ํ์ฑ๋ L์ ๊ฒฝ๋ก์ ๋๋ค. ๊ฐ ๋์ E5, F5, F4, G4, G3์ ์์นํ๊ณ ์์ต๋๋ค. ์ด์ B ๋์ ๋ํด, F6, G5, E6, H4, G2 ๋ฑ์ ํ์ธํ์ต๋๋ค. ์ด๋ค์ ๋ฐํ์ผ๋ก B ๋์ ์์น๋ฅผ ์ข ๋ ๋ช ํํ ํ๊ฒ ์ต๋๋ค. ์ขํ ์ถ์ถ ๋ฐ ๊ฒฝ๋ก ์ถ์ === Extract coordinates for B and W stones from board2 === size = len(board2) Bs = [] Ws = [] for y in range(size): for x in range(size): if board2[y][x]=='B': Bs.append((x,y)) elif board2[y][x]=='W': Ws.append((x,y)) Bs, Ws ([(4, 3), (5, 3), (6, 4), (4, 5), (7, 5), (5, 6), (7, 6), (6, 7)], [(4, 4), (5, 4), (5, 5), (6, 5), (6, 6)]) ์ธ๊ฐ ์ขํ ๋ณํ (x, y) ์ขํ๋ฅผ ์ฌ๋์๊ฒ ์น๊ทผํ๊ฒ ๋ณํํ๋ ค๋ฉด, x ๊ฐ์ A๋ถํฐ ์์ํ๋ ์ด ๋ฌธ์๋ก ๋ณํํฉ๋๋ค. y ๊ฐ์ ํฌ๊ธฐ์์ y๋ฅผ ๋นผ๋ ๋ฐฉ์(์ฆ, ์ฌ์ด์ฆ - y)์ผ๋ก ํ ๋ฒํธ๋ฅผ ๊ณ์ฐํ ์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด ๋ณด๋๋ฅผ ์ฝ๊ฒ ์ดํดํ ์ ์์ต๋๋ค. ์ขํ ๋ณํ ๋ฐ ์ถ๋ ฅ def coord_to_str(x,y,size=9): return f"{chr(ord('A')+x)}{size-y}" print("Black stones:") for x,y in Bs: print(coord_to_str(x,y)) print("White stones:") for x,y in Ws: print(coord_to_str(x,y)) === And W group liberties === gW2 = get_group(board2, Ws[0][0], Ws[0][1]) print("W liberties:", {coord_to_str(x,y) for (x,y) in liberties(board2, gW2)}) Black stones: E6 F6 G5 E4 H4 F3 H3 G2 White stones: E5 F5 F4 G4 G3 W liberties: {'D5'} ํ์ธ๋ ์ํ ํฐ ๋ ๊ทธ๋ฃน: E5, F5, F4, G4, G3. ๊ฒ์ ๋ ๊ณต๊ฒฉ์: E6, F6, G5, E4, H4, F3, H3, G2. ํฐ ๋ ๊ทธ๋ฃน์ D5์์ ํ๋์ ์์ ๋๋ฅผ ๊ฐ์ง. ์ด ๋ชจ์์ ์ฌ๋ค๋ฆฌ์ ๋ง์ง๋ง ๋จ๊ณ์ ํด๋นํ๋ ์ ํจํ ํํ๋ก, ์ผ์ชฝ ๋์ ๋ ๊ฐ๊น์ด ๋ถ๋ถ์ผ๋ก ๊ฐ๋ ๊ธธ์ ์ ํธํ ์ ์์ง๋ง, D5์์ ๊ณต๊ฒฉ์ด ๊ฐ๋ฅํ๋ฏ๋ก ์ถฉ๋ถํ ๊ด์ฐฎ์ต๋๋ค. ์ฌ๋ค๋ฆฌ ํํ๋ก ์ค๋ช ์ฐ๋ฆฌ๋ ์ด์ ์ํ๋ฅผ ์์ฑํ ์ ์๋ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค. B๊ฐ D5์์ ๋ง์ง๋ง์ผ๋ก ์ํ๋ฅผ ์บก์ฒํ๋ค๊ณ ๊ฐ์ ํ๊ณ , ๊ทธ ์ ์ D5๊ฐ ์์ ๋๋ก ์กด์ฌํ๋ค๋ฉด, D5๋ฅผ ์ ์ธํ ๋ณด๋๋ฅผ ๊ธฐ์ค์ผ๋ก ์ด์ ์ํ๋ฅผ ๋ณด์ฌ์ค ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์์ ํ ์ฌ๋ค๋ฆฌ ์ญ์ฌ์ ํ๋ฆ์ ์๋์ง๋ง, ๊ทธ ํํ์ B์ ๋ฒฝ์ด ๋จ๊ณ๋ณ๋ก ํํ๋๋ ์ฌ๋ค๋ฆฌ ๊ตฌ์กฐ๋ ๊ฐ๋ฅํฉ๋๋ค. ์ฌ๋ค๋ฆฌ์ ์ต์ข ์ํ ์๋ก์ด ๋ณด๋๋ W ๊ทธ๋ฃน์ ์ํ๋ฆฌ ์ํ๋ก ๋ง๋ญ๋๋ค. ๊ฒฝ๋ก๋ ๋๊ฐ์ ๊ณผ ์ง๊ทธ์ฌ๊ทธ ํํ๋ก ์ฌ๋ค๋ฆฌ์ ๋ง์ง๋ง ๋จ๊ณ๋ฅผ ๋ณด์ฌ์ค๋๋ค. ์ด์ ๋จ๊ณ๋ฅผ ๋ฐ๋ก ๋ณด์ฌ์ฃผ๋ ๋์ , โ์ด ๋ค์ด์ด๊ทธ๋จ์ ๊ทธ๋ฃน์ด ๊ฐ์ฅ์๋ฆฌ์ ๋๋ฌํ๊ธฐ ์ง์ ์ ์ํโ๋ฅผ ์ค๋ช ํ ์ ์์ต๋๋ค. ASCII ๋ณด๋์ ์ขํ๋ ์ ํํ ๋ฐ์ํด์ผ ํฉ๋๋ค. ๋ฐ๋์์ ์ถ ๊ทธ๋ฆผ ์ ๊ณต ์ฌ์ฉ์์ ์์ฒญ์ ๋ง์ถฐ, ๋ฐ๋์์ ์ถ์ ์ ํํ ๊ทธ๋ฆฐ ASCII ๋ณด๋๋ฅผ ์ ๊ณตํ ๊ฒ์ ๋๋ค. ์ต์์ ์ ํ๋๋ฅผ ์ํด ์น์์ ์ฐธ๊ณ ํ ์๋ฃ๋ฅผ ๋ฐํ์ผ๋ก ๋ถ์ํ๋ฉฐ, ์ ๋ขฐํ ์ ์๋ ์ถ์ฒ๋ ์ธ๊ธํฉ๋๋ค. ASCII ๋ณด๋๋ ๋ด๋ถ ๊ณ์ฐ์ ๋ฐํ์ผ๋ก ์ ํํ ๋ณํํ ๊ฒฐ๊ณผ์ ๋๋ค. ๋ฐ๋ ์ถ ๊ทธ๋ฆผ ์ ๊ณต ์ฌ์ฉ์์ ์์ฒญ์ ๋ง์ถฐ 9x9 ๋ฐ๋ํ์ ๊ทธ๋ฆฝ๋๋ค. ๋ณด๋ ์ขํ๋ E=5 ๋ฑ์ผ๋ก ์ฌ์ฉ๋๋ฉฐ, ๋ช ํํ ASCII ๋์์ ์ ๊ณตํ ๊ฒ์ ๋๋ค. ๋ํ, Wikipedia์ Ladder (Go) ๋ฌธ์ ๋ฑ์์ ์ ์๋ฅผ ์ฐธ๊ณ ํ๋, ๋ ๊ฐ์ ์ ๋ขฐ ๊ฐ๋ฅํ ์ถ์ฒ๋ฅผ ์ธ์ฉํฉ๋๋ค. ๊ทธ๋ฆผ ์์ฑ๊ณผ ์ ํ์ฑ ๊ฒ์ฆ print_board(board2) A B C D E F G H I 9 . . . . . . . . . 8 . . . . . . . . . 7 . . . . . . . . . 6 . . . . โ โ . . . 5 . . . . โ โ โ . . 4 . . . . โ โ โ โ . 3 . . . . . โ โ โ . 2 . . . . . . โ . . 1 . . . . . . . . . ์ต์ข ํฌํ์ ํํ ์ต์ข ํฌํ์์ธ B๋ฅผ D5(3,4)์ ๋ฐฐ์นํ๋ ๊ฒ์ ๋ณด์ฌ์ผ ํฉ๋๋ค. D5๋ ํ์ฌ ๋น ์นธ์ด๋ผ์ ์ด๋ฅผ ๋ฐํ์ผ๋ก ์ต์ข ์ํ์ธ board_end๋ฅผ ๊ณ์ฐํ์ฌ ์ค๋ช ์ ๋ง๋ถ์ผ ์์ ์ ๋๋ค. ์ด ๊ณผ์ ์ ํตํด ํด๋น ์์น์ ๋ณํ๋ฅผ ๋ช ํํ๊ฒ ๋ํ๋ผ ์ ์์ต๋๋ค. ์ต์ข ๋ ๋ฐฐ์น ๊ณ์ฐ === Add final capture move B at D5 (3,4) === board_final = place_move(board2,3,4,'B') print_board(board_final) gWs = [] size=9 for y in range(size): for x in range(size): if board_final[y][x]=='W': gWs.append((x,y)) print("Remaining W stones:", gWs) A B C D E F G H I 9 . . . . . . . . . 8 . . . . . . . . . 7 . . . . . . . . . 6 . . . . โ โ . . . 5 . . . โ . . โ . . 4 . . . . โ . . โ . 3 . . . . . โ . โ . 2 . . . . . . โ . . 1 . . . . . . . . . Remaining W stones: [] ์ต์ข ์ฌ์ฌ ์ก๊ธฐ ๋ฐ ํ๊ธฐ ๋ชจ๋ ๋ฐฑ ๋์ด ์กํ๋ค์, ๊ทธ๋์ ์ต์ข '์ฌ์ฌ ์ก๊ธฐ' ๊ฒฐ๊ณผ๊ฐ ํ์ ๋์์ต๋๋ค. ์ฐ๋ฆฌ๋ ๋ ๊ฐ์ ๋ณด๋ ๋ค์ด์ด๊ทธ๋จ์ ์ ๊ณตํ๊ณ , ๊ฐ ๊ณณ์ ์ขํ๋ ์ค๋ช ํ ์ ์์ต๋๋ค. ์ ๊ฐ๋ ๋์ D5 ์์น๋ฅผ โรโ ํ๊ธฐ๋ก ๊ฐ์กฐํ ์์ ์ ๋๋ค. ์ฌ์ฉ์์๊ฒ ์ดํด๋ฅผ ๋๊ธฐ ์ํด ๊ฐ๋จํ ์ค๋ช ์ ์ถ๊ฐํ ๊ฑฐ์์. ๋ ๊ฐ์ ๋ค์ด์ด๊ทธ๋จ๊ณผ ์ค๋ช "์ง์ ์"์ board2์ "ํ์ด D5์ ๋์ด ์ถ์ ๋๋ธ ๋ชจ์ต"์ board_final ๋ ๊ฐ์ง ๋ค์ด์ด๊ทธ๋จ์ ๋ณด์ฌ์ค ์์ ์ ๋๋ค. ์ฐ๋ฆฌ๋ ์ด๋ฅผ "์์ ์ถ ํํ"๋ก ํํํ๊ณ , ์ ํ์ฑ์ ๊ฐ์กฐํ ์ ์๋๋ก ์ค๋ช ํ ๊ฑฐ์์. "๊ฐ์ฅ ์ ํ์ฑ ๋์ ๋๊ตฌ"๋ผ๋ ์์ฒญ์ ๋ง์ถฐ, ์ ํํ๊ฒ ๊ตฌํ๋ ์๋ฎฌ๋ ์ด์ ์ ๊ธฐ๋ฐ์ผ๋ก ์ค๋ช ํ๊ฒ ์ต๋๋ค. ์ฐธ๊ณ ๋ฌธํ ์ถ๊ฐ ์ฃผ์ ์ฐธ๊ณ ๋ฌธํ์ Ladder (Go) ์ํฐํด๋ก, '์ฌ์ฌ' ์ ์๋ฅผ ์ ์ํ๋ฉฐ ํ์ํ ๋ ๊ฐ์ง ์ฐธ์กฐ๋ ๊ทธ๊ฒ์ผ๋ก ์ถฉ๋ถํ ๊ฒ ๊ฐ์ต๋๋ค. "์ง๊ทธ์ฌ๊ทธ ํจํด"์ Ladder ์ํฐํด์์ ๋ค๋ฃจ๋ ๋ด์ฉ์ผ๋ก, ๋ ๊ฐ์ง ์ธ์ฉ์ผ๋ก ๋ง๋ฌด๋ฆฌํ ์์ ์ ๋๋ค. ์ถ๊ฐ๋ก ๊ด๋ จ๋ ์ ์์ ํจํด์ ์ง์ด๋ณผ ์ ์๊ฒ ์ง๋ง, ๊ธฐ๋ณธ์ ์ผ๋ก ์ด ๋ ๊ฐ์ง๊ฐ ์ฃผ์ํ ์ฐธ๊ณ ์๋ฃ์ ๋๋ค. 11m 52s ๋์ ์๊ฐํจ ์๋ฃ === Assistant: ํต์ฌ๋ถํฐ ๋งํ๋ฉด, ์ด ์๊ฐ ๋ก๊ทธ๋ === ํต์ฌ๋ถํฐ ๋งํ๋ฉด, ์ด ์๊ฐ ๋ก๊ทธ๋ '''โํ๋ฆฐ ์ฌ๋ค๋ฆฌ ๋ค์ด์ด๊ทธ๋จ์, ์ฝ๋์ ๋ ผ๋ฆฌ ๊ฒ์ฆ์ ํตํด โ์ง์ง ์ฌ๋ค๋ฆฌโ ์ํ๋ก ๋ค์ ๋ง๋ ๊ณผ์ โ'''์ ๋๋ค. ํ๋ฆ์ ๋จ๊ณ๋ณ๋ก ์ชผ๊ฐ์ ์ ๋ฆฌํด๋ณผ๊ฒ. ==== 1. ๋ชฉํ ์ฌ์ ์: โ์ง์ง ์ฌ๋ค๋ฆฌโ๊ฐ ๋ญ๋? ==== * ์ฒ์์ ์ธ์ํ ๋ฌธ์ : - ์ด์ ์ ๊ทธ๋ฆฐ ๋ค์ด์ด๊ทธ๋จ์ด ์ค์ ์ฌ๋ค๋ฆฌ๊ฐ ์๋์๋ค. - ์ฌ์ฉ์๊ฐ โ1์ง ์ฐจ์ด, ์ค์ ๊ณต๊ฒฉ ๊ฒฝ๋ก, ๊ณผํ์ ์ธ ์ ํ์ฑโ์ ์๊ตฌ. * ๊ทธ๋์ ๋ชฉํ๋ฅผ ์ด๋ ๊ฒ ์ฌ์ค์ ํจ: 1. ๋ณด๋ ์์์ ์ค์ ๋ก ์ฑ๋ฆฝํ๋ ์ฌ๋ค๋ฆฌ ํจํด์ด์ด์ผ ํ๊ณ 2. ์ขํ๋ก ์ ํํ ์ค๋ช ํ ์ ์์ด์ผ ํ๋ฉฐ 3. ๊ฐ๋ฅํ๋ฉด ์ฝ๋๋ก ์์ ๋(liberty)๋ฅผ ๊ฒ์ฆํด์ ์ ๋ขฐ์ฑ์ ํ๋ณด. โ ์ฆ, โ๊ฐ์ผ๋ก ๊ทธ๋ฆฐ ์์ ๊ทธ๋ฆผโ์ด ์๋๋ผ, ๊ท์น์ ์ผ๋ก ๊ฒ์ฆ๋ ์ํ๋ฅผ ๋ง๋ค๋ ค๋ ์๋. ==== 2. ๋๊ตฌ & ์ ๋ณด ์ ๋ต: ์น + ํ์ด์ฌ ์๋ฎฌ๋ ์ด์ ==== * ์์ด๋์ด: - ์น์์ โGo ladderโ, โshicho ์์โ ๊ฐ์ ์๋ฃ๋ฅผ ์ฐพ์ ํจํด์ ๊ฐ๋ ์ ๊ฐ์ ธ์ค๋, - ์ขํ๋ฅผ ๊ทธ๋๋ก ๋ฒ ๋ผ์ง ๋ง๊ณ , ์ง์ ์ ํจํ ์์๋ฅผ ๋ง๋ค์. * ๋์์: - empty_board, get_group, liberties, print_board ๊ฐ์ ํจ์๋ค์ ๋ง๋ค์ด ๋ณด๋ ์ํ, ๊ทธ๋ฃน, ์์ ๋ ๊ณ์ฐ์ ํ์ด์ฌ์์ ์ํ. * ๋ชฉํ: - ์ฌ๋์ด ์์ผ๋ก ์ถ์ธกํ๋ ๋์ , '''โ์ฝ๋๋ก ๊ฒ์ฆ๋๋ ๋ชจ์๋ง ์ต์ข ๊ฒฐ๊ณผ๋ก ์ฑํโ'''ํ๊ฒ ๋ค๋ ์ ๋ต. โ ์ ๋ณด๋ ์น์์ ๊ฐ๋ ์ ์ฐธ๊ณ , ์ ํํ ๋ชจ์์ ํ์ด์ฌ์ผ๋ก ์์ฑยท๊ฒ์ฆ. ==== 3. ์ฒซ ์๋๋ค: ์๋ชป๋ ์ง๊ด + ๋๋ฒ๊น ==== ์ฌ๊ธฐ์ ๊ฝค ๊ธธ๊ฒ ํค๋งด. ํจํด: # ๋๊ฐ์ ์ฌ๋ค๋ฆฌ ์ฐฉ๊ฐ - 7x7, 5x5 ๋ณด๋์์ D4โE4โE3โF3โF2โG2 ๊ฐ์ ๋๊ฐ์ /์ง๊ทธ์ฌ๊ทธ ํจํด์ ์ฌ๋ฌ ๋ฒ ๋ง๋ค์์. - ํ์ง๋ง ๋์ค์ ๊นจ๋ฌ์: - ๋ฐ๋์์ ๋๊ฐ์ ์ ์ธ์ ์ด ์๋๋ค โ ๋๋ค์ด ํ ๊ทธ๋ฃน์ด ์๋. - ๊ทธ๋์ ๊ทธ๋ฐ ํํ๋ โ์ฌ๋ค๋ฆฌ์ฒ๋ผ ๋ณด์ด๋ ๊ทธ๋ฆผโ์ผ ๋ฟ, ์ค์ ํ๋์ ๋ฐฑ ์ฒด์ธ์ด ๋๋ ค๊ฐ๋ ์ฌ๋ค๋ฆฌ๊ฐ ์๋. # โ์์ ๋ 2 ์ ์งโ ๊ฐ๋ฐ - โ์ฌ๋ค๋ฆฌ๋ ๋งค ๋จ๊ณ๋ง๋ค ๋ฐฑ ๊ทธ๋ฃน์ด ํญ์ ์์ ๋ 2๊ฐ๋ฅผ ๊ฐ์ง๋คโ๋ ์์ผ๋ก ๊ฐ์ ํ๊ณ , - ๊ณ์ โ2๋ฆฌ๋ฒํฐ ํจํดโ์ ๋ง๋ค๋ ค๊ณ B ๋์ ๋ฐฐ์น. - ๊ฒฐ๊ณผ: - ์์ ๋๊ฐ 2๊ฐ ์ ๋์ด, - ๋๋ ๋ฐฑ์ด ๋ฐ๋ก ์ฃฝ๊ฑฐ๋, - ์์ด ๊ท์น์ผ๋ก ์ฐฉ์๊ฐ ๋ถ๊ฐ (place_move๊ฐ None ๋ฐํ). # ๋ฒ๊ทธ/์คํจ ๋๋ฒ๊น - place_move๊ฐ None โ ์์ด/๋ถ๋ฒ ์ฐฉ์๋ผ๋ ์๋ฏธ๋ฅผ ์์์ฐจ๋ฆฌ๊ณ , - ๋ณด๋๋ฅผ ๋ค์ ์ถ๋ ฅํด ์ํ๋ฅผ ๋์ผ๋ก ํ์ธ. - โ์ฌ๊ธฐ์ W๊ฐ (0,0)์ผ๋ก ํ์ฅํ๋ ค ํ๋๋ฐ, ์์ด์ด๋ผ ์ ๋๋คโ ๊ฐ์ ์์ผ๋ก ์คํจ ์ด์ ๋ฅผ ์ถ์ . โ ์ด ๋จ๊ณ๋ ์์ฝํ๋ฉด: โ๋๊ฐ์ ์ฐ๊ฒฐ ์คํด + ๋๋ฌด ๋นก์ผ ์กฐ๊ฑด(ํญ์ ๋ฆฌ๋ฒํฐ 2) + ๊ตฌํ ๋๋ฒ๊น โ์ผ๋ก ํ์ฐธ ์ฝ์งํ ๊ตฌ๊ฐ. ==== 4. ๊ฐ๋ ์ฌ์ ๋ฆฌ: ์ฌ๋ค๋ฆฌ๋ฅผ ๋ค์ ์ ์ํ๋ค ==== ์ฌ๊ธฐ์ ์ฌ๊ณ ๊ฐ ํ ๋ฒ ๊ฐ์์์. * ์๋ชป๋ ์ ์ ์ธ์: - ๋๊ฐ์ ์ผ๋ก๋ง ์ด์ด์ง ๋๋ค์ ํ ์ฒด์ธ์ด ์๋๋ค. - โ๊ทธ๋ฆผ์ด ๊ณ๋จ ๋ชจ์โ์ด๋ผ๋ ์ด์ ๋ง์ผ๋ก๋ ์ฌ๋ค๋ฆฌ๊ฐ ์๋. * ๋ค์ ์ธ์ด ๊ธฐ์ค: 1. ๋ฐฑ ๋๋ค์ ํ๋์ ์ฐ๊ฒฐ๋ ๊ทธ๋ฃน์ด์ด์ผ ํ๋ค. (์ํ์ข์ฐ๋ก) 2. ํ ๋๋ค์ด ์ฃผ๋ณ์์ ๊ณ์ ์ํ๋ฆฌ(or ๊ฑฐ์ ์ํ๋ฆฌ) ์ํ๋ก ๋ชฐ์๊ฐ๋ฉฐ ๊ฐ์ฅ์๋ฆฌ/๋ฒฝ ์ชฝ์ผ๋ก ์๋ฐ. 3. ์ต์ข ์ ์ผ๋ก ์ด๋ ์์ ์ ์์ ๋ 1๊ฐ (atari) ์ํ๋ฅผ ๋ง๋ค๊ณ , ๋ค์ ์๋ก ์ ๋ถ ์ก์ ์ ์์ผ๋ฉด ์ถฉ๋ถ. * ๊ทธ๋ฆฌ๊ณ ์กฐ๊ฑด ์ํ: - ๋งค ์คํ ๋ง๋ค ๋ฆฌ๋ฒํฐ๊ฐ ๊ผญ 2๊ฐ์ผ ํ์๋ ์๋ค๊ณ ์ธ์ . - ์ฌ์ฉ์๊ฐ ์๊ตฌํ๋ ๊ฒ์ '''โ์ ํํ ์ฌ๋ค๋ฆฌ ๋ชจ์์ ์์โ'''์ด์ง, โ์ํ์ ์ผ๋ก ์๋ฒฝํ ๊ฐ์ ์ ์ฆ๋ช โ์ด ์๋๋ผ๊ณ ์ฌํด์. โ ์ด ์์ ์์ ๋ฌธ์ ๋ฅผ โ์๋ฒฝํ ๋์ ์ํ์ค ํ์โ โ โ์ ์ ์ด์ง๋ง ๊ฒ์ฆ๋ ์ฌ๋ค๋ฆฌ ์ต์ข ํ ๋ง๋ค๊ธฐโ ๋ก ๋ฐ๊ฟ ์ก์. ==== 5. ์ต์ข ์ ๋ต: ์์์ ์๋๋ก ๋ง๋๋ ๋์ , ์๋์์ ์๋ก โ์กฐ๋ฆฝโ ==== ์ฌ๊ธฐ๋ถํฐ๋ ๊ฝค ๊น๋ํ๋ค. ===== 5-1. ๋ฐฑ ์ฒด์ธ P๋ฅผ ๋จผ์ ์ค๊ณ ===== * 9x9 ๋ณด๋์์ ์ฐ๊ฒฐ๋ ๋ฐฑ ๊ทธ๋ฃน์ ๋จผ์ ๋ง๋ค์ด๋ : ``<code>python P = [(6,6), (6,5), (5,5), (5,4), (4,4)] for x,y in P: board[y][x]='W' <syntaxhighlight>- ์ด๊ฑด ์ฌ๋ ์ขํ๋ก ๋ณด๋ฉด: - E5, F5, F4, G4, G3 ๊ฐ์ ํํ์ ์ง๊ทธ์ฌ๊ทธ์ด๋ฉด์๋ ์ค์ ๋ก ์ฐ๊ฒฐ๋ ๊ทธ๋ฃน. * get_group๊ณผ liberties๋ก ํ์ธ: - ๋ฐฑ์ด ํ๋์ ๊ทธ๋ฃน์ด๊ณ , - ์์ ๋๊ฐ ์ฌ๋ฌ ๊ฐ์์ ํ์ธ. ===== 5-2. ๊ณต๊ฒฉ์(ํ ๋)๋ฅผ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ์ฑ์ ๋ฃ๊ธฐ ===== * ์์ด๋์ด: - ๋ฐฑ ๊ทธ๋ฃน์ ์์ ๋ ์ค ํ๋๋ง ๋จ๊ฒจ๋๊ณ ๋๋จธ์ง๋ฅผ ํ์ผ๋ก ๋ง์. - ๊ทธ๋ผ ๊ฒฐ๊ณผ์ ์ผ๋ก - ๋ฐฑ ๊ทธ๋ฃน์ ๋ฆฌ๋ฒํฐ 1๊ฐ (atari) ์ํ, - ์ฃผ๋ณ์ ํ์ โ๋ฒฝโ์ด ํ์ฑ โ ์ฌ๋ค๋ฆฌ ๋ ๋ชจ์. * ๊ตฌํ ํจ์: </syntaxhighlight>python def add_attackers(board, W_start, final_lib): gW = get_group(board, W_start[0], W_start[1]) libs = liberties(board, gW).copy() libs.discard(final_lib) for L in list(libs): x,y = L new_b = place_move(board, x,y,'B') if new_b is None: continue gW_new = get_group(new_b, W_start[0], W_start[1]) libs_new = liberties(new_b, gW_new) if len(libs_new)==0: continue board = new_b return board </code>`` - ํต์ฌ ๋ก์ง: - W ๊ทธ๋ฃน์ ๋ชจ๋ ์์ ๋ ์ค final_lib ํ๋๋ง ๋นผ๊ณ ์ํ. - ๊ฑฐ๊ธฐ์ B๋ฅผ ๋๋, - ์ฐฉ์๊ฐ ๋ถ๋ฒ์ด๋ฉด ํจ์ค. - ๊ทธ ์ฐฉ์๋ก ๋ฐฑ์ด ๋ฐ๋ก ์กํ๋ฒ๋ฆฌ๋ฉด(๋ฆฌ๋ฒํฐ 0) ์ญ์ ํจ์ค. - ๊ทธ๋ ์ง ์์ผ๋ฉด ๊ทธ ์๋ฆฌ์ B๋ฅผ ๊ณ ์ . * ์ด๋ ๊ฒ ํด์ ๋ฐฑ์ด ์์ง ์ด์ ์์ง๋ง ๋ฆฌ๋ฒํฐ๊ฐ 1๊ฐ์ธ ์ํ๋ฅผ ๊ฐ์ ๋ก ๋ง๋ ๋ค. ===== 5-3. ์ค์ ๋ก ๋์จ ์ต์ข ์ (atari) ์ํ ===== * ์ ํจ์๋ก ์ป์ board2์์: - ๋ฐฑ ๋ ์ขํ: - (4,4), (5,4), (5,5), (6,5), (6,6) - โ ์ฌ๋ ์ขํ: E5, F5, F4, G4, G3 - ํ ๋ ์ขํ: - (4,3), (5,3), (6,4), (4,5), (7,5), (5,6), (7,6), (6,7) - โ ์ฌ๋ ์ขํ: E6, F6, G5, E4, H4, F3, H3, G2 - ๋ฐฑ ๊ทธ๋ฃน์ ์์ ๋: - ๋จ ํ๋, D5 ((3,4) โ D5) โ ์ฆ, '''โ๋ฐฑ ์ฌ๋ค๋ฆฌ ๊ทธ๋ฃน์ด ๋ฒฝ์ ๋ชฐ๋ ค์ D5 ํ ์ ๋ง ๋จ์ ์ํ๋ฆฌ ์ํโ'''๋ฅผ ๋ง๋ ๊ฒ. ===== 5-4. ๋ง์ง๋ง ์บก์ฒ ์๊น์ง ์๋ฎฌ๋ ์ด์ ===== * ๋ง์ง๋ง์ผ๋ก D5(3,4)์ B๋ฅผ ๋ board_final ์์ฑ: - place_move(board2,3,4,'B') - ๊ทธ ๊ฒฐ๊ณผ: - Remaining W stones: [] โ ๋ฐฑ์ด ์ ๋ถ ์กํ. * ๊ทธ๋์ ๋ ์ฅ์ ๊ทธ๋ฆผ์ ์ต์ข ๊ฒฐ๊ณผ๋ก ์ธ ์ ์๊ฒ ๋จ: 1. board2 : D5๊ฐ ๋ง์ง๋ง ๋ฆฌ๋ฒํฐ์ธ, โ์ฌ๋ค๋ฆฌ ๋ง์ง๋ง ์ง์ โ ๋ชจ์. 2. board_final : ํ์ด D5์ ๋์ด์ ์ฌ๋ค๋ฆฌ๊ฐ ์์ ํ ๋๋ ์ํ. ==== 6. ์ด ๊ณผ์ ์ ํน์ง๊ณผ ํ๊ณ ==== ===== ์ข์ ์ ===== * ๊ฐ๋ ์ค๋ฅ๋ฅผ ์ค์ค๋ก ์์ : - ๋๊ฐ์ ์ฐ๊ฒฐ ์คํด โ ์ํ์ข์ฐ ์ธ์ ๋ง ์ธ์ ํ๋ ๊ฑธ๋ก ๋ฐ๋ก์ก์. * ์คํ โ ์คํจ โ ๋๋ฒ๊น ์ ๋ฐ๋ณตํ๋ฉฐ, - ์์ด, ๋ฆฌ๋ฒํฐ ๊ณ์ฐ, ์ฐ๊ฒฐ์ฑ ๋ฌธ์ ๋ฅผ ์ฝ๋๋ก ํ์ธ. * ์ต์ข ์ ์ผ๋ก - ์ฝ๋๋ก ๊ฒ์ฆ๋, - ์ขํ๊ฐ ๋ช ํํ, - ์ค์ ๊ท์น์ ๋ง๋ ์ฌ๋ค๋ฆฌ ์ต์ข ํ์ ๊ตฌ์ฑ. ===== ์์ฌ์ด ์ / ํ๊ณ ===== * ์ค๊ฐ๊น์ง๋ ๋ชฉํ๊ฐ ํ๋ค๋ฆผ: - โ์๋ฒฝํ ๋์ ์ํ์ค(๋งค ์ ๊ฐ์ )โ vs โ์ ์ ์์ ๋ณด๋โ ์ฌ์ด์์ ๊ณ์ ์๋ค ๊ฐ๋ค. * โํญ์ ๋ฆฌ๋ฒํฐ = 2โ ๊ฐ์ ๊ณผ๋ํ ์ ์ฝ์ ์ง์ฐฉํ๋ฉฐ ์๊ฐ ์๋ชจ. * ๊ฒฐ๊ตญ ์ต์ข ๊ฒฐ๊ณผ๋ - โ์ฌ๋ค๋ฆฌ๊ฐ ๋๋๊ธฐ ์ง์ ๊ณผ ๋๋ ์งํ์ ์๊ฐโ์ด์ง - '''์ ์ฒด ์์(1์~N์๊น์ง)'''๋ฅผ ์ฌํํ ๊ฒ์ ์๋. ==== ์ ๋ฆฌ ==== ํ ์ค๋ก ์์ฝํ๋ฉด: : ์ฒ์์ ๊ฐ์ผ๋ก ์ฌ๋ค๋ฆฌ ๋ชจ์์ ๊ทธ๋ฆฌ๋ ค๋ค : โ ๊ท์น/์ฐ๊ฒฐ์ฑ/๋ฆฌ๋ฒํฐ ๊ฐ๋ ์ ๋ค์ ์ ๋ฆฌํ๊ณ : โ ํ์ด์ฌ์ผ๋ก ๋ณด๋ยท๊ทธ๋ฃนยท์์ ๋๋ฅผ ๊ฒ์ฆํ๋ฉด์ : โ ์ต์ข ์ ์ผ๋ก โ๋ฐฑ ๊ทธ๋ฃน์ด ์ค์ ๋ก ์กํ๋, ๊ท์น์ ๋ง๋ ์ฌ๋ค๋ฆฌ ์ต์ข ์ํโ๋ฅผ : ์ขํ์ ASCII ๋ณด๋ ํํ๋ก ๋ง๋ค์ด๋ธ ๊ณผ์ ์ด๋ค. ํน์ ์ด ์ค์์ * โ์ ์ด ๋ชจ์์ด ์ง์ง ์ฌ๋ค๋ฆฌ๋ก ์ธ์ ๋๋์งโ, * โ์ด ์ขํ๋ค์ ๋ฐํ์ผ๋ก ์ ์ฒด ์์์ ๋ณต์ํ ์ ์๋์งโ ๊ฐ์ ํฌ์ธํธ๋ฅผ ๋ ํ๊ณ ์ถ์ผ๋ฉด, ๊ทธ ๋ถ๋ถ๋ง ์ฝ ์ง์ด์ ๋ฌผ์ด์ค.
Summary:
Please note that all contributions to freem are considered to be released under the Creative Commons Attribution-ShareAlike 4.0 (see
Freem:Copyrights
for details). If you do not want your writing to be edited mercilessly and redistributed at will, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource.
Do not submit copyrighted work without permission!
Cancel
Editing help
(opens in new window)