The direct method is something like
| data result lastWasSignal | data := #( #noise1 #noise2 #noise3 #signal1 #signal1 #signal1 #signal1 #randomButInteresting #noise4 #noise5 ). lastWasSignal := false. result := data select: [ :value | | isElementAppropriate | isElementAppropriate := value = #signal1 or: [ lastWasSignal ]. lastWasSignal := value = #signal1. isElementAppropriate ]. result
This is O (n). It would be smarter to find the boundaries of a group of signals that occurs only once using binary search.
source share