Options
All
  • Public
  • Public/Protected
  • All
Menu

Solver class for the Mystery Master Logic Puzzle Solver.

copyright

mysterymaster.com. All rights reserved.

author

Michael Benson

version

2021-08-31

Hierarchy

  • Solver

Implements

Index

Constructors

constructor

  • Parameters

    Returns Solver

Properties

callback

callback: Function = null

Callback called by Viewer.doResume. MUST set callback in each method!

Private finder

finder: IFinder = null

grids

grids: Mark[][][] = []

Private lawyer

lawyer: ILawyer = null

marks

marks: Mark[] = []

maxGrids

maxGrids: number = 0

maxMarks

maxMarks: number = 0

maxPairs

maxPairs: number = 0

numFactHits

numFactHits: number = 0

numFacts

numFacts: number = 0

numGoodMarks

numGoodMarks: number = 0

numGuesses

numGuesses: number = 0

numMarks

numMarks: number = 0

numPairs

numPairs: number = 0

numRuleHits

numRuleHits: number = 0

numRules

numRules: number = 0

numSolutions

numSolutions: number = 0

okTriggers

okTriggers: boolean = true

puzzle

puzzle: Puzzle = null

quitFlag

quitFlag: boolean = false

stats

stats: Stats = ...

Private time1

time1: Date = null

Private viewer

viewer: Viewer = null

workFlag

workFlag: boolean = false

Static MAX_LAWS

MAX_LAWS: number = 5

Static MAX_LEVELS

MAX_LEVELS: number = 4

Methods

addMark

  • addMark(levelNum: number, levelSub: string, markType: MarkType, refNum: number, refSub: string, noun1: Noun, verb: Verb, noun2: Noun, reason: string, facts?: Fact[], refMark?: Mark, offFacts?: Fact[]): number
  • Submits potential mark. Note: If potential mark contradicts existing mark, either: (1) quit if potential mark is not assumption, or (2) undo last assumption.

    Parameters

    • levelNum: number

      Level number

    • levelSub: string

      Level character.

    • markType: MarkType

      Mark type.

    • refNum: number

      Reference number.

    • refSub: string

      Reference character.

    • noun1: Noun

      Noun 1.

    • verb: Verb

      Verb.

    • noun2: Noun

      Noun 2.

    • reason: string

      Reason for mark.

    • facts: Fact[] = []

      Facts referenced.

    • refMark: Mark = null

      Mark referenced.

    • offFacts: Fact[] = []

      Facts disabled by potential mark.

    Returns number

    status -1=Error, 0=Exists, 1=Entered.

addMarkByRule

  • addMarkByRule(mark: Mark, rule: Rule, refSub: string, noun1: Noun, verb: Verb, noun2: Noun, reason: string): number
  • Submits potential mark triggered by given rule invoked on given mark.

    Parameters

    Returns number

    status -1 = Error, 0 = Mark not entered, 1 = Mark entered.

asString

  • asString(): string
  • Returns string

canBeLinked

  • canBeLinked(noun1: Noun, link: Link, slot2: Noun, i: number): boolean
  • Determines if noun 1 can be related to slot 2, otherwise false. Called by Lawyer.

    Parameters

    • noun1: Noun

      Noun 1.

    • link: Link

      Link.

    • slot2: Noun

      Slot 2.

    • i: number

      Position 1 = First, 2 = Second.

    Returns boolean

    True if noun 1 can be related to slot 2, otherwise false.

canBeWith

  • canBeWith(noun1: Noun, noun2: Noun): boolean
  • Determines if noun 1 can be with noun 2.

    Parameters

    Returns boolean

    True if noun 1 can be with noun 2, otherwise false.

Private disableFacts

  • disableFacts(mark: Mark): void
  • Disables facts of type 2 or higher where (1) positive mark references one noun in fact, and (2) both nouns in fact are slotted. Called by addMark.

    Parameters

    Returns void

Private disableNegativeFacts

  • disableNegativeFacts(mark: Mark): void
  • Disable facts of type 3 or 4 where (1) negative mark references one noun in negative fact and (2) a noun of the fact link's noun type, and (3) the other noun in the fact has been slotted. In "Hello Dolly!" clue 9 states "Jessica is not next to Staci." So if one of them is slotted, and the other cannot be in a slot next to it, then the fact can be disabled. Called by addMark.

    Parameters

    Returns void

Private disableType2Fact

  • disableType2Fact(mark: Mark): void
  • Determines if a type 2 fact referenced by the mark can be disabled. In "Lucky Streets", "the quarter was found earlier in the week than Friday." After two marks stating the quarter was not found on Friday and Saturday, this fact can be disabled. Called by addMark.

    Parameters

    • mark: Mark

      Mark that referenced facts.

    Returns void

doQuit

  • doQuit(): void
  • Stops solving the puzzle. Called by Finder.doNextLevel, Finder.doAssumptions.

    Returns void

Private doResume

  • doResume(): void
  • Determines next method to call. Called by Viewer as callback. Either:

    1. lawyer.doWork - if existing marks need validation.
    2. saySolution - if all marks have been entered and validated.
    3. finder.doResume - if workFlag is true to resume finding marks.
    4. nothing - if Lawyer validated a mark entered by User.

    Returns void

doWork

  • doWork(): void
  • Starts solving puzzle with sanity check. Called by viewer.doSolve.

    Returns void

getCommonNoun

  • Returns first noun of noun type 3 that noun 1 and noun 2 can be with, otherwise null.

    Parameters

    Returns Noun

    Noun of noun type 3, or null.

getGridMark

  • Returns mark in grid given by two nouns. Called by Lawyer.

    Parameters

    • noun1: Noun

      Noun 1.

    • noun2: Noun

      Noun 2.

    Returns Mark

    Mark.

Private getGridMark2

  • getGridMark2(t1: number, n1: number, t2: number, n2: number): Mark
  • Returns mark in grid given by one-based numbers for two nouns. Called by getGridMark.

    Parameters

    • t1: number

      One-based number of noun type 1.

    • n1: number

      One-based number of noun 1.

    • t2: number

      One-based number of noun type 2.

    • n2: number

      One-based number of noun 2.

    Returns Mark

    Mark.

Private getGridNum

  • getGridNum(t1: number, t2: number): number
  • Returns one-based grid number given one-based numbers of two noun types. Called by getGridMark2, setGridMark2.

    Parameters

    • t1: number

      Number of noun type 1.

    • t2: number

      Number of noun type 2.

    Returns number

    One-based grid number.

getGridVerb

  • Determines verb of mark given by two nouns, or possible verb if mark is null.

    Parameters

    Returns Verb

    Verb of mark given by two nouns, or possible verb if mark is null.

Private getLastUserMark

  • getLastUserMark(): Mark
  • Returns last mark entered by user. Called by undoUserMark.

    Returns Mark

    Last mark entered by user, or null.

getNouns

  • Returns list of nouns of noun type 2 that may be with noun 1.

    Parameters

    Returns Noun[]

    Array of nouns, which may be empty.

isMark

  • Determines if mark already exists.

    Parameters

    Returns boolean

    True if mark already exists, otherwise false.

maybeRelated

  • maybeRelated(noun1: Noun, link: Link, noun2: Noun): boolean
  • Determines if noun 1 is/maybe related to noun 2. Called by "New Self Improvement Committee".

    Parameters

    Returns boolean

    True if noun 1 is/maybe related to noun 2, otherwise false.

Private removeGridMark

  • removeGridMark(mark: Mark): void
  • Removes given mark from grids. Called by removeMark.

    Parameters

    Returns void

Private removeMark

  • removeMark(who: number, mark: Mark): void
  • Removes (actually recycles) mark from solving process. Called by undoUserMark (who = 1), undoAssumption (who = 2).

    Parameters

    • who: number

      Who entered mark, either 1 = User, 2 = Finder

    • mark: Mark

      Mark that was removed.

    Returns void

reset

  • reset(): void
  • Resets the solver. Called by viewer.reset, setPuzzle.

    Returns void

Private sayAddMark

  • sayAddMark(mark: Mark): void
  • Parameters

    Returns void

Private sayContradiction

  • sayContradiction(msg: string): void
  • Parameters

    • msg: string

    Returns void

sayFactViolation

  • sayFactViolation(mark: Mark, fact: Fact): void
  • Parameters

    Returns void

sayLawViolation

  • sayLawViolation(msg: string, mark: Mark): void
  • Parameters

    • msg: string
    • mark: Mark

    Returns void

sayLevel

  • sayLevel(num: number, sub: string, callback: Function): void
  • Parameters

    • num: number
    • sub: string
    • callback: Function

    Returns void

sayPlacers

  • sayPlacers(mark: Mark, rule: Rule): void
  • Parameters

    Returns void

Private sayRemoveMark

  • sayRemoveMark(msg: string, who: number, mark: Mark): void
  • Parameters

    • msg: string
    • who: number
    • mark: Mark

    Returns void

sayRuleViolation

  • sayRuleViolation(mark: Mark, rule: Rule): void
  • Parameters

    Returns void

Private saySolution

  • saySolution(): void
  • Returns void

Private sayStarted

  • sayStarted(): void
  • Returns void

Private sayStopped

  • sayStopped(): void
  • Returns void

sayValidMark

  • sayValidMark(mark: Mark): void
  • Parameters

    Returns void

Private setGridMark

  • setGridMark(mark: Mark): void
  • Enters the given mark into the grids. Called by addMark.

    Parameters

    Returns void

Private setGridMark2

  • setGridMark2(t1: number, n1: number, t2: number, n2: number, mark: Mark): void
  • Enters the mark/null into the grids using the one-based numbers of the nouns. Called by setGridMark, removeGridMark.

    Parameters

    • t1: number

      One-based number of noun type 1.

    • n1: number

      One-based number of noun 1.

    • t2: number

      One-based number of noun type 2.

    • n2: number

      One-based number of noun 2.

    • mark: Mark

      Mark or null.

    Returns void

setPuzzle

  • setPuzzle(puzzle: Puzzle): void
  • Sets the puzzle. Called by viewer.setPuzzle.

    Parameters

    • puzzle: Puzzle

      Puzzle object.

    Returns void

toString

  • toString(): string
  • Returns string

undoAssumption

  • undoAssumption(): void
  • Removes marks back to and including the last mark entered by Finder. Called by finder.doAssumptions, callback from removeMark.

    Returns void

undoUserMark

  • undoUserMark(): void
  • Removes marks back to and including the last mark entered by User. Called when User clicks the Undo button on the Grids form.

    Returns void

updateOption

  • updateOption(key: string, val: boolean): void
  • Updates variables affected by Setup form. Called by viewer.updateOption.

    Parameters

    • key: string

      Key.

    • val: boolean

      Value.

    Returns void

Generated using TypeDoc