ナベアツ算2号
「ナベアツ算の下書き。 - uokumuraの日記」からはだいぶ様変わりしましたが、とりあえず
200.まで { 3.の倍数.と(3.のつく数字).のとき(アホに) 5.の倍数.のとき(ナルシストに) 8.の倍数.のとき(人を捜してる感じに) }.なります()
ができるようになったので、doukaku.orgに上げました。mixinを使うと「get2バイト文字」をプロパティとして認識してくれるようです。…怪しげな挙動を。
で、どう書く.orgにあげたやつだと上のコードが最後に書かれててインパクトがいまいちなので、さらに手を入れました。
Integer.metaClass.mixin(IntegerExpand) ArrayList.metaClass.mixin(ArrayListExpand) 200.まで { 3.の倍数.と(3.のつく数字).のとき(アホに) 5.の倍数.のとき(ナルシストに) 8.の倍数.のとき(人を捜してる感じに) }.なります() class IntegerExpand { static range def getの倍数() { return range.findAll{it % (this as Integer) == 0} } def getのつく数字() { range.findAll{"$it" =~ "${this as Integer}"} } public String stringValue() { this as String} def まで(cls) { range = (1..(this as Integer) as ArrayList) [ アホに: {"${delegate.old}っ"}, ナルシストに: {"${delegate.old}…oh!"}, 人を捜してる感じに: {"${delegate.old}〜〜?"} ].with(cls) return range } } class ArrayListExpand { def と = {list->new ArrayList(new TreeSet(delegate + list))} def のとき = {cls-> delegate.each{ def old = it.stringValue() it.metaClass.getOld = {old} it.metaClass.stringValue = cls } } def なります = {-> delegate.each {println it.stringValue()} } }
staticフィールドを使ってるのもちょっと…なんでもう少し手を加えたいところですが、こんなのにあんまり凝っててもしゃーないですね^^;
しかし手を入れれば入れるほど仕事コードと逆にトリッキーになって、Golfと逆に長くなってくのがちょっと面白いなぁ。