topcoderの道1
プログラミングをはじめて1年半、誰よりもすごくなってやると思い、いろいろな言語を勉強し、デザインパターン、ネットワークプログラミング、WEBプログラミング、RDBS,XMLなども学習してきた。ある程度の設計もできる自信もついてきた。が、しかし最近すげーものを発見し、ショックをうけた。それは
www.topcoder.com
このサイトでは世界中のやつらがプログラミングの腕を毎週競い合ってる。
制限時間内に与えられた問題のプログラムを一番はやくパーフェクトにできたものが一番という大会である。トップコーダーには賞金もでる。
アルゴリズム大会とソフトウェアデザイン大会の二つがあるのだが、おれはこのアルゴリズム大会にすごくショックをうけた。自分のプログラムがいかにしょぼいかを思い知らされる。
結局、プログラマの腕の見せどころは以下に効率よく、問題を解いていくことなんじゃないかと思いはじめた。
もちろん、プログラムのデザインなどもとても重要なことだとは思う。だが、いくらデザインがよくできていたとしてもそれをコーディングしていくもののスキルがしょぼければ、このアメブロのようなバグだらけのシステムはできてしまう。
このTOPCODERにはすごいやつが世界中からあつまってきている。そして、
このサイトのすごいのは大会が終わった後にはすべての参加者のプログラムを読むことができることだ。
残念ながら問題はすべて英語で出されるから英語ができないと参加することは難しい。
そこでこのブログでは英語なんかできなくても世界でTOPレベルのIT技術を誇る日本のプログラマのひとたちのプログラムを見れるようにできたらと思いつくってみた。
JAVAができるとかC++ができるとかはこのコンペにはほとんど関係ない。求められるのはいかにはやくエレガントなコードをかけるかということだけだ。
おれのようなしょぼい学生プログラマから定年間際の長老プログラマの方、
自分は本当にプログラミングができるのかというのをぜひためしてみてくれ。言語は特に問わないが、できたら、C,C++,JAVAあたりで。
では、今回の問題
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
(難易度 超簡単, 目標時間 10分以内)
与えられた英語の大文字で構成された文字列の中の文字を、与えられた数字の分だけ左にシフトさせなさい。たとえば、’C’を2つ左にシフトさせると’A’、’Z’を2つ左にシフトさせると’X’。
与えられる英語の文字列はAからZで、Aの次はZにシフトさせるものとする。
例1)
"VQREQFGT"
2
Returns: "TOPCODER"
例2)
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
10
Returns: "QRSTUVWXYZABCDEFGHIJKLMNOP"
例3)
"TOPCODER"
0
Returns: "TOPCODER"
例4)
"LIPPSASVPH"
4
"HELLOWORLD"
クラス名: CCipher
メソッド名: decode
メソッドの引数: String , int
リターン: String
メソッド: String decode(String ciphertest, int shift)
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
では、LET'S START!!
下の方におれのしょぼい解答プログラムをはっておく。
”おれのがすげーぜ” っていうやつはトラックバックもしくはコメントでどんどんはってくれ。
public class CCipher { public String decode(String chipher, int shift){ char[] chs = chipher.toCharArray(); for(int i=0,len=chs.length; i<len; i++){ for(int j=shift; j>0; j--){ if (chs[i] == 'A') chs[i] = 'Z'; else chs[i] = (char)((int)chs[i] - 1); } } return new String(chs); } }