Pongeponge

読者です 読者をやめる 読者になる 読者になる

Codingame『Indiana - Level 1』

f:id:pongeponge:20150928093547j:plain
インディアンなジョーンズが洞窟を底へと滑り落ちていく。
滑り落ちていく方向を制御して、奈落へ叩き込もう!(助けない)


リプレイはこんな感じ




 そんなに難しくない。

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

/**
 * Auto-generated code below aims at helping you parse
 * the standard input according to the problem statement.
 **/
class Player
{
    static void Main(string[] args)
    {
        string[] inputs;
        inputs = Console.ReadLine().Split(' ');
        int w = int.Parse(inputs[0]); // 横幅
        int h = int.Parse(inputs[1]); // 高さ
        Console.Error.WriteLine("W H : {0} {1}", w, h);

        //マップを作る
        int[,] map = new int[w, h];
        for (int i = 0; i < h; i++)
        {
            string[] sgrid = Console.ReadLine().Split(' '); // represents a line in the grid and contains W integers. Each integer represents one room of a given type.

            //マップに部屋のタイプを保存
            for (int j = 0; j < w; j++)
            {
                map[j, i] = int.Parse(sgrid[j]);
                Console.Error.Write("{0} ", map[j, i]);
            }
            Console.Error.WriteLine("");
        }

        //脱出口の横座標
        int exit = int.Parse(Console.ReadLine()); // the coordinate along the X axis of the exit (not useful for this first mission, but must be read).
        Console.Error.WriteLine("Exit : {0}", exit);

        //ルームクラスの用意
        Room r = new Room();

        // game loop
        while (true)
        {
            inputs = Console.ReadLine().Split(' ');

            //主人公の位置
            Pos p = new Pos(int.Parse(inputs[0]), int.Parse(inputs[1]));
            string inp = inputs[2];
            Console.Error.WriteLine("x y : {0} {1}", p.w, p.h);
            Console.Error.WriteLine("pos : {0}", inp);

            //部屋判別
            p = r.Type(map[p.w, p.h], inp, p);
            // Write an action using Console.WriteLine()
            // To debug: Console.Error.WriteLine("Debug messages...");

            Console.WriteLine("{0} {1}", p.w, p.h); // One line containing the X Y coordinates of the room in which you believe Indy will be on the next turn.
        }
    }

    //部屋処理
    public class Room
    {
        public Pos Type(int n, string inp, Pos p)
        {
            if ((n == 1) | (n == 3) | (n == 7) | (n == 8) | (n == 9) | (n == 12) | (n == 13))
            {
                //下に落ちる
                return this.FallDown(p);
            }
            else if ((n == 2) | (n == 6))
            {
                //左右移動
                return MoveLR(inp, p);
            }
            else if ((n == 4) | (n == 5) | (n == 10) | (n == 11))
            {
                //曲がってる
                return Curve(n, inp, p);
            }

            //エラー:部屋が見つからない
            Console.Error.WriteLine("1");
            return p;
        }

        //下に落ちる
        private Pos FallDown(Pos p)
        {
            return new Pos(p.w, p.h + 1);
        }

        //左右移動
        private Pos MoveLR(string inp, Pos p)
        {
            if (inp == "LEFT")
            {
                return new Pos(p.w + 1, p.h);
            }
            else if (inp == "RIGHT")
            {
                return new Pos(p.w - 1, p.h);
            }
            Console.Error.WriteLine("2");
            return p;
        }

        //くねってる
        private Pos Curve(int n, string inp, Pos p)
        {
            if ((n == 4 | n == 10) & inp == "TOP")
            {
                return new Pos(p.w - 1, p.h);
            }
            else if ((n == 5 | n == 11) & inp == "TOP")
            {
                return new Pos(p.w + 1, p.h);
            }
            else
            {
                return new Pos(p.w, p.h + 1);
            }
            Console.Error.WriteLine("3");
            return p;
        }
    }

    //座標
    public class Pos
    {
        public int w;
        public int h;

        public Pos(int x, int y)
        {
            this.w = x;
            this.h = y;
        }
    }
}


インディ・ジョーンズ 魔宮の伝説 [Blu-ray]

インディ・ジョーンズ 魔宮の伝説 [Blu-ray]