// compile // Copyright 2022 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package p func fn(setText []rune, negate bool) int { ranges := []singleRange{} if len(setText) > 0 { fillFirst := false l := len(setText) if negate { if setText[0] == 0 { setText = setText[1:] } else { l++ fillFirst = true } } if l%2 == 0 { ranges = make([]singleRange, l/2) } else { ranges = make([]singleRange, l/2+1) } first := true if fillFirst { ranges[0] = singleRange{first: 0} first = false } i := 0 for _, r := range setText { if first { // lower bound in a new range ranges[i] = singleRange{first: r} first = false } else { ranges[i].last = r - 1 i++ first = true } } } return len(ranges) } type singleRange struct { first rune last rune }