欢迎访问yhm138的博客园博客, 你可以通过 [RSS] 的方式持续关注博客更新

MyAvatar

yhm138

HelloWorld!

Scala筛选出满足条件的Permutation


图片来自b站一个视频

丑陋无比的代码

最后判断那里,不满足条件赋空列表,
最后再判读是否size>3
这是真的丑。。。

scala版本

import util.control.Breaks._
class LocalSpark extends App{
    def test(args:Array[String]):Unit={
        List(1,2,3,4).permutations.filter(list=>list(0)!=2).map(list=>{
        var num=0;
        breakable{
            for(x<-0 to (list.size-1)){
                if (list(x)==3 &&x<3 &&list(x+1)==4) break
                if (list(x)==3 &&x>0 &&list(x-1)==4) break
                num+=1
            }
        }
        if (num<4) List() else list 

        }).filter(list=>list.size>3).foreach(println(_))
    }
}


var a = new LocalSpark();
a.test(Array(""))

mma版本

(*给大家展示优雅的mma怎么写*)allPermutation = Permutations[Range[1, 4], {4}];
invalidSegments = {{3, 4}, {4, 3}};
invalidPattern = {Alternatives @@ 
    Apply[PatternSequence[___, #1, #2, ___] &, 
     invalidSegments, {1}], ___};
validPermutation = 
 Select[DeleteCases[allPermutation, invalidPattern], #[[1]] != 2 &]

posted @ 2021-12-18 18:05  yhm138  阅读(50)  评论(0编辑  收藏  举报