元の課題は、此れです。
難易度 激簡単 目標時間10分以内 あなたはこれからトランプを配っていきます。 あなたにはトランプを配る人数、 そしてトランプが渡されます。 今回はとても簡単なので例題で説明します。 例) 2つの引数がもらえます。 3 "123123123" 最初の3はプレイヤーの人数を示しています。 "123123123" はトランプの並びを示しています。あなたはこのなかのトランプを 配っていかなければなりません。 この場合、あなたのプログラムは {"111","222","333"} を返さなければなりません。 "111"は一番めのプレイヤーが受け取るトランプです。 "222"が2番目のプレイヤーが受け取るトランプです。 "333"が2番目のプレイヤーが受け取るトランプです。 ところが、以下のような場合もあります。 すべてのプレイヤーは同じ数だけのトランプを受け取らなければなりません。 ですので 4 "123123123" この場合、あなたのプログラムは {"12","23","31","12"} を返さなければなりません。 {"123","23","31","12"} は駄目です。 では、以下にもうすこし例をのせます。 例1) 6 "012345012345012345" Returns: {"000", "111", "222", "333", "444", "555" } 例2) 4 "111122223333" Returns: {"123", "123", "123", "123" } 例3) 1 "012345012345012345" Returns: {"012345012345012345" } 例4) 6 "01234" Returns: {"", "", "", "", "", "" } 例5) 2 "" Returns: {"", "" } クラス名、などは以下のとおりです。 Class: Cards Method: deal Parameters: int, String Returns: String Method signature: String deal(int numPlayers, String deck) 10分でコーディング|プログラミングに自信があるやつこい!! http://ameblo.jp/programming/entry-10001721422.html
返値は別に文字列でなくても良いだろう、と云う事で、配列で返しています。文字列が必要ならtoString()を書き足せば宜しい、と。
追記:"String[ ]"は"Stringの[ ]"、詰り「文字列の配列」だと云う事を学習しました、済みません。
<!doctype html> <html> <head> <meta charset="UTF-8"/> <meta http-equiv="Content-Type" content="application/xhtml+xml"/> <meta http-equiv="Content-Style-Type" content="text/css"/> <meta http-equiv="Content-Script-Type" content="application/javascript"/> <title>Card.deal()</title> </head> <body> <form> numPlayer: <input type="text" size="5" id="form_numPlayers"/><br/> deck: <input type="text" size="64" id="form_deck"/><br/> <input type="button" value="Card.deal()" id="form_deal"/><br/> result:<br/> <textarea id="form_result" style="width:20em;height:10em;"></textarea> </form> <script> (function(){ var _doc = document, _Math = Math, Cards = {}; /* * return:Array = Cards.deal(numPlayers:Number, deck:String) */ Cards.deal = function(numPlayers, deck){ if(numPlayers === 0){return []} //if(numPlayers === 1){return [deck]} var i, cnt=0, result=new Array(numPlayers); while(deck.length >= numPlayers * (cnt + 1)){ for(i=0; i<numPlayers; ++i){ result[i] = (result[i] || '') + deck.charAt(cnt * numPlayers + i); } ++cnt; } return result; };(function(){ var assert_eqv = function(l, r){ if(l.toString() !== r.toString()){throw Error('asert_eqv(): l -> '+l+', r -> '+r)} }; assert_eqv(Cards.deal(3, '123123123'), ['111','222','333']); assert_eqv(Cards.deal(4, '123123123'), ['12','23','31','12']); assert_eqv(Cards.deal(6, '012345012345012345'), ['000','111','222','333','444','555']); assert_eqv(Cards.deal(4, '111122223333'), ['123','123','123','123']); assert_eqv(Cards.deal(1, '012345012345012345'), ['012345012345012345']); assert_eqv(Cards.deal(6, '01234'), ['','','','','','']); assert_eqv(Cards.deal(2, ''), ['','']); })(); _doc.getElementById('form_deal').onclick = function(){ _doc.getElementById('form_result').value = '{' + Cards.deal(_Math.floor(_Math.abs(Number(_doc.getElementById('form_numPlayers').value))), _doc.getElementById('form_deck').value).join(',') + '}'; }; })(); </script> </body> </html>
課題に、あまりに簡単なので制限時間を10分としてやってみてください。 これ以上かかった人は 自分はかなりプログラミングができない。 とつらい事実を認識しましょう。 そして、これからすごくなりましょう。
と脅されたので、可成り緊張しました、ね。
参考:
カード配り問題 - 素人がプログラミングを勉強するブログ
http://d.hatena.ne.jp/javascripter/20091216/1260974183
話題の10分コーディングをやってみたんだけど、残念な出来にしかならなかった - ?D of K
http://d.hatena.ne.jp/ofk/20091220/1261286361