結果

提出番号 836
提出者 fal_rnd
言語 Java
提出日時 2017-08-01 14:56:31
問題名 (42)オセロ
結果 AC
点数 100%

テストケース

テストケース 結果 得点 実行時間 メモリ使用量
1 AC 100% 249ms 123712KB
2 AC 100% 230ms 122144KB
3 AC 100% 225ms 122800KB
4 AC 100% 239ms 122880KB
5 AC 100% 246ms 122688KB

ソースコード

import java.awt.Point;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;
import java.util.stream.IntStream;

public class Main{
	static Scanner s=new Scanner(System.in);
	static IntStream REPS(int v){return IntStream.range(0,v);}
	static IntStream REPS(int l,int r){return IntStream.rangeClosed(l,r);}
	static IntStream INS(int n) {return REPS(n).map(i->getInt());}
	static int getInt(){return Integer.parseInt(s.next());}
	public static void main(String[]$){
		char[][]b=REPS(8).mapToObj(i->s.next().toCharArray()).toArray(char[][]::new);

		char me=getInt()==0?'b':'w';
		char op=me    =='w'?'b':'w';

		int x=0,y=0;
		{
			char[]p=s.next().toCharArray();
			x=p[0]-'A';
			y=p[1]-'1';
		}
		
		b[y][x]=me;

		ArrayList<Point> p=new ArrayList<>(),buf=new ArrayList<>();
		{
			boolean f=false;
			buf.clear();
			int xx=x,yy=y;
			while(true) {
				++xx;++yy;
				if(!izryt(yy,xx)||b[yy][xx]=='-')
					break;
				if(b[yy][xx]==me) {
					f=true;
					break;
				}
				buf.add(new Point(xx,yy));
			}
			if(f)
				p.addAll(buf);
		}
		{
			boolean f=false;
			buf.clear();
			int xx=x,yy=y;
			while(true) {
				++xx;--yy;
				if(!izryt(yy,xx)||b[yy][xx]=='-')
					break;
				if(b[yy][xx]==me) {
					f=true;
					break;
				}
				buf.add(new Point(xx,yy));
			}
			if(f)
				p.addAll(buf);
		}
		{
			boolean f=false;
			buf.clear();
			int xx=x,yy=y;
			while(true) {
				--xx;++yy;
				if(!izryt(yy,xx)||b[yy][xx]=='-')
					break;
				if(b[yy][xx]==me) {
					f=true;
					break;
				}
				buf.add(new Point(xx,yy));
			}
			if(f)
				p.addAll(buf);
		}
		{
			boolean f=false;
			buf.clear();
			int xx=x,yy=y;
			while(true) {
				--xx;--yy;
				if(!izryt(yy,xx)||b[yy][xx]=='-')
					break;
				if(b[yy][xx]==me) {
					f=true;
					break;
				}
				buf.add(new Point(xx,yy));
			}
			if(f)
				p.addAll(buf);
		}
		{
			boolean f=false;
			buf.clear();
			int xx=x,yy=y;
			while(true) {
				++xx;
				if(!izryt(yy,xx)||b[yy][xx]=='-')
					break;
				if(b[yy][xx]==me) {
					f=true;
					break;
				}
				buf.add(new Point(xx,yy));
			}
			if(f)
				p.addAll(buf);
		}
		{
			boolean f=false;
			buf.clear();
			int xx=x,yy=y;
			while(true) {
				--xx;
				if(!izryt(yy,xx)||b[yy][xx]=='-')
					break;
				if(b[yy][xx]==me) {
					f=true;
					break;
				}
				buf.add(new Point(xx,yy));
			}
			if(f)
				p.addAll(buf);
		}
		{
			boolean f=false;
			buf.clear();
			int xx=x,yy=y;
			while(true) {
				++yy;
				if(!izryt(yy,xx)||b[yy][xx]=='-')
					break;
				if(b[yy][xx]==me) {
					f=true;
					break;
				}
				buf.add(new Point(xx,yy));
			}
			if(f)
				p.addAll(buf);
		}
		{
			boolean f=false;
			buf.clear();
			int xx=x,yy=y;
			while(true) {
				--yy;
				if(!izryt(yy,xx)||b[yy][xx]=='-')
					break;
				if(b[yy][xx]==me) {
					f=true;
					break;
				}
				buf.add(new Point(xx,yy));
			}
			if(f)
				p.addAll(buf);
		}
		p.forEach(o->b[o.y][o.x]=me);

		Arrays.stream(b).map(String::valueOf).forEach(System.out::println);
	}
	static boolean izryt(int y,int x) {
		return 0<=y&&y<8&&0<=x&&x<8;
	}
}