ナベアツ算の下書き。
doukaku.orgの書きかけ。
1つは投げたんですが、sumimさんの「風変わりな実装」(世界のナベアツに Squeak Smalltalk で挑戦する(改訂) - Smalltalkのtは小文字です)に触発されて大改訂を初めてしまいました。
Integer.metaClass.の倍数 = {->(delegate..100).step(delegate)} ArrayList.metaClass.と = {list->new ArrayList(new TreeSet(delegate + list))} Integer.metaClass.のつく数字 = {-> def target = delegate (1..100).findAll{"$it" =~ "$target"} } ArrayList.metaClass.のとき = {cls-> delegate.each{it.metaClass.toString = cls} } def アホになります = {->"${delegate}っ"} def ナルシストになります = {->"${delegate}…oh!"} def 人を捜してる感じになります = {->"${delegate}〜〜?"} 3.の倍数().と(3.のつく数字()).のとき(アホになります) 5.の倍数().のとき(ナルシストになります) 8.の倍数().のとき(人を捜してる感じになります) (1..100).each {println it.toString()}
「の倍数」「のつく数字 」はプロパティにしたいし、最後の
(1..100).each {println it.toString()}
もなんとかすれば、
100.まで { 3.の倍数.と(3.のつく数字).のとき アホになります 5.の倍数.のとき ナルシストになります 8.の倍数.のとき 人を捜してる感じになります }
てできるのになぁ。もうちょいです。
…なんで
Integer.metaClass.getの倍数 = {->…}
てやっても「の倍数」プロパティにならへんのやろ…?なんとかしたい!
追記:
思いついた!関数型風味で
100.まで ( 3.の倍数.と(3.のつく数字).のとき: アホになります, 5.の倍数.のとき: ナルシストになります, 8.の倍数.のとき: 人を捜してる感じになります )
てできるかも!
「のとき」プロパティはbooleanを返すクロージャで、
Integer.metaClass.まで {map-> (1..delegate).each{it-> print it map.each{condition, action-> if (condition) action() } println } }
て回す。どっちがきれいかなぁ…