今日のTopCoderの問題はこちらで見ることができる(要TopCoder登録 & 問題文は英語)。
ディザリングについて。ディザリングというのは、見かけの色数よりも少ない色数で画像を構成することである。使える色が限られた環境で用いられる技術である。チェスの盤目のように白と黒を配置してグレーに見せるのが代表的な例である(Faxを思い浮かべるとよいかも)。
さて、あなたは、あるディザリングに用いられている色を数えるプログラムを書くことになった。スクリーンの各画素の色情報(文字列型配列で表されている)と、ディザリングに用いられている色の一覧が与えられたとき、スクリーン中に、ディザリングに用いられている色が用いられている画素数を返すメソッドを作成せよ。スクリーンはscreen[](1つの配列がスクリーンの1行を表していると思え)、ディザリングに用いられる色はditheredで与えられている。ditheredの一部に該当する文字がscreen[]中に登場したら、その文字はディザリングされている画素である。
私の解答は以下の通り。原始的ではあるが、1文字ずつ比較していくという方法をとっている。
public class ImageDithering { public int count(String dithered, String[] screen) { int cnt = 0; for( int i=0 ; i<dithered.length() ; i++ ){ for( int j=0 ; j<screen.length ; j++ ){ for( int k=0 ; k<screen[j].length() ; k++ ){ if( screen[j].charAt(k) == dithered.charAt(i) ) cnt++; } } } return cnt; } }
得点は246.60/250。中央値は約228点、正解率は97%台であった。この問題はSRM208以前のSRMでも出題されていて、Javaを習い始めた当時は、charAtやlengthメソッドが分からなくて苦労したが、今回はあっさり解くことができた。
0 件のコメント:
コメントを投稿