```python
def final_door_state(events: list[str]) -> str:
    moves = {
        "unlock": "closed",
        "lock": "locked",
        "open": "open",
        "close": "closed",
    }
    state = "locked"
    ignored = 0
    for event in events:
        if event not in moves:
            raise ValueError(f"Invalid event: {event}")
        state = moves.get(event, state)
        if state == moves[event]:
            ignored += 1
    return state + ":" + str(ignored)
```