Skip to content

States

State

Bases: Enum

Represents the state of answers.

Source code in aoc/states.py
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
class State(Enum):
    """Represents the state of answers."""

    CORRECT = auto()
    """The answer is correct."""

    SOLVED = auto()
    """The problem part was already solved."""

    LOW = auto()
    """The answer is too low."""

    HIGH = auto()
    """The answer is too high."""

    WRONG = auto()
    """The answer is wrong."""

    TIMEOUT = auto()
    """The answer was submitted too recently (timeout)."""

    UNKNOWN = auto()
    """The answer state is unknown."""

    @classmethod
    def match(cls, string: str) -> State:
        """Matches the given `string` and returns the corresponding state.

        Arguments:
            string: The string to match.

        Returns:
            The corresponding state ([`UNKNOWN`][aoc.states.State.UNKNOWN] if no match is found).
        """
        string = case_fold(string)

        if CORRECT_MATCH in string:
            return cls.CORRECT

        if SOLVED_MATCH in string:
            return cls.SOLVED

        if LOW_MATCH in string:
            return cls.LOW

        if HIGH_MATCH in string:
            return cls.HIGH

        if WRONG_MATCH in string:
            return cls.WRONG

        if TIMEOUT_MATCH in string:
            return cls.TIMEOUT

        return cls.UNKNOWN

    @property
    def message(self) -> str:
        """Returns the message for this state.

        Returns:
            The message for this state.
        """
        cls = type(self)

        if self is cls.CORRECT:
            return CORRECT_MESSAGE

        if self is cls.SOLVED:
            return SOLVED_MESSAGE

        if self is cls.LOW:
            return LOW_MESSAGE

        if self is cls.HIGH:
            return HIGH_MESSAGE

        if self is cls.WRONG:
            return WRONG_MESSAGE

        if self is cls.TIMEOUT:
            return TIMEOUT_MESSAGE

        if self is cls.UNKNOWN:
            return UNKNOWN_MESSAGE

        assert_never(self)  # pragma: never

CORRECT = auto() class-attribute instance-attribute

The answer is correct.

SOLVED = auto() class-attribute instance-attribute

The problem part was already solved.

LOW = auto() class-attribute instance-attribute

The answer is too low.

HIGH = auto() class-attribute instance-attribute

The answer is too high.

WRONG = auto() class-attribute instance-attribute

The answer is wrong.

TIMEOUT = auto() class-attribute instance-attribute

The answer was submitted too recently (timeout).

UNKNOWN = auto() class-attribute instance-attribute

The answer state is unknown.

message: str property

Returns the message for this state.

Returns:

Type Description
str

The message for this state.

match(string: str) -> State classmethod

Matches the given string and returns the corresponding state.

Parameters:

Name Type Description Default
string str

The string to match.

required

Returns:

Type Description
State

The corresponding state (UNKNOWN if no match is found).

Source code in aoc/states.py
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
@classmethod
def match(cls, string: str) -> State:
    """Matches the given `string` and returns the corresponding state.

    Arguments:
        string: The string to match.

    Returns:
        The corresponding state ([`UNKNOWN`][aoc.states.State.UNKNOWN] if no match is found).
    """
    string = case_fold(string)

    if CORRECT_MATCH in string:
        return cls.CORRECT

    if SOLVED_MATCH in string:
        return cls.SOLVED

    if LOW_MATCH in string:
        return cls.LOW

    if HIGH_MATCH in string:
        return cls.HIGH

    if WRONG_MATCH in string:
        return cls.WRONG

    if TIMEOUT_MATCH in string:
        return cls.TIMEOUT

    return cls.UNKNOWN