From 5b6779205130f4d48a013a6e74aba6335f78415d Mon Sep 17 00:00:00 2001 From: Michael Housh Date: Fri, 19 Dec 2025 10:25:31 -0500 Subject: [PATCH] feat: Finishes effective length lookup table. --- .../ManualDCore/EffectiveLengthGroup.swift | 503 ++++++++++++++++++ 1 file changed, 503 insertions(+) diff --git a/Sources/ManualDCore/EffectiveLengthGroup.swift b/Sources/ManualDCore/EffectiveLengthGroup.swift index 437634e..f7f5935 100644 --- a/Sources/ManualDCore/EffectiveLengthGroup.swift +++ b/Sources/ManualDCore/EffectiveLengthGroup.swift @@ -25,6 +25,7 @@ public struct EffectiveLengthGroup: Codable, Equatable { extension EffectiveLengthGroup { public enum Category: String, Codable, Equatable { + case any case supply case `return` } @@ -121,5 +122,507 @@ public let effectiveLengthsLookup: [String: EffectiveLengthGroup] { "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), ] }