!7 p { //mechPlay(); for (S listName : mechListsPlusNumber("heise.de 2018/04/20 (raw) | Similar lines")) { L items = mechList(listName); S prefix = commonPrefixCI(items); if (nempty(prefix)) mechListAppend(listName + " | Theories", "All lines start with " + quote(prefix)); S suffix = commonSuffixCI(items); if (nempty(suffix)) mechListAppend(listName + " | Theories", "All lines end with " + quote(suffix)); S chars = joinChars(sorted(commonCharactersInStrings(allToUpper(items)))); if (nempty(chars)) mechListAppend(listName + " | Theories", "All lines contain the characters " + quote(chars) + " (possibly not in order)"); chars = sortedString(joinChars(charactersAppearingExactlyOnceInEachString(allToUpper(items)))); if (nempty(chars)) mechListAppend(listName + " | Theories", "All lines contain the characters " + quote(chars) + " exactly once (possibly not in order)"); } }