川のブログ

川の適当気ままなブログです。 

AOJ 0176 What Color?

こんにちは川です。

今回は、計算がややこしい?ですかね。

 

自分は、16進数表示された文字列から10進数に直す際は、配列の

文字のアスキーコード表に対応した要素番号に値を保存しました。

 

ソースコード

 

#include<bits/stdc++.h>
using namespace std;
int main()
{
    string color[]={"black","blue","lime","aqua","red","fuchsia","yellow","white"};
    int colornum[8][3]={{0,0,0},{0,0,255},{0,255,0},{0,255,255},
{255,0,0},{255,0,255},{255,255,0},{255,255,255}};
    int value[200]={};
    for(int i=0;i<10;i++)value['0'+i]=i;
    for(int i=0;i<6;i++)value['a'+i]=10+i;
    string str;
    while(cin>>str&&str!="0"){
        int num[3];
        for(int i=0;i<3;i++)num[i]=value[str[1+2*i]]*16+value[str[2+2*i]];
        int ans[8]={};
        for(int i=0;i<8;i++)
            for(int j=0;j<3;j++)
                ans[i]+=pow(colornum[i][j]-num[j],2);
        int co=0;
        for(int i=1;i<8;i++)if(ans[co]>ans[i])co=i;
        cout<<color[co]<<endl;
    }
}