Finds a sublist within a list, with different degrees of specificity.
L₁ - List to search
L₂ - Sublist
Ans - Initial index of sublist in L₁*
L₃ - Indices of L₁ which match the sublist*
*See individual routines for details
L, X*
*Only used for gapped sublist searching
TI-83/84/+/SE/CSE/CE
kg583
Find Exact Sublist (Permutation)
For a sublist stored in L₂, this routine will find where in L₁ the precise sublist (in order, no gaps) is found and return the initial index as Ans (0 if not found).
:For(L,1,1+dim(L₁)-dim(L₂
:L
:If min(L₂=seq(L₁(X),X,L,L-1+dim(L₂
:Return
:End
:0
Find Sublist with Gaps (Permutation w/ Gaps)
For a sublist stored in L₂, this routine will find if the ordered sublist is found, with gaps between entries allowed, in L₁ and return 1 or 0 as Ans.
:1→X
:For(L,1,dim(L₁))
:If L₁(L)=L₂(X
:X+1→X
:1
:If X>dim(L₂
:Return
:End
:0
Alternatively, a few extra lines will return the matching indices as L₃.
:1→X
:ClrList L₃
:For(L,1,dim(L₁
:If L₁(L)=L₂(X:Then
:L→L₃(X
:X+1→X
:End
:If X>dim(L₂
:Return
:End
Find Shuffled Sublist (Combination)
For a sublist stored in L₂, this routine will find where in L₁ any shuffling (without gaps) of the sublist is found and return the initial index as Ans (0 if not found).
:For(L,1,1+dim(L₁)-dim(L₂
:L
:If prod(seq(max(L₁(X)=L₂),X,L,L-1+dim(L₂
:Return
:End
:0
Find Shuffled Sublist with Gaps (Combination w/ Gaps)
For a sublist stored in L₂, this routine will find if any shuffling with gaps of the sublist is found in L₁ and return 1 or 0 as Ans.
:prod(seq(max(L₁=L₂(X)),X,1,dim(L₂
Alternatively, two extra lines will return the matching indices as L₃.
:prod(seq(max(L₁=L₂(X)),X,1,dim(L₂
:If Ans
:seq(1+sum(not(cumSum(L₁=L₂(X)))),X,1,dim(L₂→L₃
.