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 &]