Enable Javascript in your browser and then refresh this page, for a much enhanced experience.
Keywords Finder solution in Uncategorized category for Keywords Finder by capback250
# migrated from python 2.7
import re
def checkio(words, patterns):
spa = re.findall('\s+', words)
out = []
if not patterns:
return words
if len(set(words)) == 1:
return "{}".format(words)
for word in words.split():
matches = []
newWord = ''
for pattern in patterns.split():
_word = word.lower()
_pattern = pattern.lower()
if _pattern in _word:
matches.append(_pattern)
ind = 0
for p in parser(_word, matches):
if list(word)[ind:p[0]]:
newWord += str(list(word)[ind:p[0]][0])
try:
for i in range(1,100):
newWord += str(list(word)[ind:p[0]][i])
except IndexError: pass
newWord += "{}".format(''.join(list(word)[p[0]:p[1]]))
ind = p[1]
newWord += word[ind:]
out.append(''.join([_f for _f in newWord if _f]))
o = []
for i in range(len(spa)):
o.append(out[i])
o.append(spa[i])
if len(spa) < len(out):
o.append(out[-1])
return ''.join(o)
def parser(word, matches):
sort = sorted(matches, key=lambda x: word.find(x))
intervals = []
for matc in sort:
for index in [m.start() for m in re.finditer(matc, word)]:
intervals.append([index, index + len(matc)])
sortedMatch = sorted(intervals, key=lambda x: x[0])
if len(sortedMatch) > 1:
for i in range(len(sortedMatch)-1):
for j in range(i+1, len(sortedMatch)):
if sortedMatch[j][0] + 1 <= sortedMatch[i][1]:
new = [sortedMatch[i][0], max(sortedMatch[j][1], sortedMatch[i][1])]
sortedMatch[j] = [-1, -1]
sortedMatch[i] = new
return [x for x in sortedMatch if x[0] != -1 and x[1] != -1]
Feb. 2, 2016