Rev. 2.73

아래에 준비된 문제는 아주 간단합니다. 자신이 사용하는 또는 선호하는 언어를 사용하여 최대한 빠르게 우아하면서도 미려한 코드를 작성해보세요. 제한 시간은 10 분입니다. 시간이 초과된 사람은 루저입니다. 아마도 확실히 분발해야 할 것입니다.

현재 시간을 확인하세요. 지금부터 시작합니다.

당신은 운세 카드를 여러사람에게 배부하는 프로그램을 작성 중입니다.
당신은 사람 수 별로 카드를 나누어주는 함수를 작성해야 합니다.
다음 예제를 잘 읽고 모든 조건을 만족하는 함수를 작성하세요.

함수는 아래처럼 2개의 인자를 받습니다.

3, "123123123"

첫 번째 인자인 3은 플레이어의 수를 나타냅니다. "123123123"은 카드의 시퀀스를 나타냅니다. 플레이어는 다음과 같이 카드를 나누어 가져야합니다.

{"111","222","333"}

함수는 위치 값을 반환해야 합니다.

"111"은 첫 번째 플레이어가 받는 카드입니다.
"222"는 두 번째 플레이어가 받는 카드입니다.
"333"은 세 번째 플레이어가 받는 카드입니다.

그러나 다음과 같은 경우도있습니다. 모든 플레이어는 동등하게 카드를 나누어 가져야합니다.

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)

문제를 모두 푸셨다면 당신이 작성한 코드와 언어, 소요된 시간을 댓글로 달아주세요.

Comments

Got something to add? You can just leave a comment.

  • function DealCards(numPlayers, deck) {
    var players = new Array(numPlayers);
    if (!(deck.length % numPlayers)) {
    if (players.length == 1) players[0] = deck;
    else {
    for (var i = 0; i < deck.length; i++) {
    if (!players[i % numPlayers]) players[i % numPlayers] = "";
    players[i % numPlayers] += deck[i];
    }
    }
    }
    return '{"' + players.join('", "') + '" }';
    }

    자바스크립트, 10분 조금 넘음 ㅠ.ㅠ

    reply edit

  • jhlee jhlee

    var test = function(nUser, cards) {

    if ((cards.length % nUser) != 0){
    var arr = [];
    for(var i = 0 ; i < nUser ; i+=1) {
    arr.push("");
    }
    return arr;
    }


    var arrs = [];
    for(var i = 0 ; i < nUser ; i +=1) {
    arrs.push([]);
    }

    var cCard = parseInt(cards.length / nUser);

    for(var i = 0 ; i < cards.length ; i +=1){
    var _numUser = i % nUser;

    arrs[_numUser].push(cards[i]);
    }

    return arrs;
    }

    javascript 사용 8분 소요....

    간만에 느끼는 긴장감.. ㅋ

    reply edit

  • 워~ 멋져요 ^^; ㅋㅋ

    reply edit

  • 충굴 충굴

    * 언어 : java
    * 시간 : 대략 10분 정도?? (루저일수도..ㅠㅠ)

    public String[] deal(int numPlayers, String deck) {

    char[] c = deck.toCharArray();
    String[] result = new String[numPlayers];
    for(int i=0; i< result.length; i++) {
    result[i] = "";
    }
    int cnt = 0;
    for(char ch : c) {
    result[cnt] = result[cnt] + ch;
    cnt++;
    if(cnt == numPlayers) {
    cnt=0;
    }
    }
    return result;
    }

    reply edit

  • 루저는 도전정신을 자극하기위한 일종의 도발입니다. 너무 신경쓰지 마세요 ^^;

    reply edit

  • package main
    import ("fmt"; "container/vector";)
    func main() {
    fmt.Println(deal(3, "123123123"));
    fmt.Println(deal(6, "012345012345012345"));
    fmt.Println(deal(4, "111122223333"));
    fmt.Println(deal(1, "012345012345012345"));
    fmt.Println(deal(6, "01234"));
    fmt.Println(deal(2, ""));
    }
    func deal(numPlayers int, deck string) []string {
    var p vector.StringVector;
    for i:=0; i < numPlayers; i++ { p.Push("") }
    if len(deck) % numPlayers == 0 {
    for i:=0; i < len(deck); i++ {
    idx := i % numPlayers;
    p.Set(idx, p.At(idx) + string(deck[i]));
    }
    }
    return p.Data();
    }

    result:
    [111 222 333]
    [000 111 222 333 444 555]
    [123 123 123 123]
    [012345012345012345]
    [ ]
    [ ]

    google go로 작성해봤습니다. 언어에 익숙치 않아서 10분 넘게 사용했습니다.

    reply edit

  • 와 이것이 구글 go 군요!

    reply edit

  • var Cards = {};
    Cards.deal = function(numPlayers, deck) {
        var dist = Array(numPlayers);
        for (var i = 0; i < numPlayers; i++) {
            dist[i] = "";
        }
        
        var round = Math.floor(deck.length / numPlayers);
        
        for (var i = 0; i < round; i++) {
            for (var j = 0; j < numPlayers; j++) {
                var idx = i * numPlayers + j;
                dist[j] += deck.charAt(idx);
            }
        }
        
        return dist;
    }

    시작 시간: 20:14:19
    종료 시간: 20:19:05
    소요 시간: 4:46

    reply edit

  • 헉! 4분! 들여쓰기까지! 조건문도 없고! 미려하십니다.

    reply edit

  • qpitlove qpitlove

    var Cards ={
        deal : function(numPlayers, deck){
            var results = [];
            for(var i = 0; i < numPlayers ; i ++){
                results[i] = '';
            }
            for(var i = 0; i < deck.length; i++){
                results[i%numPlayers] += deck.substr(i,1);
            }
            
            var minLen = 0;
            for(var i = 0, len = results.length ; i < len ; i++){
                if( minLen == 0){                     
                    minLen = results[i].length;
                }
                if(minLen > results[i].length ) minLen = results[i].length;
            }
            
            for(var i = 0, len = results.length; i < len ; i++){
                results[i] = results[i].substr(0, minLen);
            }
            
            return results;
        }
    }

    console.log(3, "123123123", Cards.deal(3, "123123123"));
    console.log(4, "123123123", Cards.deal(4, "123123123"));
    console.log(6, "012345012345012345", Cards.deal(6, "012345012345012345"));
    console.log(4, "111122223333", Cards.deal(4, "111122223333"));
    console.log(1, "012345012345012345", Cards.deal(1, "012345012345012345"));
    console.log(6, "01234", Cards.deal(6, "01234"));
    console.log(2, "", Cards.deal(2, ""));
    소요시간: 13min

    reply edit

  • function Cards(){
    this.deal = function(numPlayers, deck){
    var i, len, result = [];
    for (i = 0; i < numPlayers; ++i) {
    result[i] = "";
    }
    len = deck.length - deck.length % numPlayers;
    for (i = 0; i < len; ++i) {
    result[i % numPlayers] += deck.charAt(i);
    }
    return result;
    };
    };


    코드 작성은 한 5~7분 정도 걸린 것 같은데..

    다른 기발한 방법을 한 20분간 해메고, (정규식과 split, join 을 남용해 보았으나, 코드가 미려해지기는 커녕 미련해지더군요)

    처음 짰던 코드로 올립니다. 그런데 크롬에서 댓글 달기가 안되네요ㅠ (여기서 한 5분 까먹은듯)

    reply edit

  • 다행히도 IE 에서는 댓글이 달아지는군요ㅠ

    크롬에서 왕 리뷰까지 길게 썼는데 날라가서 걍 포기했어용

    그냥 순정 크롬 3.0 인데.. 원래 안되는건가요? ㅠㅠ

    제약 사항이 꽤 있어서 다들 비슷하게 코딩하실줄 알았는데, 의외로 꽤 다르게 짜셨네요.

    아무튼 즐거운 코딩이였습니다. 감사를.. :]

    reply edit

  • 테스트 코드

    var obj = new Cards();
    var test1 = obj . deal(6, "012345012345012345");
    console.debug(test1);
    var test2 = obj . deal(4, "111122223333");
    console.debug(test2);
    var test3 = obj . deal(1, "012345012345012345");
    console.debug(test3);
    var test4 = obj . deal(6, "01234");
    console.debug(test4);
    var test5 = obj . deal(2, "");
    console.debug(test5);

    reply edit

  • 와우! 자바스크립트! 멋지십니다. 그리고 죄송해요 댓글 캡차에 버그가 있어요 ㅠ.ㅠ

    reply edit

  • 루비 구현입니다. 구현에 3분 테스트 코드 작성에 3분..

    def f(num, str)
    res = []
    num.times {res << ""}
    return res if str.size % num != 0
    str.split('').each_with_index {|c,i| res[i%num] += c}
    res
    end

    def test(num, str, expect)
    if f(num, str) != expect
    puts "no!"
    puts "expects: " + expect.map{|i| "'#{i}'"}.join(',')
    else
    puts "pass: #{num} - '#{str}'"
    end
    end

    test(6, "012345012345012345", ["000", "111", "222", "333", "444", "555" ])
    test(4, "111122223333", ["123", "123", "123", "123" ])
    test(1, "012345012345012345", ["012345012345012345" ])
    test(6, "01234", ["", "", "", "", "", "" ])
    test(2, "", ["", "" ])

    reply edit

  • 초경량 코드 역시 루비군요.

    reply edit

  • Mac OS X + FF 3.5.6 사용중인데 캡챠 번호가 다르다고 제출이 안되네요. 전 크롬에서 제출했습니다

    reply edit

  • 스펨때문에 어설프게 캡차를 구현해 봤는데 엄청 문제가 많네요. 죄송합니다. ㅠ.ㅠ

    reply edit

  • class Card
    def deal(men, cards)
    arr = Array.new(men, '')
    return arr if (men > cards.length or cards.length % men != 0)

    cards.split(//).each_with_index {|card, i| arr[i % men] += card}

    arr
    end
    end

    game = Card.new

    raise "failed !" unless (game.deal(6, "012345012345012345") == ["000", "111", "222", "333", "444", "555"])
    raise "failed !" unless (game.deal(4, "111122223333") == ["123", "123", "123", "123"])
    raise "failed !" unless (game.deal(1, "012345012345012345") == ["012345012345012345"])
    raise "failed !" unless (game.deal(6, "01234") == ["", "", "", "", "", ""])
    raise "failed !" unless (game.deal(2, "") == ["", ""])


    저도 루비...
    위에 분이랑 비슷하네요.. ^^;;;

    10분 이내에 만들었습니다.

    reply edit

  • seravi seravi

    #include <string>
    #include <vector>

    using namespace std;

    vector<string> distcards(int n, const string &c)
    {
    vector<string> v(n);
    string::size_type s = c.length() / n;

    for (int i = 0 ; i < n ; i++)
    {
    v[i] = string(s+1, \'\\0\');
    for (int j = i, k = 0 ; j < c.length() ; j += n, k++)
    v[i][k] = c[j];
    }

    return v;
    }

    Spent 9 minutes, 00:50 ~ 00:59

    reply edit

  • seravi seravi

    #include <string>
    #include <vector>

    using namespace std;

    vector<string> distcards(unsigned int n, const string &c)
    {
    vector<string> v(n);

    if (c.length() < n)
    return v;

    for (unsigned int i = 0 ; i < n ; i++)
    {
    v[i] = string(c.length() / n + 1, '\0');
    for (unsigned int j = i, k = 0 ; j < c.length() ; j += n, k++)
    v[i][k] = c[j];
    }

    return v;
    }

    reply edit

  • kering kering

    class Cards:
    ....def deal(self, num_players, deck):
    ........self.result = self.make_empty(num_players)
    ........return self.solve(num_players, deck)

    ....def solve(self, num_players, deck):
    ........if num_players > len(deck):
    ............return self.result

    ........for i in range(0, num_players):
    ............self.result[i] = self.result[i] + deck[0]
    ............deck = deck[1:]

    ........return self.solve(num_players, deck)

    ....def make_empty(self, num_players):
    ........ret = []
    ........for i in range(0, num_players):
    ............ret.append('')
    ........return ret

    print Cards.deal(6, '012345012345012345')

    파이썬입니다 의외로 파이썬이 없군요
    7분정도 소요됐습니다
    파이썬은 들여쓰기가 중요한데 들여쓰기가 깨져서 . 을 넣었습니다.

    reply edit

  • kering kering

    다시보니 그냥 loop를 돌리는게 낫군요
    뻘짓한듯....

    reply edit

  • matlab입니다. 8분 10초 정도

    function result=cards(numPlayers, deck)
    result=cell(1,numPlayers);
    for i=1:numPlayers
    result{i}=deck(i:numPlayers:floor(length(deck)/numPlayers)*numPlayers);
    end

    reply edit

  • 와우,, 대단하십니다. 저도 한 때 코딩을 했지만... 했다고도 할 수 없는..
    빠르고 우아하게라.. 저는 언제쯤 그 경지에? ㅠ_ㅠ

    reply edit

  • #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>

    char *deal(int player, char *deck)
    {
    char *cardList=NULL;
    int deckLength;
    int needSize;
    int pDeck, pNew;
    char first;

    int i, cnt;

    deckLength= strlen(deck);
    needSize= (player*2) + (player-1) + deckLength + 1;

    cardList= (char *) malloc(needSize);
    if(cardList==NULL) {
    fprintf(stderr, "Mem. Allocation err");
    exit(0);
    }

    pDeck= 0;
    pNew= 0;
    first= 1;
    for(cnt=0; cnt<player; cnt++) {
    if(!first) {
    cardList[pNew++]= ',';
    }
    else {
    first= 0;
    }

    cardList[pNew++]= '"';

    if(player <= deckLength) {
    for(i=pDeck; i<deckLength-(deckLength%player); i+=player) {
    cardList[pNew++]= deck[i];
    }
    pDeck++;
    }

    cardList[pNew++]= '"';
    }

    return cardList;
    }

    int main()
    {
    printf("%s\n", deal(3, "123123123"));
    printf("%s\n", deal(4, "123123123"));
    printf("%s\n", deal(1, "012345012345012345"));
    printf("%s\n", deal(6, "01234"));
    printf("%s\n", deal(2, ""));
    }

    ------------
    c언어로 작성했습니다.
    for each나 string 타입도 없고, container도 없고.... 작성하면서 조금 씁쓸하더군요...
    물론 알고리즘도 대충... 시간 맞춰보겠다고... 이해하는데 한 3분쯤 걸리고 알고리즘 생각하는데 조금 걸리고 작성하는데 4-5분 걸렸습니다... ㅠ.ㅠ

    reply edit

  • public class Card {
    public String[] deal(int player,String cardseq){
    String temp[] = new String[player];
    for(int k=0;k<player;k++){
    temp[k]="";
    for(int i=0;i<(cardseq.length() / player);i++){
    temp[k] += cardseq.substring(k+(i*player), k+(i*player)+1);
    }
    }
    return temp;
    }
    }

    이게 맞을까요? 전 대략 10여분 걸렸습니다.

    reply edit

  • 브라더 브라더

    저는 c# 사용했어요.

    컨닝도 많이하고 하루 걸렸다는 ㅜ_ㅜ

    static void Main(string[] args)
    {
    Test(Deal(6, "012345012345012345"), new string[] { "000", "111", "222", "333", "444", "555" });
    Test(Deal(4, "111122223333"), new string[] { "123", "123", "123", "123" });
    Test(Deal(4, "123123123"), new string[] { "12", "23", "31", "12" });
    Test(Deal(1, "012345012345012345"), new string[] { "012345012345012345" });
    Test(Deal(6, "01234"), new string[] { "", "", "", "", "", "" });
    Test(Deal(2, ""), new string[] { "", "" });
    }

    private static void Test(string[] Answer, string[] correctAnswer)
    {
    bool result = true;

    for (int i = 0; i < correctAnswer.Length; i++)
    {
    if (Answer[i] != correctAnswer[i])
    {
    result = false;
    break;
    }
    }

    Console.WriteLine(result);
    }

    private static string[] Deal(int numPlayers, string deck)
    {
    string[] resultArray = new string[numPlayers];

    for (int i = 0; i < numPlayers; i++)
    {
    resultArray[i] = "";
    }

    int len = deck.Length - deck.Length % numPlayers;
    for (int i = 0; i < len; i++)
    {
    resultArray[i % numPlayers] += deck.ToCharArray()[i];
    }

    return resultArray;
    }

    reply edit

  • 온새미로 온새미로

    class Cards:
    ....def __init__(self, player, seq):
    ........self.player = player
    ........self.seq = list(seq)
    ........self.result = []

    ....def deal(self):
    ........for player in range(self.player):
    ............self.result.append("")

    ........for round in range((len(self.seq)/self.player)):
    ............for player in range(self.player):
    ................self.result[player] += self.seq.pop(0)

    ........return self.result

    if __name__ == "__main__":
    ....print Cards(3, "123123123").deal()
    ....print Cards(4, "123123123").deal()
    ....print Cards(6, "012345012345012345").deal()
    ....print Cards(4, "111122223333").deal()
    ....print Cards(1, "012345012345012345").deal()
    ....print Cards(6, "01234").deal()
    ....print Cards(2, "").deal()


    저도 Python으로 작성해 보았습니다.
    Python은 들여쓰기가 중요하므로, 탭 대신 ....로 치환하였습니다.
    소요시간은 약 8분 정도입니다.

    reply edit

  • public class Cards {
    public String[] deal(int numPlayers, String deck){
    deck.length();
    int splicNum = deck.length()/numPlayers;
    int bunNum = splicNum*numPlayers;

    String cards[] = new String[bunNum];

    if(splicNum > 0){
    for(int i=0;i < cards.length;i++){
    cards[i]="";
    }
    String slicString = deck.substring(0,bunNum);

    int g=0;
    for(int i=0;i<bunNum;i++){
    String tmpString = slicString.substring(i,i+1);

    cards[g] = cards[g]+tmpString;
    g++;
    if(g==numPlayers){
    g=0;
    }
    }
    }
    return cards;
    }
    }

    생각나는대로 짠 12 분이요 ㅎㅎ ... ㅠㅠ
    Java요~

    reply edit

  • joe joe

    function deal(num , deck) {
    var arr = deck.split("");
    var newArr = [];
    for(var i = 0; i < num; i++) {
    newArr[i] = "";
    }

    while(arr.length >= num) {
    for(var i = 0; i < num; i++) {
    newArr[i] += arr.shift();
    }
    }

    return newArr;
    }

    자바스크립트로 짜봤습니다.10분정도 걸렸네요.

    reply edit

  • def deal(no, seq)
    seq = seq[0...(seq.size/no)*no]
    (0...no).map{|t|
    seq.split(Regexp.new('(\d{'+no.to_s+'})')).map{|i| i if !i.empty?}.compact.map{|f| f[t].chr.to_s if !f[t].nil?}.join
    }
    end

    def test(num, str, expect)
    if deal(num, str) != expect
    puts "no!"
    puts "expects: " + expect.map{|i| "'#{i}'"}.join(',')
    else
    puts "pass: #{num} - '#{str}'"
    end
    end


    test(6, "012345012345012345", ["000", "111", "222", "333", "444", "555" ])
    test(4, "111122223333", ["123", "123", "123", "123" ])
    test(1, "012345012345012345", ["012345012345012345" ])
    test(6, "01234", ["", "", "", "", "", "" ])
    test(2, "", ["", "" ])

    저도 한 10분 정도.. 걸렸네요.. ㅡㅜ
    근데.. 함수로 빼고 다시 합치다 보니..
    이거 좀.. 난잡하군요

    def deal(no, seq)
    (0...no).map{|t| seq[0...(seq.size/no)*no].scan(Regexp.new('\d{'+no.to_s+'}')).map{|f| f[t].chr.to_s}.join }
    end

    집에서 좀 수정을 ㅎㅎ

    reply edit

  • 오래된 포스트 같아 보이지만 Perl 코드가 없어 남겨봅니다.

    use Data::Dumper;

    sub distribute($$) {
    my ($n, $s) = @_;
    --$n;
    [map {
    my $t = $n - $_;
    join '', ($s =~ /.{$_}(.).{$t}/g);
    } 0 .. $n];
    }

    print Dumper(distribute(3, '123123123'));
    print Dumper(distribute(4, '123123123'));
    print Dumper(distribute(6, '012345012345012345'));
    print Dumper(distribute(4, '111122223333'));
    print Dumper(distribute(1, '012345012345012345'));
    print Dumper(distribute(6, '01234'));
    print Dumper(distribute(2, ''));

    reply edit

  • 주어진 조건만 testCase 에 넣고 java 로 작성했습니다. 역시 루저입니다.

    public String[] deal (int numPlayers, String deck) {

    String[] playerCards = new String[numPlayers];
    char[] cards = deck.toCharArray();

    int innerLoop = cards.length / numPlayers;
    for (int i = 0; i < numPlayers; i++) {
    playerCards[i] = "";
    for (int j = 0; j < innerLoop; j++) {
    playerCards[i] += cards[i + (j * numPlayers)];
    }
    }

    return playerCards;
    }


    ....test

    assertArrayEquals(new String[]{"", "", "", "", "", ""}, card.deal(6, "01234"));
    assertArrayEquals(new String[]{"", ""}, card.deal(2, ""));
    assertArrayEquals(new String[]{"111","222","333"}, card.deal(3, "123123123"));
    assertArrayEquals(new String[]{"12","23","31","12"}, card.deal(4, "123123123"));
    assertArrayEquals(new String[]{"000", "111", "222", "333", "444", "555"}, card.deal(6, "012345012345012345"));
    assertArrayEquals(new String[]{"123", "123", "123", "123"}, card.deal(4, "111122223333"));
    assertArrayEquals(new String[]{"012345012345012345"}, card.deal(1, "012345012345012345"));

    reply edit

  • public function deal($numPlayers, $deck = '')
    {
    $numTotalCards = strlen($deck);
    $numPlayerCards = intval($numTotalCards / $numPlayers);

    $result = array();
    for ( $i = 0 ; $i < $numPlayers ; $i++ )
    array_push($result, '');

    for ( $c = 0 ; $c < $numPlayerCards ; $c++ )
    {
    for ( $p = 0 ; $p < $numPlayers ; $p++ )
    {
    $result[$p] .= substr($deck, $c * $numPlayers + $p, 1);
    }
    }

    print_r($result);
    }


    15분 PHP 루저요~

    reply edit

  • 이보빈 이보빈

    import java.io.*;
    import java.util.Random;
    import java.util.Scanner;

    public class C{
    public static void main(String[] args){
    Scanner in = new Scanner(System.in);
    Cards card = new Cards();

    String[] result = card.deal(in.nextInt(), in.nextLine().replaceAll("\"", "").trim());

    System.out.print("Returns: {");
    for(int i=0; i<result.length; i++){
    if(i < result.length-1)
    System.out.print(result[i] + ", ");
    else
    System.out.print(result[i]);
    }
    System.out.println("}");
    }
    }

    class Cards{
    public String[] deal(int numPlayer, String deck){
    int count = 0;

    boolean check = ((count = deck.length() / numPlayer) == 0);
    StringBuffer[] numPlayers = new StringBuffer[numPlayer];
    StringBuffer sbDeck = new StringBuffer(deck);

    for(int i=0; i<numPlayers.length; i++)
    numPlayers[i] = new StringBuffer("");
    if(!check){
    for(int i=0; i<numPlayer; i++){
    for(int j=0; j<count; j++){
    int index = (int) (Math.random() * sbDeck.length());
    char ch = sbDeck.charAt(index);
    sbDeck.deleteCharAt(index);
    numPlayers[i].append(ch);
    }
    }
    }
    String res[] = new String[numPlayer];
    for(int i=0; i<numPlayers.length; i++){
    numPlayers[i].append("\"");
    numPlayers[i].insert(0, "\"");
    res[i] = numPlayers[i].toString();
    }
    return res;
    }
    }

    10분 넘었지만 올려봅니다 ㅠㅠ 최선을 다했음..

    reply edit

  • perl 코드에요


    sub deal{
    my ( $player, $sequence) = @_;
    my ( $length, $c, @card_result );

    $length = length $_[1];# =~ s/(\\d)//g;

    $c = ($length/$player);

    for ( 1 .. $c ){
    for( 1 .. $player ){
    $sequence =~ s/(\\d)//;
    $card_result[$_-1] .= $1;
    }
    }

    say \"@card_result\";
    }

    deal(3,\'123123123\');
    deal(4,\'123123123\');
    deal(6,\'012345012345012345\');
    deal(6,\'01234\');

    10분정도 걸렸네요

    reply edit

  • Len0k Len0k

    #!/usr/bin/perl

    use strict;
    use warnings;

    perl 코드 - 10분 조금 넘었네요ㅜ.ㅜ

    package Cards;

    sub new{ return bless {}, shift; }

    sub deal{
    my ($self, $num, $deck) = @_;
    my @person;

    foreach ( 0 .. length($deck) ){
    $person[$_ % $num] .= substr($deck, $_, 1);
    }

    return \"@person\";
    }

    package main;

    my @ex;

    $ex[$_] = Cards->new foreach 0 .. 4;
    print $ex[0]->deal(6, \"012345012345012345\").\"\\n\";
    print $ex[1]->deal(4, \"111122223333\").\"\\n\";
    print $ex[2]->deal(6, \"01234\").\"\\n\";
    print $ex[3]->deal(2, \"\");

    reply edit

  • Len0k Len0k

    perl 코드 - 10분 조금 넘었네요

    #!/usr/bin/perl

    use strict;
    use warnings;

    package Cards;

    sub new{ return bless {}, shift; }

    sub deal{
    my ($self, $num, $deck) = @_;
    my @person;

    foreach ( 0 .. length($deck) ){
    $person[$_ % $num] .= substr($deck, $_, 1);
    }

    return "@person";
    }

    package main;

    my @ex;

    $ex[$_] = Cards->new foreach 0 .. 4;
    print $ex[0]->deal(6, "012345012345012345")."\n";
    print $ex[1]->deal(4, "111122223333")."\n";
    print $ex[2]->deal(6, "01234")."\n";
    print $ex[3]->deal(2, "");

    reply edit

  • enshahar enshahar

    스칼라..

    def dist(n:Int, s:String):List[String] = s.take((s.length/n)*n).sliding(n,n).toList.transpose

    reply edit

  • PRIVATE PRIVATE

    # in Python

    def deal(x, y):
    z = [''] * x
    for i, q in enumerate(y[:(len(y)//x)*x]):
    z[i % x] += q
    return z


    분배 방식을 이해하는데만 10분 중 대부분을 사용했네요..

    요즘 무력감에 찌든거 같았는데 오랜만에 재밋는 글이여서 신이났네요.

    reply edit

  • ㅇㅇ ㅇㅇ

    def deal(x, y):
    n = len(y) // x
    return [\\\\\\\'\\\\\\\'.join(y[i + j] for j in range(0, n * x, n)) for i in range(x)]

    한글

    reply edit

Your Reaction Time!

captcha

avatar