def powers( m ) = map( (^ m), 0.. ) def filtered( s@sh:_, ch:ct ) | sh > ch = filtered( s, ct ) filtered( sh:st, c@ch:_ ) | sh < ch = sh # filtered( st, c ) filtered( _:st, c ) = filtered( st, c ) println( filtered(powers(2), powers(3)).drop(20).take(10) )