もう3年かぁ
過去のブログを見ていて、"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は思いつきもしませんでした…やっぱり進歩無かったです