もう3年かぁ

3年間の進歩 - uehaj's blog

過去のブログを見ていて、"10分でコーディング"という記事があったので、かつ内容を完全に忘れていたので、あらためてチャレンジ。

問題はこちら

自分もやっていたのを思い出しました。
懐かしかったのでやってみました。

def deal(member, cards) {
    def result = (0..<member).collect{""}
    if (cards.length() < member) return result
    
    int rest = cards.length() % member
    cards = cards[0..-(1+rest)]
    
    cards.eachWithIndex{c, i->result[i%member]+=c}

    return result
}


assert deal(3, "123123123") == ["111", "222", "333"]
assert deal(4, "123123123") == ["12", "23", "31", "12"]
assert deal(6, "012345012345012345") == ["000", "111", "222", "333", "444", "555"]
assert deal(4, "111122223333") == ["123", "123", "123", "123"]
assert deal(1, "012345012345012345") == ["012345012345012345"]
assert deal(6, "01234") == ["", "", "", "", "", ""]
assert deal(2, "") == ["", ""]

また10分ぎりぎり、しかもなんか身に覚えが…
悔しいのでやり直しました。

String.metaClass.toMap = {->
    def map = [:]
    delegate.eachWithIndex{e, i->map[i]=e}
    return map
}

def deal(member, cards) {
    cards[0..<(((int)cards.length() / member) * member)].toMap().inject((0..<member).collect{""}){l,k,v->l[k%member]+=v;l}
}


assert deal(3, "123123123") == ["111", "222", "333"]
assert deal(4, "123123123") == ["12", "23", "31", "12"]
assert deal(6, "012345012345012345") == ["000", "111", "222", "333", "444", "555"]
assert deal(4, "111122223333") == ["123", "123", "123", "123"]
assert deal(1, "012345012345012345") == ["012345012345012345"]
assert deal(6, "01234") == ["", "", "", "", "", ""]
assert deal(2, "") == ["", ""]

30分もかかってしまった…

追記:
今回もgroupByは思いつきもしませんでした…やっぱり進歩無かったです