1// compile 2 3// Copyright 2022 The Go Authors. All rights reserved. 4// Use of this source code is governed by a BSD-style 5// license that can be found in the LICENSE file. 6 7package p 8 9func fn(setText []rune, negate bool) int { 10 ranges := []singleRange{} 11 12 if len(setText) > 0 { 13 fillFirst := false 14 l := len(setText) 15 if negate { 16 if setText[0] == 0 { 17 setText = setText[1:] 18 } else { 19 l++ 20 fillFirst = true 21 } 22 } 23 24 if l%2 == 0 { 25 ranges = make([]singleRange, l/2) 26 } else { 27 ranges = make([]singleRange, l/2+1) 28 } 29 30 first := true 31 if fillFirst { 32 ranges[0] = singleRange{first: 0} 33 first = false 34 } 35 36 i := 0 37 for _, r := range setText { 38 if first { 39 // lower bound in a new range 40 ranges[i] = singleRange{first: r} 41 first = false 42 } else { 43 ranges[i].last = r - 1 44 i++ 45 first = true 46 } 47 } 48 } 49 50 return len(ranges) 51} 52 53type singleRange struct { 54 first rune 55 last rune 56} 57