import Foundation // TODO: These are not used, should they be removed?? // TODO: Add other description / label for items that have same group & letter, but // different effective length. public struct EffectiveLengthGroup: Codable, Equatable, Sendable { public let group: Int public let letter: String public let effectiveLength: Int public let category: Category public var label: String { "\(group)\(letter.uppercased())" } public init( group: Int, letter: String, effectiveLength: Int, category: Category ) { self.group = group self.letter = letter self.effectiveLength = effectiveLength self.category = category } } extension EffectiveLengthGroup { public enum Category: String, Codable, Equatable, Sendable { case any case supply case `return` } } public let effectiveLengthsLookup: [String: EffectiveLengthGroup] = { [ "1a": .init(group: 1, letter: "a", effectiveLength: 35, category: .supply), "1b": .init(group: 1, letter: "b", effectiveLength: 10, category: .supply), "1c": .init(group: 1, letter: "c", effectiveLength: 35, category: .supply), "1d": .init(group: 1, letter: "d", effectiveLength: 10, category: .supply), "1e": .init(group: 1, letter: "e", effectiveLength: 10, category: .supply), "1f-0.5": .init(group: 1, letter: "f", effectiveLength: 120, category: .supply), "1f-1": .init(group: 1, letter: "f", effectiveLength: 85, category: .supply), "1g-0.5": .init(group: 1, letter: "g", effectiveLength: 35, category: .supply), "1g-1": .init(group: 1, letter: "g", effectiveLength: 25, category: .supply), "1h-0.5": .init(group: 1, letter: "h", effectiveLength: 120, category: .supply), "1h-1": .init(group: 1, letter: "h", effectiveLength: 85, category: .supply), "1i": .init(group: 1, letter: "i", effectiveLength: 20, category: .supply), "1k": .init(group: 1, letter: "k", effectiveLength: 85, category: .supply), "1l-0.25": .init(group: 1, letter: "l", effectiveLength: 40, category: .supply), "1l-0.5": .init(group: 1, letter: "l", effectiveLength: 20, category: .supply), "1l-1": .init(group: 1, letter: "l", effectiveLength: 10, category: .supply), "1m-0.05-1": .init(group: 1, letter: "m", effectiveLength: 30, category: .supply), "1m-0.05-2": .init(group: 1, letter: "m", effectiveLength: 20, category: .supply), "1m-0.25-1": .init(group: 1, letter: "m", effectiveLength: 20, category: .supply), "1m-0.25-2": .init(group: 1, letter: "m", effectiveLength: 10, category: .supply), "1m-0.5-1": .init(group: 1, letter: "m", effectiveLength: 10, category: .supply), "1m-0.5-2": .init(group: 1, letter: "m", effectiveLength: 10, category: .supply), "1n": .init(group: 1, letter: "n", effectiveLength: 15, category: .supply), "1o-0.5": .init(group: 1, letter: "o", effectiveLength: 120, category: .supply), "1o-1": .init(group: 1, letter: "o", effectiveLength: 85, category: .supply), "1p": .init(group: 1, letter: "p", effectiveLength: 20, category: .supply), "1q": .init(group: 1, letter: "q", effectiveLength: 50, category: .supply), "1r": .init(group: 1, letter: "r", effectiveLength: 120, category: .supply), "1s-0": .init(group: 1, letter: "s", effectiveLength: 60, category: .supply), "1s-1": .init(group: 1, letter: "s", effectiveLength: 40, category: .supply), "1s-2": .init(group: 1, letter: "s", effectiveLength: 30, category: .supply), "1t": .init(group: 1, letter: "t", effectiveLength: 60, category: .supply), // Group 2 "2a-0": .init(group: 2, letter: "a", effectiveLength: 35, category: .supply), "2a-1": .init(group: 2, letter: "a", effectiveLength: 45, category: .supply), "2a-2": .init(group: 2, letter: "a", effectiveLength: 55, category: .supply), "2a-3": .init(group: 2, letter: "a", effectiveLength: 65, category: .supply), "2a-4": .init(group: 2, letter: "a", effectiveLength: 70, category: .supply), "2a-5": .init(group: 2, letter: "a", effectiveLength: 80, category: .supply), "2b-0": .init(group: 2, letter: "b", effectiveLength: 20, category: .supply), "2b-1": .init(group: 2, letter: "b", effectiveLength: 30, category: .supply), "2b-2": .init(group: 2, letter: "b", effectiveLength: 35, category: .supply), "2b-3": .init(group: 2, letter: "b", effectiveLength: 40, category: .supply), "2b-4": .init(group: 2, letter: "b", effectiveLength: 45, category: .supply), "2b-5": .init(group: 2, letter: "b", effectiveLength: 50, category: .supply), "2c-0": .init(group: 2, letter: "c", effectiveLength: 65, category: .supply), "2c-1": .init(group: 2, letter: "c", effectiveLength: 65, category: .supply), "2c-2": .init(group: 2, letter: "c", effectiveLength: 65, category: .supply), "2c-3": .init(group: 2, letter: "c", effectiveLength: 65, category: .supply), "2c-4": .init(group: 2, letter: "c", effectiveLength: 70, category: .supply), "2c-5": .init(group: 2, letter: "c", effectiveLength: 80, category: .supply), "2d-0": .init(group: 2, letter: "d", effectiveLength: 40, category: .supply), "2d-1": .init(group: 2, letter: "d", effectiveLength: 50, category: .supply), "2d-2": .init(group: 2, letter: "d", effectiveLength: 60, category: .supply), "2d-3": .init(group: 2, letter: "d", effectiveLength: 65, category: .supply), "2d-4": .init(group: 2, letter: "d", effectiveLength: 75, category: .supply), "2d-5": .init(group: 2, letter: "d", effectiveLength: 85, category: .supply), "2e-0": .init(group: 2, letter: "e", effectiveLength: 25, category: .supply), "2e-1": .init(group: 2, letter: "e", effectiveLength: 30, category: .supply), "2e-2": .init(group: 2, letter: "e", effectiveLength: 35, category: .supply), "2e-3": .init(group: 2, letter: "e", effectiveLength: 40, category: .supply), "2e-4": .init(group: 2, letter: "e", effectiveLength: 45, category: .supply), "2e-5": .init(group: 2, letter: "e", effectiveLength: 50, category: .supply), "2f-0": .init(group: 2, letter: "f", effectiveLength: 20, category: .supply), "2f-1": .init(group: 2, letter: "f", effectiveLength: 20, category: .supply), "2f-2": .init(group: 2, letter: "f", effectiveLength: 20, category: .supply), "2f-3": .init(group: 2, letter: "f", effectiveLength: 20, category: .supply), "2f-4": .init(group: 2, letter: "f", effectiveLength: 25, category: .supply), "2f-5": .init(group: 2, letter: "f", effectiveLength: 25, category: .supply), "2g-0": .init(group: 2, letter: "g", effectiveLength: 65, category: .supply), "2g-1": .init(group: 2, letter: "g", effectiveLength: 65, category: .supply), "2g-2": .init(group: 2, letter: "g", effectiveLength: 65, category: .supply), "2g-3": .init(group: 2, letter: "g", effectiveLength: 70, category: .supply), "2g-4": .init(group: 2, letter: "g", effectiveLength: 80, category: .supply), "2g-5": .init(group: 2, letter: "g", effectiveLength: 90, category: .supply), "2h-0": .init(group: 2, letter: "h", effectiveLength: 70, category: .supply), "2h-1": .init(group: 2, letter: "h", effectiveLength: 70, category: .supply), "2h-2": .init(group: 2, letter: "h", effectiveLength: 70, category: .supply), "2h-3": .init(group: 2, letter: "h", effectiveLength: 75, category: .supply), "2h-4": .init(group: 2, letter: "h", effectiveLength: 85, category: .supply), "2h-5": .init(group: 2, letter: "h", effectiveLength: 95, category: .supply), "2i-0": .init(group: 2, letter: "i", effectiveLength: 65, category: .supply), "2i-1": .init(group: 2, letter: "i", effectiveLength: 75, category: .supply), "2i-2": .init(group: 2, letter: "i", effectiveLength: 85, category: .supply), "2i-3": .init(group: 2, letter: "i", effectiveLength: 95, category: .supply), "2i-4": .init(group: 2, letter: "i", effectiveLength: 100, category: .supply), "2i-5": .init(group: 2, letter: "i", effectiveLength: 110, category: .supply), "2j-0": .init(group: 2, letter: "j", effectiveLength: 50, category: .supply), "2j-1": .init(group: 2, letter: "j", effectiveLength: 60, category: .supply), "2j-2": .init(group: 2, letter: "j", effectiveLength: 65, category: .supply), "2j-3": .init(group: 2, letter: "j", effectiveLength: 70, category: .supply), "2j-4": .init(group: 2, letter: "j", effectiveLength: 75, category: .supply), "2j-5": .init(group: 2, letter: "j", effectiveLength: 80, category: .supply), "2k-0": .init(group: 2, letter: "k", effectiveLength: 50, category: .supply), "2k-1": .init(group: 2, letter: "k", effectiveLength: 60, category: .supply), "2k-2": .init(group: 2, letter: "k", effectiveLength: 65, category: .supply), "2k-3": .init(group: 2, letter: "k", effectiveLength: 70, category: .supply), "2k-4": .init(group: 2, letter: "k", effectiveLength: 75, category: .supply), "2k-5": .init(group: 2, letter: "k", effectiveLength: 80, category: .supply), "2l-0": .init(group: 2, letter: "l", effectiveLength: 70, category: .supply), "2l-1": .init(group: 2, letter: "l", effectiveLength: 80, category: .supply), "2l-2": .init(group: 2, letter: "l", effectiveLength: 90, category: .supply), "2l-3": .init(group: 2, letter: "l", effectiveLength: 95, category: .supply), "2l-4": .init(group: 2, letter: "l", effectiveLength: 105, category: .supply), "2l-5": .init(group: 2, letter: "l", effectiveLength: 115, category: .supply), "2m-0": .init(group: 2, letter: "m", effectiveLength: 70, category: .supply), "2m-1": .init(group: 2, letter: "m", effectiveLength: 80, category: .supply), "2m-2": .init(group: 2, letter: "m", effectiveLength: 90, category: .supply), "2m-3": .init(group: 2, letter: "m", effectiveLength: 95, category: .supply), "2m-4": .init(group: 2, letter: "m", effectiveLength: 105, category: .supply), "2m-5": .init(group: 2, letter: "m", effectiveLength: 115, category: .supply), "2n-0": .init(group: 2, letter: "n", effectiveLength: 35, category: .supply), "2n-1": .init(group: 2, letter: "n", effectiveLength: 35, category: .supply), "2n-2": .init(group: 2, letter: "n", effectiveLength: 40, category: .supply), "2n-3": .init(group: 2, letter: "n", effectiveLength: 40, category: .supply), "2n-4": .init(group: 2, letter: "n", effectiveLength: 40, category: .supply), "2n-5": .init(group: 2, letter: "n", effectiveLength: 40, category: .supply), "2o-0": .init(group: 2, letter: "o", effectiveLength: 55, category: .supply), "2o-1": .init(group: 2, letter: "o", effectiveLength: 65, category: .supply), "2o-2": .init(group: 2, letter: "o", effectiveLength: 75, category: .supply), "2o-3": .init(group: 2, letter: "o", effectiveLength: 85, category: .supply), "2o-4": .init(group: 2, letter: "o", effectiveLength: 90, category: .supply), "2o-5": .init(group: 2, letter: "o", effectiveLength: 100, category: .supply), "2p-0": .init(group: 2, letter: "p", effectiveLength: 50, category: .supply), "2p-1": .init(group: 2, letter: "p", effectiveLength: 55, category: .supply), "2p-2": .init(group: 2, letter: "p", effectiveLength: 60, category: .supply), "2p-3": .init(group: 2, letter: "p", effectiveLength: 65, category: .supply), "2p-4": .init(group: 2, letter: "p", effectiveLength: 70, category: .supply), "2p-5": .init(group: 2, letter: "p", effectiveLength: 75, category: .supply), "2q-0": .init(group: 2, letter: "q", effectiveLength: 10, category: .supply), "2q-1": .init(group: 2, letter: "q", effectiveLength: 10, category: .supply), "2q-2": .init(group: 2, letter: "q", effectiveLength: 15, category: .supply), "2q-3": .init(group: 2, letter: "q", effectiveLength: 20, category: .supply), "2q-4": .init(group: 2, letter: "q", effectiveLength: 20, category: .supply), "2q-5": .init(group: 2, letter: "q", effectiveLength: 25, category: .supply), // Group 3 "3a": .init(group: 3, letter: "a", effectiveLength: 15, category: .supply), "3b": .init(group: 3, letter: "b", effectiveLength: 30, category: .supply), "3c": .init(group: 3, letter: "c", effectiveLength: 20, category: .supply), "3d-f": .init(group: 3, letter: "d", effectiveLength: 35, category: .supply), "3d-t": .init(group: 3, letter: "d", effectiveLength: 55, category: .supply), "3d-m": .init(group: 3, letter: "d", effectiveLength: 110, category: .supply), "3e": .init(group: 3, letter: "e", effectiveLength: 30, category: .supply), "3f-f": .init(group: 3, letter: "f", effectiveLength: 50, category: .supply), "3f-t": .init(group: 3, letter: "f", effectiveLength: 70, category: .supply), "3f-m": .init(group: 3, letter: "f", effectiveLength: 125, category: .supply), "3g": .init(group: 3, letter: "g", effectiveLength: 35, category: .supply), "3h": .init(group: 3, letter: "h", effectiveLength: 35, category: .supply), "3i": .init(group: 3, letter: "i", effectiveLength: 15, category: .supply), "3k": .init(group: 3, letter: "k", effectiveLength: 20, category: .supply), "3l": .init(group: 3, letter: "l", effectiveLength: 30, category: .supply), "3m": .init(group: 3, letter: "m", effectiveLength: 25, category: .supply), "3n": .init(group: 3, letter: "n", effectiveLength: 40, category: .supply), "3o": .init(group: 3, letter: "o", effectiveLength: 20, category: .supply), "3p": .init(group: 3, letter: "p", effectiveLength: 50, category: .supply), "3q": .init(group: 3, letter: "q", effectiveLength: 35, category: .supply), "3r": .init(group: 3, letter: "r", effectiveLength: 20, category: .supply), "3s-f": .init(group: 3, letter: "s", effectiveLength: 15, category: .supply), "3s-t": .init(group: 3, letter: "s", effectiveLength: 35, category: .supply), "3s-m": .init(group: 3, letter: "s", effectiveLength: 90, category: .supply), "3t": .init(group: 3, letter: "t", effectiveLength: 10, category: .supply), "3u": .init(group: 3, letter: "u", effectiveLength: 80, category: .supply), "3u-v": .init(group: 3, letter: "u", effectiveLength: 10, category: .supply), "3v": .init(group: 3, letter: "v", effectiveLength: 30, category: .supply), "3w-f": .init(group: 3, letter: "w", effectiveLength: 15, category: .supply), "3w-t": .init(group: 3, letter: "w", effectiveLength: 35, category: .supply), "3w-m": .init(group: 3, letter: "w", effectiveLength: 90, category: .supply), // Group 4 "4a": .init(group: 4, letter: "a", effectiveLength: 30, category: .supply), "4b": .init(group: 4, letter: "b", effectiveLength: 35, category: .supply), "4c": .init(group: 4, letter: "c", effectiveLength: 60, category: .supply), "4d": .init(group: 4, letter: "d", effectiveLength: 55, category: .supply), "4e": .init(group: 4, letter: "e", effectiveLength: 70, category: .supply), "4f": .init(group: 4, letter: "f", effectiveLength: 45, category: .supply), "4g": .init(group: 4, letter: "g", effectiveLength: 80, category: .supply), "4h": .init(group: 4, letter: "h", effectiveLength: 50, category: .supply), "4i": .init(group: 4, letter: "i", effectiveLength: 10, category: .supply), "4j": .init(group: 4, letter: "j", effectiveLength: 30, category: .supply), "4k": .init(group: 4, letter: "k", effectiveLength: 30, category: .supply), "4l": .init(group: 4, letter: "l", effectiveLength: 30, category: .supply), "4m": .init(group: 4, letter: "m", effectiveLength: 20, category: .supply), "4n": .init(group: 4, letter: "n", effectiveLength: 45, category: .supply), "4o": .init(group: 4, letter: "o", effectiveLength: 20, category: .supply), "4p": .init(group: 4, letter: "p", effectiveLength: 10, category: .supply), "4q": .init(group: 4, letter: "q", effectiveLength: 50, category: .supply), "4r": .init(group: 4, letter: "r", effectiveLength: 20, category: .supply), "4s": .init(group: 4, letter: "s", effectiveLength: 20, category: .supply), "4t": .init(group: 4, letter: "t", effectiveLength: 20, category: .supply), "4u": .init(group: 4, letter: "u", effectiveLength: 20, category: .supply), "4v": .init(group: 4, letter: "v", effectiveLength: 60, category: .supply), "4w": .init(group: 4, letter: "w", effectiveLength: 35, category: .supply), "4x": .init(group: 4, letter: "x", effectiveLength: 35, category: .supply), "4y": .init(group: 4, letter: "y", effectiveLength: 35, category: .supply), "4z": .init(group: 4, letter: "z", effectiveLength: 60, category: .supply), "4aa": .init(group: 4, letter: "aa", effectiveLength: 35, category: .supply), "4ab": .init(group: 4, letter: "ab", effectiveLength: 90, category: .supply), "4ac": .init(group: 4, letter: "ac", effectiveLength: 100, category: .supply), "4ad": .init(group: 4, letter: "ad", effectiveLength: 60, category: .supply), "4ae": .init(group: 4, letter: "ae", effectiveLength: 55, category: .supply), "4af": .init(group: 4, letter: "af", effectiveLength: 50, category: .supply), "4ag": .init(group: 4, letter: "ag", effectiveLength: 60, category: .supply), "4ah": .init(group: 4, letter: "ah", effectiveLength: 60, category: .supply), "4ai": .init(group: 4, letter: "ai", effectiveLength: 20, category: .supply), "4aj": .init(group: 4, letter: "aj", effectiveLength: 25, category: .supply), "4ak": .init(group: 4, letter: "ak", effectiveLength: 55, category: .supply), "4al": .init(group: 4, letter: "al", effectiveLength: 70, category: .supply), "4am": .init(group: 4, letter: "am", effectiveLength: 70, category: .supply), "4an": .init(group: 4, letter: "an", effectiveLength: 70, category: .supply), "4ao": .init(group: 4, letter: "ao", effectiveLength: 40, category: .supply), "4ap": .init(group: 4, letter: "ap", effectiveLength: 40, category: .supply), "4aq": .init(group: 4, letter: "aq", effectiveLength: 10, category: .supply), "4ar": .init(group: 4, letter: "ar", effectiveLength: 70, category: .supply), // Group 5 "5a": .init(group: 5, letter: "a", effectiveLength: 40, category: .return), "5b": .init(group: 5, letter: "b", effectiveLength: 40, category: .return), "5c": .init(group: 5, letter: "c", effectiveLength: 40, category: .return), "5d": .init(group: 5, letter: "d", effectiveLength: 40, category: .return), "5e-1": .init(group: 5, letter: "e", effectiveLength: 10, category: .return), "5e-2": .init(group: 5, letter: "e", effectiveLength: 35, category: .return), "5f-1": .init(group: 5, letter: "f", effectiveLength: 45, category: .return), "5f-2": .init(group: 5, letter: "f", effectiveLength: 70, category: .return), "5g-1": .init(group: 5, letter: "g", effectiveLength: 45, category: .return), "5g-2": .init(group: 5, letter: "g", effectiveLength: 70, category: .return), "5h-1": .init(group: 5, letter: "h", effectiveLength: 45, category: .return), "5h-2": .init(group: 5, letter: "h", effectiveLength: 30, category: .return), "5i-1": .init(group: 5, letter: "i", effectiveLength: 45, category: .return), "5i-2": .init(group: 5, letter: "i", effectiveLength: 30, category: .return), "5j-0.25": .init(group: 5, letter: "j", effectiveLength: 20, category: .return), "5j-0.5": .init(group: 5, letter: "j", effectiveLength: 15, category: .return), "5j-1": .init(group: 5, letter: "j", effectiveLength: 10, category: .return), "5k": .init(group: 5, letter: "k", effectiveLength: 10, category: .return), "5l": .init(group: 5, letter: "l", effectiveLength: 75, category: .return), "5m": .init(group: 5, letter: "m", effectiveLength: 10, category: .return), "5n": .init(group: 5, letter: "n", effectiveLength: 55, category: .return), "5o": .init(group: 5, letter: "o", effectiveLength: 35, category: .return), // Group 6 "6a-0.4-b": .init(group: 6, letter: "a", effectiveLength: 10, category: .return), "6a-0.4-t": .init(group: 6, letter: "a", effectiveLength: 10, category: .return), "6a-0.5-b": .init(group: 6, letter: "a", effectiveLength: 25, category: .return), "6a-0.5-t": .init(group: 6, letter: "a", effectiveLength: 25, category: .return), "6a-0.6-b": .init(group: 6, letter: "a", effectiveLength: 40, category: .return), "6a-0.6-t": .init(group: 6, letter: "a", effectiveLength: 25, category: .return), "6a-0.7-b": .init(group: 6, letter: "a", effectiveLength: 60, category: .return), "6a-0.7-t": .init(group: 6, letter: "a", effectiveLength: 25, category: .return), "6a-0.8-b": .init(group: 6, letter: "a", effectiveLength: 75, category: .return), "6a-0.8-t": .init(group: 6, letter: "a", effectiveLength: 25, category: .return), "6a-1-b": .init(group: 6, letter: "a", effectiveLength: 75, category: .return), "6b-0.4-b": .init(group: 6, letter: "b", effectiveLength: 10, category: .return), "6b-0.4-t": .init(group: 6, letter: "b", effectiveLength: 10, category: .return), "6b-0.5-b": .init(group: 6, letter: "b", effectiveLength: 40, category: .return), "6b-0.5-t": .init(group: 6, letter: "b", effectiveLength: 25, category: .return), "6b-0.6-b": .init(group: 6, letter: "b", effectiveLength: 40, category: .return), "6b-0.6-t": .init(group: 6, letter: "b", effectiveLength: 25, category: .return), "6b-0.7-b": .init(group: 6, letter: "b", effectiveLength: 75, category: .return), "6b-0.7-t": .init(group: 6, letter: "b", effectiveLength: 25, category: .return), "6b-0.8-b": .init(group: 6, letter: "b", effectiveLength: 110, category: .return), "6b-0.8-t": .init(group: 6, letter: "b", effectiveLength: 25, category: .return), "6b-1-b": .init(group: 6, letter: "b", effectiveLength: 110, category: .return), "6c-0.4-b": .init(group: 6, letter: "c", effectiveLength: 10, category: .return), "6c-0.4-t": .init(group: 6, letter: "c", effectiveLength: 10, category: .return), "6c-0.5-b": .init(group: 6, letter: "c", effectiveLength: 30, category: .return), "6c-0.5-t": .init(group: 6, letter: "c", effectiveLength: 25, category: .return), "6c-0.6-b": .init(group: 6, letter: "c", effectiveLength: 50, category: .return), "6c-0.6-t": .init(group: 6, letter: "c", effectiveLength: 25, category: .return), "6c-0.7-b": .init(group: 6, letter: "c", effectiveLength: 75, category: .return), "6c-0.7-t": .init(group: 6, letter: "c", effectiveLength: 25, category: .return), "6c-0.8-b": .init(group: 6, letter: "c", effectiveLength: 115, category: .return), "6c-0.8-t": .init(group: 6, letter: "c", effectiveLength: 25, category: .return), "6c-1-b": .init(group: 6, letter: "c", effectiveLength: 115, category: .return), "6d-0.1-b": .init(group: 6, letter: "d", effectiveLength: 10, category: .return), "6d-0.1-t": .init(group: 6, letter: "d", effectiveLength: 5, category: .return), "6d-0.2-b": .init(group: 6, letter: "d", effectiveLength: 15, category: .return), "6d-0.2-t": .init(group: 6, letter: "d", effectiveLength: 5, category: .return), "6d-0.3-b": .init(group: 6, letter: "d", effectiveLength: 20, category: .return), "6d-0.3-t": .init(group: 6, letter: "d", effectiveLength: 5, category: .return), "6d-0.4-b": .init(group: 6, letter: "d", effectiveLength: 30, category: .return), "6d-0.4-t": .init(group: 6, letter: "d", effectiveLength: 5, category: .return), "6d-0.6-b": .init(group: 6, letter: "d", effectiveLength: 30, category: .return), "6d-0.6-t": .init(group: 6, letter: "d", effectiveLength: 5, category: .return), "6d-0.8-b": .init(group: 6, letter: "d", effectiveLength: 30, category: .return), "6d-0.8-t": .init(group: 6, letter: "d", effectiveLength: 5, category: .return), "6d-1-b": .init(group: 6, letter: "d", effectiveLength: 30, category: .return), "6e-0.1-b": .init(group: 6, letter: "e", effectiveLength: 15, category: .return), "6e-0.1-t": .init(group: 6, letter: "e", effectiveLength: 10, category: .return), "6e-0.2-b": .init(group: 6, letter: "e", effectiveLength: 30, category: .return), "6e-0.2-t": .init(group: 6, letter: "e", effectiveLength: 10, category: .return), "6e-0.3-b": .init(group: 6, letter: "e", effectiveLength: 40, category: .return), "6e-0.3-t": .init(group: 6, letter: "e", effectiveLength: 10, category: .return), "6e-0.4-b": .init(group: 6, letter: "e", effectiveLength: 40, category: .return), "6e-0.4-t": .init(group: 6, letter: "e", effectiveLength: 10, category: .return), "6e-0.6-b": .init(group: 6, letter: "e", effectiveLength: 40, category: .return), "6e-0.6-t": .init(group: 6, letter: "e", effectiveLength: 25, category: .return), "6e-0.8-b": .init(group: 6, letter: "e", effectiveLength: 40, category: .return), "6e-0.8-t": .init(group: 6, letter: "e", effectiveLength: 25, category: .return), "6e-1-b": .init(group: 6, letter: "e", effectiveLength: 40, category: .return), "6f": .init(group: 6, letter: "f", effectiveLength: 25, category: .return), "6g": .init(group: 6, letter: "g", effectiveLength: 30, category: .return), "6h": .init(group: 6, letter: "h", effectiveLength: 15, category: .return), "6i": .init(group: 6, letter: "i", effectiveLength: 30, category: .return), "6j": .init(group: 6, letter: "j", effectiveLength: 55, category: .return), "6k": .init(group: 6, letter: "k", effectiveLength: 10, category: .return), "6l": .init(group: 6, letter: "l", effectiveLength: 20, category: .return), "6m": .init(group: 6, letter: "m", effectiveLength: 20, category: .return), "6n": .init(group: 6, letter: "n", effectiveLength: 10, category: .return), "6o": .init(group: 6, letter: "o", effectiveLength: 10, category: .return), "6p": .init(group: 6, letter: "p", effectiveLength: 5, category: .return), // Group 7 "7a": .init(group: 7, letter: "a", effectiveLength: 25, category: .return), "7b-100": .init(group: 7, letter: "b", effectiveLength: 10, category: .return), "7b-150": .init(group: 7, letter: "b", effectiveLength: 15, category: .return), "7b-200": .init(group: 7, letter: "b", effectiveLength: 25, category: .return), "7c-100": .init(group: 7, letter: "c", effectiveLength: 10, category: .return), "7c-200": .init(group: 7, letter: "c", effectiveLength: 30, category: .return), "7c-300": .init(group: 7, letter: "c", effectiveLength: 60, category: .return), "7c-400": .init(group: 7, letter: "c", effectiveLength: 110, category: .return), "7d-100": .init(group: 7, letter: "d", effectiveLength: 20, category: .return), "7d-150": .init(group: 7, letter: "d", effectiveLength: 50, category: .return), "7d-200": .init(group: 7, letter: "d", effectiveLength: 90, category: .return), "7e-200": .init(group: 7, letter: "e", effectiveLength: 10, category: .return), "7e-400": .init(group: 7, letter: "e", effectiveLength: 30, category: .return), "7e-600": .init(group: 7, letter: "e", effectiveLength: 60, category: .return), "7e-800": .init(group: 7, letter: "e", effectiveLength: 110, category: .return), // Group 8 "8a-0-s": .init(group: 8, letter: "a", effectiveLength: 75, category: .any), "8a-0.75-s": .init(group: 8, letter: "a", effectiveLength: 20, category: .any), "8a-0.75-3": .init(group: 8, letter: "a", effectiveLength: 35, category: .any), "8a-0.75-5": .init(group: 8, letter: "a", effectiveLength: 30, category: .any), "8a-1-s": .init(group: 8, letter: "a", effectiveLength: 15, category: .any), "8a-1-3": .init(group: 8, letter: "a", effectiveLength: 20, category: .any), "8a-1-5": .init(group: 8, letter: "a", effectiveLength: 25, category: .any), "8a-1.5-s": .init(group: 8, letter: "a", effectiveLength: 10, category: .any), "8a-1.5-3": .init(group: 8, letter: "a", effectiveLength: 15, category: .any), "8a-1.5-5": .init(group: 8, letter: "a", effectiveLength: 20, category: .any), "8a-oe-4": .init(group: 8, letter: "a", effectiveLength: 25, category: .any), "8a-oh-4": .init(group: 8, letter: "a", effectiveLength: 30, category: .any), "8a-oe-3": .init(group: 8, letter: "a", effectiveLength: 30, category: .any), "8a-oh-3": .init(group: 8, letter: "a", effectiveLength: 35, category: .any), "8a-45-3": .init(group: 8, letter: "a", effectiveLength: 10, category: .any), "8a-45-2": .init(group: 8, letter: "a", effectiveLength: 15, category: .any), "8b-0-h": .init(group: 8, letter: "b", effectiveLength: 90, category: .any), "8b-0.25-h": .init(group: 8, letter: "b", effectiveLength: 35, category: .any), "8b-0.5-h": .init(group: 8, letter: "b", effectiveLength: 20, category: .any), "8b-0-1": .init(group: 8, letter: "b", effectiveLength: 75, category: .any), "8b-0.25-1": .init(group: 8, letter: "b", effectiveLength: 30, category: .any), "8b-0.5-1": .init(group: 8, letter: "b", effectiveLength: 15, category: .any), "8b-0-e": .init(group: 8, letter: "b", effectiveLength: 65, category: .any), "8b-0.25-e": .init(group: 8, letter: "b", effectiveLength: 25, category: .any), "8b-0.5-e": .init(group: 8, letter: "b", effectiveLength: 10, category: .any), "8c-0-h": .init(group: 8, letter: "c", effectiveLength: 30, category: .any), "8c-0.25-h": .init(group: 8, letter: "c", effectiveLength: 10, category: .any), "8c-0.5-h": .init(group: 8, letter: "c", effectiveLength: 5, category: .any), "8c-0-1": .init(group: 8, letter: "c", effectiveLength: 25, category: .any), "8c-0.25-1": .init(group: 8, letter: "c", effectiveLength: 10, category: .any), "8c-0.5-1": .init(group: 8, letter: "c", effectiveLength: 5, category: .any), "8c-0-e": .init(group: 8, letter: "c", effectiveLength: 40, category: .any), "8c-0.25-e": .init(group: 8, letter: "c", effectiveLength: 10, category: .any), "8c-0.5-e": .init(group: 8, letter: "c", effectiveLength: 5, category: .any), "8d-h": .init(group: 8, letter: "d", effectiveLength: 80, category: .any), "8d-1": .init(group: 8, letter: "d", effectiveLength: 80, category: .any), "8d-e": .init(group: 8, letter: "d", effectiveLength: 65, category: .any), "8e-h": .init(group: 8, letter: "e", effectiveLength: 10, category: .any), "8e-1": .init(group: 8, letter: "e", effectiveLength: 10, category: .any), "8e-e": .init(group: 8, letter: "e", effectiveLength: 10, category: .any), "8f-1": .init(group: 8, letter: "f", effectiveLength: 160, category: .any), "8f-2": .init(group: 8, letter: "f", effectiveLength: 260, category: .any), "8f-4": .init(group: 8, letter: "f", effectiveLength: 190, category: .any), "8g": .init(group: 8, letter: "g", effectiveLength: 200, category: .any), "8h-0.5": .init(group: 8, letter: "h", effectiveLength: 55, category: .any), "8h-1": .init(group: 8, letter: "h", effectiveLength: 330, category: .any), "8h-1.5": .init(group: 8, letter: "h", effectiveLength: 430, category: .any), "8h-2": .init(group: 8, letter: "h", effectiveLength: 470, category: .any), "8h-1-v": .init(group: 8, letter: "h", effectiveLength: 55, category: .any), "8h-1.5-v": .init(group: 8, letter: "h", effectiveLength: 55, category: .any), "8h-2-v": .init(group: 8, letter: "h", effectiveLength: 55, category: .any), "8i": .init(group: 8, letter: "i", effectiveLength: 20, category: .any), "8j": .init(group: 8, letter: "j", effectiveLength: 20, category: .any), "8k-0.25": .init(group: 8, letter: "k", effectiveLength: 100, category: .any), "8k-0.5": .init(group: 8, letter: "k", effectiveLength: 20, category: .any), "8k-1": .init(group: 8, letter: "k", effectiveLength: 20, category: .any), // NOTE: 8L and 8M use multipliers, make user supply them. "8n": .init(group: 8, letter: "n", effectiveLength: 10, category: .any), "8o-0": .init(group: 8, letter: "o", effectiveLength: 235, category: .any), "8o-0.25": .init(group: 8, letter: "o", effectiveLength: 90, category: .any), "8o-0.5": .init(group: 8, letter: "o", effectiveLength: 45, category: .any), "8p-10-m": .init(group: 8, letter: "p", effectiveLength: 75, category: .any), "8p-10-r": .init(group: 8, letter: "p", effectiveLength: 60, category: .any), "8p-12-m": .init(group: 8, letter: "p", effectiveLength: 90, category: .any), "8p-12-r": .init(group: 8, letter: "p", effectiveLength: 75, category: .any), "8p-14-m": .init(group: 8, letter: "p", effectiveLength: 90, category: .any), "8p-14-r": .init(group: 8, letter: "p", effectiveLength: 75, category: .any), // Group 9 "9a-b": .init(group: 9, letter: "a", effectiveLength: 80, category: .supply), "9a-m": .init(group: 9, letter: "a", effectiveLength: 5, category: .supply), "9b-b": .init(group: 9, letter: "b", effectiveLength: 80, category: .supply), "9b-m": .init(group: 9, letter: "b", effectiveLength: 5, category: .supply), "9c-b": .init(group: 9, letter: "c", effectiveLength: 80, category: .supply), "9c-m": .init(group: 9, letter: "c", effectiveLength: 5, category: .supply), "9d-b": .init(group: 9, letter: "d", effectiveLength: 75, category: .supply), "9d-m": .init(group: 9, letter: "d", effectiveLength: 5, category: .supply), "9e-b": .init(group: 9, letter: "e", effectiveLength: 50, category: .supply), "9e-m": .init(group: 9, letter: "e", effectiveLength: 5, category: .supply), "9f-b": .init(group: 9, letter: "f", effectiveLength: 45, category: .supply), "9f-m": .init(group: 9, letter: "f", effectiveLength: 5, category: .supply), "9g-b": .init(group: 9, letter: "g", effectiveLength: 35, category: .supply), "9g-m": .init(group: 9, letter: "g", effectiveLength: 5, category: .supply), "9h-b": .init(group: 9, letter: "h", effectiveLength: 100, category: .supply), "9h-m": .init(group: 9, letter: "h", effectiveLength: 5, category: .supply), "9i-b": .init(group: 9, letter: "i", effectiveLength: 85, category: .supply), "9i-m": .init(group: 9, letter: "i", effectiveLength: 5, category: .supply), "9j-b": .init(group: 9, letter: "j", effectiveLength: 25, category: .supply), "9j-m": .init(group: 9, letter: "j", effectiveLength: 5, category: .supply), "9k": .init(group: 9, letter: "k", effectiveLength: 65, category: .supply), "9l": .init(group: 9, letter: "l", effectiveLength: 20, category: .supply), "9m": .init(group: 9, letter: "m", effectiveLength: 20, category: .supply), "9n": .init(group: 9, letter: "n", effectiveLength: 15, category: .supply), "9o": .init(group: 9, letter: "o", effectiveLength: 15, category: .supply), "9p": .init(group: 9, letter: "p", effectiveLength: 70, category: .supply), "9q": .init(group: 9, letter: "q", effectiveLength: 55, category: .supply), "9r": .init(group: 9, letter: "r", effectiveLength: 35, category: .supply), // Group 10 "10a": .init(group: 10, letter: "a", effectiveLength: 75, category: .return), "10b": .init(group: 10, letter: "b", effectiveLength: 10, category: .return), "10c": .init(group: 10, letter: "c", effectiveLength: 10, category: .return), "10d": .init(group: 10, letter: "d", effectiveLength: 25, category: .return), "10e": .init(group: 10, letter: "e", effectiveLength: 25, category: .return), "10f": .init(group: 10, letter: "f", effectiveLength: 35, category: .return), "10g": .init(group: 10, letter: "g", effectiveLength: 75, category: .return), // NOTE: Group 11, not entered make user enter them manually. // Group 12 "12a-1:1-2": .init(group: 12, letter: "a", effectiveLength: 20, category: .any), "12a-2:1-2": .init(group: 12, letter: "a", effectiveLength: 20, category: .any), "12a-4:1-2": .init(group: 12, letter: "a", effectiveLength: 20, category: .any), "12a-1:1-4": .init(group: 12, letter: "a", effectiveLength: 40, category: .any), "12a-2:1-4": .init(group: 12, letter: "a", effectiveLength: 40, category: .any), "12a-4:1-4": .init(group: 12, letter: "a", effectiveLength: 30, category: .any), "12b-2": .init(group: 12, letter: "b", effectiveLength: 20, category: .any), "12b-4": .init(group: 12, letter: "b", effectiveLength: 40, category: .any), "12c-1:1-2": .init(group: 12, letter: "c", effectiveLength: 20, category: .any), "12c-2:1-2": .init(group: 12, letter: "c", effectiveLength: 20, category: .any), "12c-4:1-2": .init(group: 12, letter: "c", effectiveLength: 20, category: .any), "12c-1:1-4": .init(group: 12, letter: "c", effectiveLength: 40, category: .any), "12c-2:1-4": .init(group: 12, letter: "c", effectiveLength: 40, category: .any), "12c-4:1-4": .init(group: 12, letter: "c", effectiveLength: 30, category: .any), "12d-1:1-2": .init(group: 12, letter: "d", effectiveLength: 20, category: .any), "12d-2:1-2": .init(group: 12, letter: "d", effectiveLength: 20, category: .any), "12d-4:1-2": .init(group: 12, letter: "d", effectiveLength: 20, category: .any), "12d-1:1-4": .init(group: 12, letter: "d", effectiveLength: 40, category: .any), "12d-2:1-4": .init(group: 12, letter: "d", effectiveLength: 40, category: .any), "12d-4:1-4": .init(group: 12, letter: "d", effectiveLength: 30, category: .any), "12e": .init(group: 12, letter: "e", effectiveLength: 25, category: .any), "12f-1:1-2": .init(group: 12, letter: "f", effectiveLength: 20, category: .any), "12f-2:1-2": .init(group: 12, letter: "f", effectiveLength: 20, category: .any), "12f-4:1-2": .init(group: 12, letter: "f", effectiveLength: 15, category: .any), "12f-1:1-4": .init(group: 12, letter: "f", effectiveLength: 40, category: .any), "12f-2:1-4": .init(group: 12, letter: "f", effectiveLength: 40, category: .any), "12f-4:1-4": .init(group: 12, letter: "f", effectiveLength: 30, category: .any), "12g-2": .init(group: 12, letter: "g", effectiveLength: 20, category: .any), "12g-4": .init(group: 12, letter: "g", effectiveLength: 40, category: .any), "12h-1:1-2": .init(group: 12, letter: "h", effectiveLength: 20, category: .any), "12h-2:1-2": .init(group: 12, letter: "h", effectiveLength: 20, category: .any), "12h-4:1-2": .init(group: 12, letter: "h", effectiveLength: 15, category: .any), "12h-1:1-4": .init(group: 12, letter: "h", effectiveLength: 40, category: .any), "12h-2:1-4": .init(group: 12, letter: "h", effectiveLength: 40, category: .any), "12h-4:1-4": .init(group: 12, letter: "h", effectiveLength: 25, category: .any), "12i-1:1-2": .init(group: 12, letter: "i", effectiveLength: 20, category: .any), "12i-2:1-2": .init(group: 12, letter: "i", effectiveLength: 15, category: .any), "12i-4:1-2": .init(group: 12, letter: "i", effectiveLength: 10, category: .any), "12i-1:1-4": .init(group: 12, letter: "i", effectiveLength: 35, category: .any), "12i-2:1-4": .init(group: 12, letter: "i", effectiveLength: 25, category: .any), "12i-4:1-4": .init(group: 12, letter: "i", effectiveLength: 10, category: .any), "12j-1:1-2": .init(group: 12, letter: "j", effectiveLength: 10, category: .any), "12j-2:1-2": .init(group: 12, letter: "j", effectiveLength: 5, category: .any), "12j-4:1-2": .init(group: 12, letter: "j", effectiveLength: 5, category: .any), "12j-1:1-4": .init(group: 12, letter: "j", effectiveLength: 10, category: .any), "12j-2:1-4": .init(group: 12, letter: "j", effectiveLength: 5, category: .any), "12j-4:1-4": .init(group: 12, letter: "j", effectiveLength: 5, category: .any), "12k-2": .init(group: 12, letter: "k", effectiveLength: 25, category: .any), "12k-4": .init(group: 12, letter: "k", effectiveLength: 25, category: .any), "12l-1:1-2": .init(group: 12, letter: "l", effectiveLength: 10, category: .any), "12l-2:1-2": .init(group: 12, letter: "l", effectiveLength: 5, category: .any), "12l-4:1-2": .init(group: 12, letter: "l", effectiveLength: 5, category: .any), "12l-1:1-4": .init(group: 12, letter: "l", effectiveLength: 10, category: .any), "12l-2:1-4": .init(group: 12, letter: "l", effectiveLength: 5, category: .any), "12l-4:1-4": .init(group: 12, letter: "l", effectiveLength: 5, category: .any), "12m-1:1-2": .init(group: 12, letter: "m", effectiveLength: 10, category: .any), "12m-2:1-2": .init(group: 12, letter: "m", effectiveLength: 5, category: .any), "12m-4:1-2": .init(group: 12, letter: "m", effectiveLength: 5, category: .any), "12m-1:1-4": .init(group: 12, letter: "m", effectiveLength: 10, category: .any), "12m-2:1-4": .init(group: 12, letter: "m", effectiveLength: 5, category: .any), "12m-4:1-4": .init(group: 12, letter: "m", effectiveLength: 5, category: .any), "12n": .init(group: 12, letter: "n", effectiveLength: 10, category: .any), "12o-1:1-2": .init(group: 12, letter: "o", effectiveLength: 10, category: .any), "12o-2:1-2": .init(group: 12, letter: "o", effectiveLength: 5, category: .any), "12o-4:1-2": .init(group: 12, letter: "o", effectiveLength: 5, category: .any), "12o-1:1-4": .init(group: 12, letter: "o", effectiveLength: 10, category: .any), "12o-2:1-4": .init(group: 12, letter: "o", effectiveLength: 5, category: .any), "12o-4:1-4": .init(group: 12, letter: "o", effectiveLength: 5, category: .any), "12p-2": .init(group: 12, letter: "p", effectiveLength: 30, category: .any), "12p-4": .init(group: 12, letter: "p", effectiveLength: 30, category: .any), "12q-1:1-2": .init(group: 12, letter: "q", effectiveLength: 10, category: .any), "12q-2:1-2": .init(group: 12, letter: "q", effectiveLength: 5, category: .any), "12q-4:1-2": .init(group: 12, letter: "q", effectiveLength: 5, category: .any), "12q-1:1-4": .init(group: 12, letter: "q", effectiveLength: 10, category: .any), "12q-2:1-4": .init(group: 12, letter: "q", effectiveLength: 5, category: .any), "12q-4:1-4": .init(group: 12, letter: "q", effectiveLength: 5, category: .any), "12r-1:1-2": .init(group: 12, letter: "r", effectiveLength: 5, category: .any), "12r-2:1-2": .init(group: 12, letter: "r", effectiveLength: 5, category: .any), "12r-4:1-2": .init(group: 12, letter: "r", effectiveLength: 5, category: .any), "12r-1:1-4": .init(group: 12, letter: "r", effectiveLength: 5, category: .any), "12r-2:1-4": .init(group: 12, letter: "r", effectiveLength: 5, category: .any), "12r-4:1-4": .init(group: 12, letter: "r", effectiveLength: 5, category: .any), "12s": .init(group: 12, letter: "s", effectiveLength: 30, category: .any), "12t": .init(group: 12, letter: "t", effectiveLength: 30, category: .any), "12u": .init(group: 12, letter: "u", effectiveLength: 25, category: .any), "12v": .init(group: 12, letter: "v", effectiveLength: 30, category: .any), ] }()