func Find(source string, targets []string) []string {
	return find(source, targets, noopTransformer)
}
Find will return a list of strings in targets that fuzzy matches source.
package fuzzy
import (
	"bytes"
	"unicode"
	"unicode/utf8"
	"golang.org/x/text/runes"
	"golang.org/x/text/transform"
	"golang.org/x/text/unicode/norm"
)
var foldTransformer = unicodeFoldTransformer{}
var noopTransformer = transform.Nop
var normalizeTransformer = transform.Chain(norm.NFD, runes.Remove(runes.In(unicode.Mn)), norm.NFC)
var normalizeFoldTransformer = transform.Chain(normalizeTransformer, foldTransformer)
func Match(source, target string) bool {
	return match(source, target, noopTransformer)
}
func MatchFold(source, target string) bool {
	return match(source, target, foldTransformer)
}
func MatchNormalized(source, target string) bool {
	return match(source, target, normalizeTransformer)
}
func MatchNormalizedFold(source, target string) bool {
	return match(source, target, normalizeFoldTransformer)
}
func match(source, target string, transformer transform.Transformer) bool {
	source = stringTransform(source, transformer)
	target = stringTransform(target, transformer)
	lenDiff := len(target) - len(source)
	if lenDiff < 0 {
		return false
	}
	if lenDiff == 0 && source == target {
		return true
	}
Outer:
	for _, r1 := range source {
		for i, r2 := range target {
			if r1 == r2 {
				target = target[i+utf8.RuneLen(r2):]
				continue Outer
			}
		}
		return false
	}
	return true
}