"오목 인공지능"의 두 판 사이의 차이
jjuiddong
3번째 줄: | 3번째 줄: | ||
* 소스 | * 소스 | ||
** https://github.com/jjuiddong/Omok-AI | ** https://github.com/jjuiddong/Omok-AI | ||
+ | |||
* 오목 인공지능의 핵심은 돌들을 어떻게 나눗느냐다. | * 오목 인공지능의 핵심은 돌들을 어떻게 나눗느냐다. | ||
− | ** 6목, 여러개의 돌들로 얽혀졌을 때에 문제를 해결하려면 돌을 잘 | + | ** 6목, 여러개의 돌들로 얽혀졌을 때에 이 문제를 해결하려면 돌을 잘 나누어야 한다. |
** 이부분은 separator namespace 로 따로 빼두었다. | ** 이부분은 separator namespace 로 따로 빼두었다. | ||
− | * X: 놓아서는 안될 곳 | + | *** 10 으로 이루어진 스트링을 입력받아, n개의 스트링으로 나눠 리턴한다. |
− | * S: 놓을 수는 있지만 우선순위에 의해서 놓지 않을곳 | + | * 1 : 돌 |
+ | * 0 : 빈자리 | ||
+ | * X : 놓아서는 안될 곳 | ||
+ | * S : 놓을 수는 있지만 우선순위에 의해서 놓지 않을곳 | ||
* 0011010011110001010 -> 0011010 + 0111110 + 001010 | * 0011010011110001010 -> 0011010 + 0111110 + 001010 | ||
* 011101011110 -> 011101X + 11110 | * 011101011110 -> 011101X + 11110 | ||
* 011010 -> S1101S | * 011010 -> S1101S | ||
** 가운데 빈곳에 돌을 놓을 때 가장 좋은 결과를 얻게된다. 011110 | ** 가운데 빈곳에 돌을 놓을 때 가장 좋은 결과를 얻게된다. 011110 | ||
+ | |||
+ | * 돌을 나누는 알고리즘 | ||
+ | while( separate(source, dest, remainder)) | ||
+ | { | ||
+ | source = remainder; | ||
+ | dest 저장 | ||
+ | } | ||
+ | |||
+ | separate(src, dst, remainder) | ||
+ | { | ||
+ | dst = src를 5개 단위로 나눠 저장. | ||
+ | separateTwo(dst, tmp1, tmp2) | ||
+ | dst = tmp1 | ||
+ | remainder = tmp2 + src의 나머지; | ||
+ | } |
2014년 3월 23일 (일) 20:57 판
- 오목 인공지능의 핵심은 돌들을 어떻게 나눗느냐다.
- 6목, 여러개의 돌들로 얽혀졌을 때에 이 문제를 해결하려면 돌을 잘 나누어야 한다.
- 이부분은 separator namespace 로 따로 빼두었다.
- 10 으로 이루어진 스트링을 입력받아, n개의 스트링으로 나눠 리턴한다.
- 1 : 돌
- 0 : 빈자리
- X : 놓아서는 안될 곳
- S : 놓을 수는 있지만 우선순위에 의해서 놓지 않을곳
- 0011010011110001010 -> 0011010 + 0111110 + 001010
- 011101011110 -> 011101X + 11110
- 011010 -> S1101S
- 가운데 빈곳에 돌을 놓을 때 가장 좋은 결과를 얻게된다. 011110
- 돌을 나누는 알고리즘
while( separate(source, dest, remainder)) { source = remainder; dest 저장 } separate(src, dst, remainder) { dst = src를 5개 단위로 나눠 저장. separateTwo(dst, tmp1, tmp2) dst = tmp1 remainder = tmp2 + src의 나머지; }