<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def cracked(self):
 """Attempts to crack ciphertext using frequency of letters in English. Returns: String of most likely message. """

        logging.info("Cracking message: {0}".format(self.message))
        entropy_values = {}
        attempt_cache = {}
        message = self.message
        for i in range(25):
            self.message = message
            self.offset = i * -1
            logging.debug("Attempting crack with offset: "
                          "{0}".format(self.offset))
            test_cipher = self.cipher()
            logging.debug("Attempting plaintext: {0}".format(test_cipher))
            entropy_values[i] = self.calculate_entropy(test_cipher)
            attempt_cache[i] = test_cipher

        sorted_by_entropy = sorted(entropy_values, key=entropy_values.get)
        self.offset = sorted_by_entropy[0] * -1
        cracked_text = attempt_cache[sorted_by_entropy[0]]
        self.message = cracked_text

        logging.debug("Entropy scores: {0}".format(entropy_values))
        logging.debug("Lowest entropy score: "
                      "{0}".format(str(entropy_values[sorted_by_entropy[0]])))
        logging.debug("Most likely offset: {0}".format(self.offset))
        logging.debug("Most likely message: {0}".format(cracked_text))

        return cracked_text