2014年10月8日水曜日

The Descent

宇宙船で平地に降下していきます。
ただし、山が邪魔なので、砲撃して山を切り崩す必要があります。
1段階の高さで、それぞれ1回ずつしか砲撃できません。

そのためには何をすれば良いでしょうか?
ONBOADINGが参考になるでしょう。
考慮すべき点
  • どの山に砲撃させるか
入力(テンプレで用意されている)
  • 1行目
    • int SX : 位置x 左端がゼロ(最初の山の上空)、右端が7
    • int SY : 位置y 最初が10、平地が1
  • 2行目から9行目
    • int MH : 山の高さ 9~0。大きければ高い。左から右の順
出力
  • "FIRE" 真下の山を砲撃
  • "HOLD" 何もしない

回答例

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

class Player
{
    static void Main(String[] args)
    {
        string[] inputs;
        // game loop
        while (true)
        {
            inputs = Console.ReadLine().Split(' ');
            int SX = int.Parse(inputs[0]); //位置x
            int SY = int.Parse(inputs[1]); //位置y
            int target = -1; // 砲撃対象の山のID。初期値 -1
            int maxHeight = 0;; // 最大の山の高さ。初期値 0
            for (int i = 0; i < 8; i++)
            {
                int MH = int.Parse(Console.ReadLine()); // 山の高さ 9 から 0。左から右へ。
                 Console.Error.WriteLine("SX:"+SX+" SY:"+SY + " MH(i):" +MH+"("+i+")"); //確認のため標準エラー出力へ
                 if(maxHeight == 0 || maxHeight < MH){ // maxHeight が初期値だったら、または、maxHeight がそれまでのものより大きかったら
                    maxHeight = MH; // maxHeightを更新
                    target = i; // 砲撃対象を更新
                 }
            }

            if(SX==target){ // 
                Console.WriteLine("FIRE"); // 砲撃
            }else{
                Console.WriteLine("HOLD"); // スルーする
            }
        }
    }
}

所感

まだ変数と IF しか出てきませんね...

0 件のコメント:

コメントを投稿