c4se記:さっちゃんですよ☆

.。oO(さっちゃんですよヾ(〃l _ l)ノ゙☆)

.。oO(此のblogは、主に音樂考察Programming に分類されますよ。ヾ(〃l _ l)ノ゙♬♪♡)

音樂は SoundCloud に公開中です。

考察は現在は主に Scrapbox で公表中です。

Programming は GitHub で開發中です。

カードを配る丈の簡単な御仕事 - 10分でコーディング #javascript

元の課題は、此れです。

難易度 激簡単 目標時間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の[ ]"、詰り「文字列の配列」だと云う事を学習しました、済みません。


Card.deal()

<!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