2005-05-06 18:11:07

10分でコーディング

テーマ:ブログ
昨日の問題、一番早く終わったひとは3分以内でした。


すごすぎます。タイピングだけでも3分くらいかかりそうなのに。


今日の問題はかなり簡単です。


できるだけ早い時間でエレガントなコードを書きましょう。


あまりに簡単なので制限時間を10分としてやってみてください。


これ以上かかった人は




自分はかなりプログラミングができない。




とつらい事実を認識しましょう。


そして、これからすごくなりましょう。



では、10分だけこの問題に付き合ってみてください。



スタート!!


>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

難易度 激簡単 目標時間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)























おれのプログラムです。

public class Cards{
  public String[] deal(int numPlayers, String deck){
     String[] cards = new String[numPlayers];
     for(int i=0,len=cards.length; i<len; i++){
        cards[i] = "";
     }
     if (numPlayers > deck.length()) return cards;
        int index,total;
        index = total = 0;
        for(int i=0; i<deck.length(); i++){
           cards[index++] += deck.charAt(i);
           total++;
           if (index == numPlayers){
              if (deck.length() - total < numPlayers) break;
              else index = 0;
           }
        }
        return cards;
  }
}

AD
いいね!した人  |  コメント(20)  |  リブログ(0)

コメント

[コメントをする]

20 ■Scalaで10分ぐらい…

class Cards {
def deal(n: Int, d: String) = {
val chars = d.split("").tail
if (chars.toSet.size == n) {
chars.toSet.map((_:String)*n).toArray
} else {
val m = chars.size / n
if (m != 0) chars.grouped(m).map(_.mkString).take(n).toArray
else Array.fill(n)("")
}
}
}

19 ■Java初心者です。8分もかかりました…

import java.util.Arrays;

public class Cards {
public static void main(String[] args){
System.out.println(Arrays.toString(deal(2,"")));
}
public static String[] deal(int numPlayers, String deck){
String[] cards = new String[numPlayers];

if (deck.length() < numPlayers){
for(int j = 0; j < numPlayers;j++){
cards[j]="";
}
}else{
for(int i = 0; i < deck.length() ;i++){
if(cards[i%numPlayers] == null){
cards[i%numPlayers] = "";
}
cards[i%numPlayers] = cards[i%numPlayers] + deck.substring(i,i+1);
}
}
return cards;
}
}

18 ■15分くらいかかってしまいましたorz

public String[] deal(int numPlayers, String deck) {
String[] give = new String[numPlayers];
char[] devide = deck.toCharArray();

int cardNum = deck.length() / numPlayers;

for(int i = 0; i < numPlayers; i++) {
give[i] = new String("");
for(int j = i, length = deck.length(); j < length; j += numPlayers) {
if(!(give[i].length() >= cardNum)) {
give[i] += devide[j];
}
}
}
return give;
}

17 ■うーん、20分かかってしまった;P

let (+>) f g = g f

let rec unfold f init =
match f init with
Some (a, b) -> a :: unfold f b
| None -> []

let make_list i j =
let f x =
if x >= j then
None
else
Some (x, x + 1)
in
unfold f i

let deal n str =
let max =
(String.length str) / n
in
make_list 0 n
+> List.map (fun i ->
List.map (fun j ->
String.get str (i + j * n)) (make_list 0 max))
+> List.map (List.fold_left (fun s c -> s ^ (Char.escaped c)) "")

16 ■無題

class Cards
def self.deal(numPlayers, deck)
players = Array.new(numPlayers, "")
unit = deck.length / numPlayers
deck.reverse!
unit.times do
numPlayers.times do |i|
players[i] += deck.slice!(-1, 1)
end
end
return players
end
end

15 ■ぎり10分・・・PHPです。

class Cards
{
function deal($members, $cards)
{
$ret = array();
$len = strlen($cards);
if($members > 0)
{
for($cnt = 0; $cnt < $len; $cnt ++)
{
if(($cnt % $members == 0) && $len - $cnt < $members)
{
break;
}
$mem = $cnt % $members;
if(!isset($ret[$mem]))
{
$ret[$mem] = "";
}
$ret[$mem] .= substr($cards, $cnt, 1);
}
}
return $ret;
}
}

14 ■もっとひねった回答かと思ったけど。私の場合・・

public String[] deal(int numPlayers, String deck) {
String[] r = new String[numPlayers];
for (int m = 0; m < numPlayers; m++) {
r[m] = "";
}
int m = 0;
int max = (deck.length() / numPlayers) * numPlayers;
for (int p = 0; p < max; p++) {
r[m] += deck.substring(p, p + 1);
if (++m >= numPlayers) {
m = 0;
}
}
return r;
}

13 ■出会い情報

出会い情報

12 ■友達募集

友達募集

11 ■家出掲示板

家出掲示板

10 ■人妻セフレ

人妻セフレ

9 ■人妻セックス

人妻セックス

8 ■不倫掲示板

不倫掲示板

7 ■セックスフレンド

気軽にセックスを楽しめる!ご近所同士のスキンシップやセックスしたい純粋な願望を満たしてみませんか?写メもあって直接メール送信OK

6 ■アダルト

アダルトサークルをご紹介!素敵なきっかけ探し!アダルト好きな方にはお薦め

5 ■アダルト

アダルトな一時を楽しめる…素敵なアダルトライフを求める女性様より朗報です。

4 ■アダルトな時間には優雅な楽しみがあるのです

アダルト

3 ■無題

#include <vector>

using namespace std;

class Cards{
public:
vector<string> deal(int numPlayers, string deck){
vector<string> v(numPlayers);
for (int i = 0; i < deck.size() - deck.size() % numPlayers; i++)
v[i%numPlayers] += deck[i];
return v;
}
};

2 ■無題

1 ■ぴったし10分でできました(C++版)

void deal( int ninzuu, string cards, vector <string> &vvv )
{
int ii, nnn ;
for( ii = 0 ; ii < ninzuu; ii ++ )
vvv.push_back("");

nnn = 0 ;
for(ii = 0 ; ii < ((cards.size() / ninzuu) * ninzuu) ; ii ++ ){
vvv[nnn] += cards[ii];
nnn ++;
if(nnn == ninzuu)
nnn = 0 ;
}
}
急いだの変数名とかいいかげん。

コメント投稿

AD

Amebaおすすめキーワード

Ameba人気のブログ

Amebaトピックス

ランキング

  • 総合
  • 新登場
  • 急上昇
  • トレンド

ブログをはじめる

たくさんの芸能人・有名人が
書いているAmebaブログを
無料で簡単にはじめることができます。

公式トップブロガーへ応募

多くの方にご紹介したいブログを
執筆する方を「公式トップブロガー」
として認定しております。

芸能人・有名人ブログを開設

Amebaブログでは、芸能人・有名人ブログを
ご希望される著名人の方/事務所様を
随時募集しております。