このTopCoderの問題はこちらで見ることができる(要TopCoder登録 & 問題文は英語)。それでは、問題について説明する。
1971年以前は、イギリスの通貨システムはシャルルマーニュの時代からのものが利用されていた。通貨の種類はペニー、シリング、ポンドであった。12ペニーが1シリング、20シリングが1ポンドということになっていた。penceというペニーの数が与えられたときに、ポンドをできるだけ多く、次にシリングをできるだけ多くし、それぞれが何枚ずつに変換されるかをint型の配列にして返すメソッドを作成せよ。配列の中身は、penceを変換した結果得られる順にポンド、シリング、ペニーの数である。
例えば500ペンスは2ポンド、1シリング、8ペニーになる。2*12*20+1*12+8=500という関係になっている。
私の解答は以下の通り。
public class BritishCoins { public int[] coins(int pence) { return new int[]{pence/240,(pence-pence/240*240)/12,pence%12}; } }
得点は248.45/250、中央値は約236点。初めてのワンライナーです。240で割って240を掛けるというコードは気味が悪いです。
0 件のコメント:
コメントを投稿