```python
def wave_count(readings: list) -> int:
    """Return how many times a run of readings changes direction.
    
    A change is a rise that follows a fall or a fall that follows a rise.
    Readings that hold level neither rise nor fall and change nothing.
    """
    if not readings or len(readings) < 2:
        return 0

    # Determine the sequence of movements: 'up', 'down', or 'flat'
    movements = []
    for i in range(1, len(readings)):
        if readings[i] > readings[i - 1]:
            movements.append('up')
        elif readings[i] < readings[i - 1]:
            movements.append('down')
        else:
            movements.append('flat')

    # Filter out flat movements to get the core direction sequence
    core_directions = [m for m in movements if m != 'flat']

    if len(core_directions) < 2:
        return 0

    # Count direction changes
    count = 0
    for i in range(1, len(core_directions)):
        if core_directions[i] != core_directions[i - 1]:
            count += 1

    return count
```