(println
(map (fn[x k](let[[u i](map #(re-seq #"\w+"(apply str %))(split-at k x))](str(last u)(nth i 0))))
["abc def" "abc def" "abc abc" "ab cd ef" "ab cd" "ab!cd"]
[2 5 2 4 6 1]))
;abc def 2 ;abc ab|c def
;abc def 5 ;def abc d|ef
;abc abc 2 ;abc ab|c abc
;ab cd ef 4 ;cd ab c|d ef
;ab cd 6 ;cd ab c|d
;ab!cd 1 ;ab a|b!cd;
KHByaW50bG4KICAobWFwIChmblt4IGtdKGxldFtbdSBpXShtYXAgIyhyZS1zZXEgIyJcdysiKGFwcGx5IHN0ciAlKSkoc3BsaXQtYXQgayB4KSldKHN0cihsYXN0IHUpKG50aCBpIDApKSkpCglbImFiYyBkZWYiICJhYmMgZGVmIiAiYWJjIGFiYyIgImFiIGNkIGVmIiAiYWIgICBjZCIgImFiIWNkIl0KCVsyIDUgMiA0IDYgMV0pKSAgCjthYmMgZGVmICAgMiAgICAgICAgIDthYmMgICAgICAgYWJ8YyBkZWYKO2FiYyBkZWYgICA1ICAgICAgICAgO2RlZiAgICAgICBhYmMgZHxlZgo7YWJjIGFiYyAgIDIgICAgICAgICA7YWJjICAgICAgIGFifGMgYWJjCjthYiBjZCBlZiAgNCAgICAgICAgIDtjZCAgICAgICAgYWIgY3xkIGVmCjthYiAgIGNkICAgNiAgICAgICAgIDtjZCAgICAgICAgYWIgICBjfGQKO2FiIWNkICAgICAxICAgICAgICAgO2FiICAgICAgICBhfGIhY2Q7IA==