insert before and after strings into specified string at some positions
package main
import (
"sort"
)
func substitute(text, before, after string, positions [][]int) string {
// flatten
flatten_positions := make([]int, 2*len(positions))
for i, pos := range positions {
flatten_positions[2*i] = pos[0]
flatten_positions[2*i+1] = pos[1]
}
sort.Ints(flatten_positions)
var count int
var buffer []rune
for pos, char := range []rune(text) {
if pos <= flatten_positions[len(flatten_positions)-1] && pos == flatten_positions[count] {
if count%2 == 0 {
buffer = append(buffer, []rune(before)...)
} else {
buffer = append(buffer, []rune(after)...)
}
count++
}
buffer = append(buffer, char)
}
return string(buffer)
}
func main() {
text := "Школы и ТЦ эвакуируют в крупных городах России из-за анонимных звонков"
want := "Школы и <b>ТЦ</b> эвакуируют в крупных городах <b>России</b> из-за анонимных звонков"
processed := substitute(text, "<b>", "</b>", [][]int{{40, 46}, {8, 10}})
if want == processed {
print("OK\n")
} else {
print("Fail\n")
}
print(processed + "\n")
}