// https://u...content-available-to-author-only...r.jp/othello/7gyou.html
// uguisu.skr.jp/othello/7gyou.html
#include <stdio.h>
// map[90] = {0}
// 盤状態:横9*縦10 y*9+xと使う。0行目と9行目は番兵
// dir[]={-10, -9, -8, -1, 1, 8, 9, 10};
// 盤を走査する場合、縦横斜め方向に向かうために足されるべき数
int put, turn, all, done, pass, count, value, i,
map[90] = {0}, dir[]={-10, -9, -8, -1, 1, 8, 9, 10};
void check()
{
if (map[put] == 0)
for (i=0; i<8; i++) {
// 8方向走査
// dir[i]の方向の相手のコマの数を確認
for (count = 0, value = put+dir[i];
map[value] == 3-turn; value += dir[i])
count++;
if (count && map[value] == turn) {
// 1枚以上存在し、その上端が自分のコマなら
all += count;
value = put;
// doneがtrueの場合は、実際にひっくり返す
if (done)
do
map[value] = turn, value += dir[i];
while (map[value] != turn);
}
}
}
// mapに対応するオセロ駒&改行
char *h=" - o x\n";
int main()
{
// 0:コマ無し
// 1:1player
// 2:2player
// 3:改行
for(i=1, map[41] = map[49] = 2; i<10; map[i++*9] = 3)
map[40] = map[50] = turn = pass = 1;
for (;; all = done = 0) { // 毎回allとdoneを初期化
// 盤の表示
for(put = 9; put<82; ++put)
check
(), printf("%.2s",&h
[map
[put
]*2]);
if(all)
// 1枚でも駒が置けた場合はcomは左上から走査
// 置けた(=allの値が変わった)らturn終了
for(done = all = pass = put = 8; all==8; check())
turn
- 2 ? (scanf("%d %d",&put
,&i
), put
+=i
*9): ++put
;
else if(pass)
// 駒は置けない
else
// 両者とも駒を置けないので終了
break;
// turn交代
turn = 3 - turn;
}
return 0;
}
Ly8gaHR0cHM6Ly91Li4uY29udGVudC1hdmFpbGFibGUtdG8tYXV0aG9yLW9ubHkuLi5yLmpwL290aGVsbG8vN2d5b3UuaHRtbAovLyB1Z3Vpc3Uuc2tyLmpwL290aGVsbG8vN2d5b3UuaHRtbAoKI2luY2x1ZGUgPHN0ZGlvLmg+CiAKIC8vIG1hcFs5MF0gPSB7MH0KIC8vIOebpOeKtuaFizrmqKo5Kue4pjEwIHkqOSt444Go5L2/44GG44CCMOihjOebruOBqDnooYznm67jga/nlarlhbUKIAogLy8gZGlyW109ey0xMCwgLTksIC04LCAtMSwgMSwgOCwgOSwgMTB9OwogLy8g55uk44KS6LWw5p+744GZ44KL5aC05ZCI44CB57im5qiq5pac44KB5pa55ZCR44Gr5ZCR44GL44GG44Gf44KB44Gr6Laz44GV44KM44KL44G544GN5pWwCmludCBwdXQsIHR1cm4sIGFsbCwgZG9uZSwgcGFzcywgY291bnQsIHZhbHVlLCBpLAogICAgbWFwWzkwXSA9IHswfSwgZGlyW109ey0xMCwgLTksIC04LCAtMSwgMSwgOCwgOSwgMTB9OwogCnZvaWQgY2hlY2soKQp7CiAgICBpZiAobWFwW3B1dF0gPT0gMCkKICAgICAgICBmb3IgKGk9MDsgaTw4OyBpKyspIHsKICAgICAgICAgICAgLy8gOOaWueWQkei1sOafuwogICAgICAgICAgICAvLyBkaXJbaV3jga7mlrnlkJHjga7nm7jmiYvjga7jgrPjg57jga7mlbDjgpLnorroqo0KICAgICAgICAgICAgZm9yIChjb3VudCA9IDAsIHZhbHVlID0gcHV0K2RpcltpXTsKICAgICAgICAgICAgICAgICBtYXBbdmFsdWVdID09IDMtdHVybjsgdmFsdWUgKz0gZGlyW2ldKQogICAgICAgICAgICAgICAgY291bnQrKzsKICAgICAgICAgICAgIAogICAgICAgICAgICBpZiAoY291bnQgJiYgbWFwW3ZhbHVlXSA9PSB0dXJuKSB7CiAgICAgICAgICAgICAgICAvLyAx5p6a5Lul5LiK5a2Y5Zyo44GX44CB44Gd44Gu5LiK56uv44GM6Ieq5YiG44Gu44Kz44Oe44Gq44KJCiAgICAgICAgICAgICAgICBhbGwgKz0gY291bnQ7CiAgICAgICAgICAgICAgICB2YWx1ZSAgPSBwdXQ7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAvLyBkb25l44GMdHJ1ZeOBruWgtOWQiOOBr+OAgeWun+mam+OBq+OBsuOBo+OBj+OCiui/lOOBmQogICAgICAgICAgICAgICAgaWYgKGRvbmUpCiAgICAgICAgICAgICAgICAgICAgZG8KICAgICAgICAgICAgICAgICAgICAgICAgbWFwW3ZhbHVlXSA9IHR1cm4sIHZhbHVlICs9IGRpcltpXTsKICAgICAgICAgICAgICAgICAgICB3aGlsZSAobWFwW3ZhbHVlXSAhPSB0dXJuKTsKICAgICAgICAgICAgfQogICAgICAgIH0KfQogCiAvLyBtYXDjgavlr77lv5zjgZnjgovjgqrjgrvjg63pp5LvvIbmlLnooYwKY2hhciAqaD0iIC0gbyB4XG4iOwogCmludCBtYWluKCkKewogICAgLy8gMDrjgrPjg57nhKHjgZcKICAgIC8vIDE6MXBsYXllcgogICAgLy8gMjoycGxheWVyCiAgICAvLyAzOuaUueihjAogICAgZm9yKGk9MSwgbWFwWzQxXSA9IG1hcFs0OV0gPSAyOyBpPDEwOyBtYXBbaSsrKjldID0gMykKICAgICAgICBtYXBbNDBdID0gbWFwWzUwXSA9IHR1cm4gPSBwYXNzID0gMTsKICAgICAKICAgIGZvciAoOzsgYWxsID0gZG9uZSA9IDApIHsgLy8g5q+O5ZueYWxs44GoZG9uZeOCkuWIneacn+WMlgogICAgICAgIC8vIOebpOOBruihqOekugogICAgICAgIGZvcihwdXQgPSA5OyBwdXQ8ODI7ICsrcHV0KQogICAgICAgICAgICBjaGVjaygpLCBwcmludGYoIiUuMnMiLCZoW21hcFtwdXRdKjJdKTsKICAgICAgICAgCiAgICAgICAgaWYoYWxsKQogICAgICAgICAgICAvLyAx5p6a44Gn44KC6aeS44GM572u44GR44Gf5aC05ZCI44GvY29t44Gv5bem5LiK44GL44KJ6LWw5p+7CiAgICAgICAgICAgIC8vIOe9ruOBkeOBnyg9YWxs44Gu5YCk44GM5aSJ44KP44Gj44GfKeOCiXR1cm7ntYLkuoYKICAgICAgICAgICAgZm9yKGRvbmUgPSBhbGwgPSBwYXNzID0gcHV0ID0gODsgYWxsPT04OyBjaGVjaygpKQogICAgICAgICAgICAgICAgdHVybiAtIDIgPyAoc2NhbmYoIiVkICVkIiwmcHV0LCZpKSwgcHV0Kz1pKjkpOiArK3B1dDsKICAgICAgICAgCiAgICAgICAgZWxzZSBpZihwYXNzKQogICAgICAgICAgICAvLyDpp5Ljga/nva7jgZHjgarjgYQKICAgICAgICAgICAgcGFzcz0wLHByaW50ZigicGFzcyIpOwogICAgICAgIGVsc2UKICAgICAgICAgICAgLy8g5Lih6ICF44Go44KC6aeS44KS572u44GR44Gq44GE44Gu44Gn57WC5LqGCiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIC8vIHR1cm7kuqTku6MKICAgICAgICB0dXJuID0gMyAtIHR1cm47CiAgICB9CiAgICByZXR1cm4gMDsKfQ==