code: 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)