Codingame『Temperatures』

f:id:pongeponge:20150113003117j:plain


 『0度に一番近い温度(天麩羅)を探してね!』というゲーム。
見た目がアレで敬遠してたラムダ式を、1mmくらい理解した気がする。


 あと、テスト項目が実は多かったという事実。
テストケース3まで合格すればポイント全部とれると思ってたらそうじゃなかった。

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 Solution
{
    static void Main(string[] args)
    {
        int N = int.Parse(Console.ReadLine()); // the number of temperatures to analyse
        string TEMPS = Console.ReadLine(); // the N temperatures expressed as integers ranging from -273 to 5526
        string result = null;
        
        // Write an action using Console.WriteLine()
        // To debug: Console.Error.WriteLine("Debug messages...");
        Console.Error.WriteLine(N);     //テンプラ数
        Console.Error.WriteLine(TEMPS); //テンプラの熱さリスト
        
        result = CloseToZero(N,TEMPS); //0度に一番近いテンプラの温度を取得
        
        Console.WriteLine(result);
    }
    
    //0度に一番近いテンプラの熱さを取得する
    //int N : テンプラ数
    //string T : テンプラの熱さリスト
    public static string CloseToZero(int N, string T)
    {
        if(N == 0) return "0"; //テンプラの数が0なら0を返す

        int[] tmps  = Array.ConvertAll(T.Split(' '), (string s) =>  int.Parse(s)); //string配列をint配列に変換
        Array.Sort(tmps); //昇順にソートさせることで-5と+5でも+5の方を取得させる
        
        int nz = tmps[0]; //0に一番近い熱さ(初期値は一番冷たい)
        for(int i = 1; i < tmps.Length; i++) {
            if(tmps[i]*tmps[i] <= nz*nz) nz = tmps[i]; //配列を順番にチェックしていく
        }
        
        return nz.ToString();
        
    }
}


TEMPURA 帰ってきたTEMPURAマン [DVD]

TEMPURA 帰ってきたTEMPURAマン [DVD]