2021-08-03 17:53:25 +00:00
|
|
|
__all__ = ['Cost']
|
|
|
|
__author__ = "Jeremy Saklad"
|
|
|
|
|
2021-08-03 17:02:06 +00:00
|
|
|
from enum import Enum
|
|
|
|
|
|
|
|
from ortools.sat.python import cp_model
|
|
|
|
|
|
|
|
class Cost(Enum):
|
|
|
|
"""The number of pennies needed to produce a quality."""
|
|
|
|
|
2021-09-18 23:24:54 +00:00
|
|
|
__slots__ = '_value_', '_name_', '__objclass__'
|
|
|
|
|
2021-08-03 17:02:06 +00:00
|
|
|
# This is your baseline EPA: the pennies you could generate using an action for a generic grind.
|
|
|
|
ACTION = 400
|
|
|
|
|
|
|
|
# Antique Mystery
|
|
|
|
ANTIQUE_MYSTERY = 1250
|
|
|
|
|
|
|
|
# Favours: Bohemians
|
|
|
|
# Various opportunity cards
|
|
|
|
BOHEMIAN_FAVOURS = ACTION
|
|
|
|
|
|
|
|
# Bone Fragment
|
|
|
|
BONE_FRAGMENT = 1
|
|
|
|
|
|
|
|
# Cartographer's Hoard
|
|
|
|
CARTOGRAPHERS_HOARD = 31250
|
|
|
|
|
|
|
|
# Favours: The Church
|
|
|
|
# Various opportunity cards
|
|
|
|
CHURCH_FAVOURS = ACTION
|
|
|
|
|
|
|
|
# Collection Note: There's a 'Package' in London
|
|
|
|
# Station VIII Lab
|
|
|
|
COLLECTION_NOTE = ACTION
|
|
|
|
|
|
|
|
# Deep-Zee Catch
|
2021-09-15 00:47:55 +00:00
|
|
|
# Spear-fishing at the bottom of the Evenlode, 7 at a time, difficult check, available fourth of the time
|
|
|
|
DEEP_ZEE_CATCH = 4*(ACTION/7)
|
2021-08-03 17:02:06 +00:00
|
|
|
|
|
|
|
# Crustacean Pincer
|
|
|
|
# Ealing Gardens Butcher, 2 at a time
|
|
|
|
CRUSTACEAN_PINCER = (ACTION + DEEP_ZEE_CATCH)/2
|
|
|
|
|
|
|
|
# Femur of a Surface Deer
|
|
|
|
# Dumbwaiter of Balmoral, 25 at a time
|
|
|
|
DEER_FEMUR = ACTION/25
|
|
|
|
|
|
|
|
# Favours: The Docks
|
|
|
|
# Various opportunity cards
|
|
|
|
DOCK_FAVOURS = ACTION
|
|
|
|
|
|
|
|
# Extraordinary Implication
|
|
|
|
EXTRAORDINARY_IMPLICATION = 250
|
|
|
|
|
|
|
|
# Eyeless Skull
|
|
|
|
# No consistent source
|
|
|
|
EYELESS_SKULL = cp_model.INT32_MAX/2
|
|
|
|
|
|
|
|
# Holy Relic of the Thigh of Saint Fiacre
|
|
|
|
# Jericho Locks statue, 2 at a time
|
|
|
|
FIACRE_THIGH = (ACTION + 4*CHURCH_FAVOURS)/2
|
|
|
|
|
|
|
|
# Fin Bones, Collected
|
|
|
|
# Hunt and dissect Pinewood Shark, 40 at a time
|
|
|
|
FIN_BONES = (11*ACTION)/40
|
|
|
|
|
|
|
|
# Amber-Crusted Fin
|
|
|
|
# Helicon House
|
|
|
|
AMBER_FIN = ACTION + 10*FIN_BONES
|
|
|
|
|
|
|
|
# Five-Pointed Ribcage
|
|
|
|
# Upwards
|
|
|
|
FIVE_POINTED_RIBCAGE = 9*ACTION + CARTOGRAPHERS_HOARD
|
|
|
|
|
|
|
|
# Esteem of the Guild
|
|
|
|
# Jericho Parade, 2 at a time
|
|
|
|
GUILD_ESTEEM = (ACTION + 5*DOCK_FAVOURS)/2
|
|
|
|
|
|
|
|
# Skull in Coral
|
|
|
|
# Persephone, 1-2 at a time
|
|
|
|
CORAL_SKULL = 1.5*(2*ACTION + 3*GUILD_ESTEEM)
|
|
|
|
|
|
|
|
# Headless Skeleton
|
|
|
|
# These are accumulated while acquiring other qualities.
|
|
|
|
HEADLESS_SKELETON = 0
|
|
|
|
|
2021-08-13 17:14:18 +00:00
|
|
|
# Favours: Hell
|
|
|
|
# Various opportunity cards
|
|
|
|
HELL_FAVOURS = ACTION
|
|
|
|
|
2021-08-24 12:25:52 +00:00
|
|
|
# Infiltrating...
|
|
|
|
# Khan's Heart, 10 at a time
|
|
|
|
INFILTRATING = ACTION/10
|
|
|
|
|
2021-08-31 22:06:03 +00:00
|
|
|
# Intercepted Cablegram
|
|
|
|
# Khan's Heart, tap a telegraph cable, 50 at a time
|
|
|
|
INTERCEPTED_CABLEGRAM = (2*ACTION + 130*INFILTRATING)/50
|
|
|
|
|
2021-08-13 17:14:18 +00:00
|
|
|
# Volume of Collated Research
|
|
|
|
# Hurlers statue, 10 at a time
|
|
|
|
COLLATED_RESEARCH = (ACTION + 4*HELL_FAVOURS)/10
|
|
|
|
|
2021-08-03 17:02:06 +00:00
|
|
|
# Hinterland Scrip
|
|
|
|
HINTERLAND_SCRIP = 50
|
|
|
|
|
|
|
|
# Hedonist
|
|
|
|
# Handsome Townhouse, 3cp at a time
|
|
|
|
HEDONIST_CP = ACTION/3
|
|
|
|
|
|
|
|
# Human Arm
|
|
|
|
# These are accumulated while acquiring other qualities.
|
|
|
|
HUMAN_ARM = 0
|
|
|
|
|
|
|
|
# Incisive Observation
|
|
|
|
INCISIVE_OBSERVATION = 50
|
|
|
|
|
|
|
|
# Crate of Incorruptible Biscuits
|
|
|
|
INCORRUPTIBLE_BISCUITS = 250
|
|
|
|
|
|
|
|
# Inkling of Identity
|
|
|
|
INKLING_OF_IDENTITY = 10
|
|
|
|
|
|
|
|
# A Custom-Engraved Skull
|
|
|
|
# Feast of the Exceptional Rose, sent by one player and accepted by another
|
|
|
|
ENGRAVED_SKULL = 2*ACTION + 200*INKLING_OF_IDENTITY
|
|
|
|
|
|
|
|
# Ivory Humerus
|
|
|
|
# Ealing Gardens statue, 2 at a time
|
|
|
|
IVORY_HUMERUS = (ACTION + 4*BOHEMIAN_FAVOURS)/2
|
|
|
|
|
|
|
|
# Jade Fragment
|
|
|
|
JADE_FRAGMENT = 1
|
|
|
|
|
|
|
|
# Femur of a Jurassic Beast
|
|
|
|
# Brawling for yourself, large Bone Market crate, 12 at a time
|
|
|
|
JURASSIC_FEMUR = (10*ACTION)/12
|
|
|
|
|
|
|
|
# Knotted Humerus
|
|
|
|
# These are accumulated while acquiring other qualities.
|
|
|
|
KNOTTED_HUMERUS = 0
|
|
|
|
|
|
|
|
# Nevercold Brass Sliver
|
|
|
|
NEVERCOLD_BRASS = 1
|
|
|
|
|
|
|
|
# Obsidian Chitin Tail
|
|
|
|
# No consistent source
|
|
|
|
OBSIDIAN_TAIL = cp_model.INT32_MAX/2
|
|
|
|
|
|
|
|
# Parabolan Orange-apple
|
|
|
|
# Parabolan Base-camp, electricity and hedonism, 2 at a time
|
|
|
|
ORANGE_APPLE = (2*ACTION + 100*BONE_FRAGMENT + 21*HEDONIST_CP)/2
|
|
|
|
|
|
|
|
# Ivory Femur
|
|
|
|
# Bohemian Sculptress
|
|
|
|
IVORY_FEMUR = ACTION + 750*BONE_FRAGMENT + 3*ORANGE_APPLE
|
|
|
|
|
|
|
|
# Penny
|
|
|
|
PENNY = 1
|
|
|
|
|
|
|
|
# Bright Brass Skull
|
|
|
|
# Merrigans Exchange
|
|
|
|
BRASS_SKULL = 6250*PENNY
|
|
|
|
|
|
|
|
# Pentagrammic Skull
|
|
|
|
# Upwards
|
|
|
|
PENTAGRAMMIC_SKULL = 9*ACTION
|
|
|
|
|
|
|
|
# Hand-picked Peppercaps
|
|
|
|
PEPPERCAPS = HINTERLAND_SCRIP
|
|
|
|
|
|
|
|
# Revisionist Historical Narrative
|
|
|
|
# Waswood
|
|
|
|
REVISIONIST_NARRATIVE = ACTION + 4*EXTRAORDINARY_IMPLICATION + INCISIVE_OBSERVATION
|
|
|
|
|
|
|
|
# Knob of Scintillack
|
|
|
|
SCINTILLACK = 250
|
|
|
|
|
|
|
|
# Searing Enigma
|
2021-08-31 22:06:03 +00:00
|
|
|
# Khan's Heart, disgruntled academic
|
|
|
|
SEARING_ENIGMA = 2*ACTION + 130*INFILTRATING + 2*INTERCEPTED_CABLEGRAM
|
2021-08-03 17:02:06 +00:00
|
|
|
|
2022-05-26 12:59:42 +00:00
|
|
|
# Segmented Ribcage
|
|
|
|
# No consistent source
|
|
|
|
SEGMENTED_RIBCAGE = cp_model.INT32_MAX/4
|
|
|
|
|
2021-08-03 17:02:06 +00:00
|
|
|
# Carved Ball of Stygian Ivory
|
|
|
|
STYGIAN_IVORY = 250
|
|
|
|
|
|
|
|
# Preserved Surface Blooms
|
|
|
|
SURFACE_BLOOMS = 250
|
|
|
|
|
|
|
|
# Consignment of Scintillack Snuff
|
|
|
|
# Laboratory Manufacturing
|
|
|
|
SCINTILLACK_SNUFF = (ACTION + 8*SCINTILLACK + SURFACE_BLOOMS)/2
|
|
|
|
|
|
|
|
# Elation at Feline Oration
|
|
|
|
# Pinnock
|
|
|
|
ELATION_AT_FELINE_ORATION = ACTION + 2*ANTIQUE_MYSTERY + COLLECTION_NOTE + 2*SCINTILLACK_SNUFF
|
|
|
|
|
|
|
|
# Oil of Companionship
|
|
|
|
# Station VIII Lab
|
|
|
|
OIL_OF_COMPANIONSHIP = ACTION + ELATION_AT_FELINE_ORATION
|
|
|
|
|
|
|
|
# Survey of the Neath's Bones
|
|
|
|
# Laboratory Research
|
|
|
|
SURVEY = 6*ACTION/25
|
|
|
|
|
|
|
|
# Plaster Tail Bones
|
|
|
|
# Carpenter's Granddaughter, 2 at a time
|
|
|
|
PLASTER_TAIL_BONES = (ACTION + 10*SURVEY)/2
|
|
|
|
|
|
|
|
# Human Ribcage
|
|
|
|
# Ealing Gardens
|
|
|
|
HUMAN_RIBCAGE = ACTION + 15*SURVEY
|
|
|
|
|
|
|
|
# Palaeontological Discovery
|
|
|
|
# Plain of Thirsty Grasses
|
|
|
|
PALAEONTOLOGICAL_DISCOVERY = (ACTION + 140*SURVEY)/6
|
|
|
|
|
2022-08-11 21:03:40 +00:00
|
|
|
# Fossilised Forelimb
|
|
|
|
# Results of Excavation, 2 at a time
|
|
|
|
FOSSILISED_FORELIMB = (4*PALAEONTOLOGICAL_DISCOVERY)/2
|
|
|
|
|
2021-08-03 17:02:06 +00:00
|
|
|
# Helical Thighbone
|
|
|
|
# Results of Excavation, 6 at a time
|
|
|
|
HELICAL_THIGH = (2*PALAEONTOLOGICAL_DISCOVERY)/6
|
|
|
|
|
|
|
|
# Leviathan Frame
|
|
|
|
# Results of Excavation
|
|
|
|
LEVIATHAN_FRAME = 25*PALAEONTOLOGICAL_DISCOVERY
|
|
|
|
|
|
|
|
# Thorned Ribcage
|
|
|
|
# Iron-Toothed Terror Bird
|
|
|
|
THORNED_RIBCAGE = 6*ACTION
|
|
|
|
|
|
|
|
# Flourishing Ribcage
|
|
|
|
# Helicon House
|
|
|
|
FLOURISHING_RIBCAGE = ACTION + HUMAN_RIBCAGE + THORNED_RIBCAGE
|
|
|
|
|
|
|
|
# Time Remaining in the Woods
|
|
|
|
# Compel Ghillie, 7 at a time
|
|
|
|
TIME_REMAINING_IN_THE_WOODS = (ACTION + 4*COLLATED_RESEARCH)/7
|
|
|
|
|
|
|
|
# Observation: Red Deer
|
2021-08-13 17:14:18 +00:00
|
|
|
# Balmoral Woods (TRitW rounded up to multiple of 7)
|
|
|
|
DEER_OBSERVATION = 13*ACTION + 14*TIME_REMAINING_IN_THE_WOODS
|
2021-08-03 17:02:06 +00:00
|
|
|
|
|
|
|
# Mammoth Ribcage
|
|
|
|
# Keeper of the Marigold Menagerie
|
|
|
|
MAMMOTH_RIBCAGE = ACTION + DEER_OBSERVATION
|
|
|
|
|
|
|
|
# Observation: Fox
|
2021-08-13 17:14:18 +00:00
|
|
|
# Balmoral Woods (TRitW rounded up to multiple of 7)
|
|
|
|
FOX_OBSERVATION = 10*ACTION + 14*TIME_REMAINING_IN_THE_WOODS
|
2021-08-03 17:02:06 +00:00
|
|
|
|
|
|
|
# Doubled Skull
|
|
|
|
# Keeper of the Marigold Menagerie
|
|
|
|
DOUBLED_SKULL = ACTION + FOX_OBSERVATION
|
|
|
|
|
|
|
|
# Observation: Grouse
|
2021-08-13 17:14:18 +00:00
|
|
|
# Balmoral Woods (TRitW rounded up to multiple of 7)
|
|
|
|
GROUSE_OBSERVATION = 9*ACTION + 14*TIME_REMAINING_IN_THE_WOODS
|
2021-08-03 17:02:06 +00:00
|
|
|
|
|
|
|
# Skeleton with Seven Necks
|
|
|
|
# Keeper of the Marigold Menagerie
|
|
|
|
SKELETON_WITH_SEVEN_NECKS = ACTION + GROUSE_OBSERVATION
|
|
|
|
|
|
|
|
# Rubbery Skull
|
|
|
|
# Flute Street, including travel due to quality cap
|
|
|
|
RUBBERY_SKULL = 25*ACTION
|
|
|
|
|
|
|
|
# Rumour of the Upper River
|
|
|
|
RUMOUR_OF_THE_UPPER_RIVER = 250
|
|
|
|
|
|
|
|
# Jet Black Stinger
|
|
|
|
# Hunting with Sophia's, 5 at a time
|
|
|
|
BLACK_STINGER = (ACTION + 5*RUMOUR_OF_THE_UPPER_RIVER)/5
|
|
|
|
|
|
|
|
# Prismatic Frame
|
|
|
|
# Expedition at Station VIII
|
|
|
|
PRISMATIC_FRAME = ACTION + OIL_OF_COMPANIONSHIP + 98*RUMOUR_OF_THE_UPPER_RIVER
|
|
|
|
|
|
|
|
# Unidentified Thigh Bone
|
|
|
|
# These are accumulated while acquiring other qualities.
|
|
|
|
UNIDENTIFIED_THIGH = 0
|
|
|
|
|
|
|
|
# Nodule of Warm Amber
|
|
|
|
WARM_AMBER = 10
|
|
|
|
|
|
|
|
# Albatross Wing
|
|
|
|
# Ealing Gardens Butcher, 2 at a time
|
|
|
|
ALBATROSS_WING = (ACTION + 2000*BONE_FRAGMENT + 25*WARM_AMBER)/2
|
|
|
|
|
|
|
|
# Bat Wing
|
|
|
|
# Ealing Gardens Butcher, 2 at a time
|
|
|
|
BAT_WING = (ACTION + 100*BONE_FRAGMENT + 2*WARM_AMBER)/2
|
|
|
|
|
|
|
|
# Horned Skull
|
|
|
|
# Ealing Gardens Butcher
|
|
|
|
HORNED_SKULL = ACTION + 1000*BONE_FRAGMENT + 5*WARM_AMBER
|
|
|
|
|
|
|
|
# Plated Skull
|
|
|
|
# Ealing Gardens Butcher
|
|
|
|
PLATED_SKULL = ACTION + 1750*BONE_FRAGMENT + INCORRUPTIBLE_BISCUITS + 25*WARM_AMBER
|
|
|
|
|
|
|
|
# Sabre-toothed Skull
|
|
|
|
# Ealing Gardens Butcher
|
|
|
|
SABRE_TOOTHED_SKULL = ACTION + 4900*BONE_FRAGMENT + 125*WARM_AMBER
|
|
|
|
|
|
|
|
# Wing of a Young Terror Bird
|
|
|
|
# Ealing Gardens Butcher, 2 at a time
|
|
|
|
TERROR_BIRD_WING = (ACTION + 100*BONE_FRAGMENT + 25*WARM_AMBER)/2
|
|
|
|
|
|
|
|
# Tomb-Lion's Tail
|
|
|
|
# Ealing Gardens Butcher
|
|
|
|
TOMB_LION_TAIL = ACTION + 200*BONE_FRAGMENT + 2*WARM_AMBER
|
|
|
|
|
2021-08-13 17:14:18 +00:00
|
|
|
# Nodule of Trembling Amber
|
|
|
|
# Slime and Amber: the Rubbery Men (minus 1 action to account for Favour)
|
|
|
|
TREMBLING_AMBER = 100*WARM_AMBER
|
|
|
|
|
|
|
|
# Ribcage with a Bouquet of Eight Spines
|
|
|
|
# Helicon House
|
|
|
|
RIBCAGE_WITH_EIGHT_SPINES = ACTION + 3*SEARING_ENIGMA + SKELETON_WITH_SEVEN_NECKS + THORNED_RIBCAGE + 3*TREMBLING_AMBER
|
|
|
|
|
2021-08-03 17:02:06 +00:00
|
|
|
# Withered Tentacle
|
2021-09-21 16:48:08 +00:00
|
|
|
# Adulterine Castle, Miscounting Second Circle by 4, 4 at a time
|
|
|
|
WITHERED_TENTACLE = ACTION/4
|
2021-08-03 17:02:06 +00:00
|
|
|
|
|
|
|
|