Codingame『APU: Init Phase』

f:id:pongeponge:20150923044451j:plain


 ルールがよくわからなくて、めちゃくちゃ時間かかった。
隣接ノードを探すんじゃなくて、離れていても右にあるノード、下にあるノードを探す。
それが分からずに「なんでやー、なんでやー」と頭抱えてた。
英語読めないのが悪いといえばそうなんだけどね。


using System;
using System.Linq;
using System.IO;
using System.Text;
using System.Collections;
using System.Collections.Generic;

/**
 * Don't let the machines win. You are humanity's last hope...
 **/
class Player
{
    //見つからん場合
    static string none = "-1 -1";
    //横と高さのサイズ
    static int width;
    static int height;
    //マップ
    static bool[,] map; 
    
    static void Main(string[] args)
    {
        //横縦サイズ取得
        width = int.Parse(Console.ReadLine()); // the number of cells on the X axis
        height = int.Parse(Console.ReadLine()); // the number of cells on the Y axis
        
        //配列の確保
        map = new bool[width, height];

        //mapに状態を埋めていく
        for (int i = 0; i < height; i++)
        {
            string line = Console.ReadLine(); // width characters, each either 0 or .
            Console.Error.WriteLine(line);
            
            //ノートがあればtrue,なければfalse
            for(int x = 0; x < width; x++) {
                switch(line[x]) {
                    case '0':
                        map[x,i] = true;
                        break;
                    case '.':
                        map[x,i] = false;
                    break;
                }
            }
        }
        
        for(int y = 0; y < height; y++) {
            for(int x = 0; x < width; x++) {
                //ノードがあれば右と下を調べて出力
                if(map[x,y] == true) {
                    string s = cod(x, y);
                    string r = sr(x, y);
                    string b = sb(x, y);
                    
                    Console.WriteLine(nodes(s,r,b));
                }
            }
        }
    }
    
    //座標をまとめる
    public static string cod(int x, int y)
    {
        return string.Format("{0} {1}", x, y);
    }
    
    //出力形式へ整形
    public static string nodes(string select, string right, string bottom)
    {
        return string.Format("{0} {1} {2}", select, right, bottom);
    }
    
    //右サーチ
    public static string sr(int sx, int sy) {
        for(int x = sx+1; x < width; x++) {
            if(map[x, sy] == true) return cod(x, sy);
        }
        return none;
    }
    
    //下サーチ
    public static string sb(int sx, int sy) {
        for(int y = sy+1; y < height; y++) {
            if(map[sx, y] == true) return cod(sx, y);
        }
        return none;
    }

}


What Is Node?

What Is Node?