def crack(ciphertext, *fitness_functions, min_key=0, max_key=26, shift_function=shift_case_english):
    if min_key >= max_key:
        raise ValueError("min_key cannot exceed max_key")
    decryptions = []
    for key in range(min_key, max_key):
        plaintext = decrypt(key, ciphertext, shift_function=shift_function)
        decryptions.append(Decryption(plaintext, key, score(plaintext, *fitness_functions)))
    return sorted(decryptions, reverse=True)