Dave could you explain what this code does, how it can be improved and if there are any errors? And what the output would be, if you can manage it.
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
std::vector applyFilter(const std::vector& input) {
std::vector output;
static double y_prev1 = 0.0; // yn-1
static double y_prev2 = 0.0; // yn-2
static double y_prev3 = 0.0; // yn-3
for (double xn : input) {
double yn = 0.5 * xn;
yn -= 0.3 * y_prev1;
yn += 0.2 * y_prev2;
yn -= 0.1 * y_prev3;
y_prev3 = y_prev2;
y_prev2 = y_prev1;
y_prev1 = yn;
output.push_back(static_cast(yn));
}
return output;
}
std::string hashSHA256(const std::vector& input) {
unsigned char hash[SHA256_DIGEST_LENGTH];
SHA256(&input[0], input.size(), hash);
std::string hashString;
for (int i = 0; i < SHA256_DIGEST_LENGTH; ++i) {
hashString += std::to_string(hash[i]);
}
return hashString;
}
int binaryToDecimal(const std::string& binary) {
int result = 0;
for (char c : binary) {
result = (result << 1) + (c - '0');
}
return result;
}
std::string binaryToHex(const std::string& binaryCode) {
std::bitset<8> bits(binaryToDecimal(binaryCode));
std::stringstream ss;
ss << std::hex << std::setw(2) << std::setfill('0') << static_cast(bits.to_ulong());
return ss.str();
}
std::string binaryToASCII(const std::string& binaryCode) {
std::string result;
for (size_t i = 0; i < binaryCode.length(); i += 8) {
std::bitset<8> bits(binaryCode.substr(i, 8));
char asciiChar = static_cast(bits.to_ulong());
result += asciiChar;
}
return result;
}
std::string shiftASCII(const std::string& asciiText, int shiftCount) {
std::string result;
for (char c : asciiText) {
if (std::isalpha(c)) {
char base = (std::isupper(c)) ? 'A' : 'a';
char shiftedChar = ((c - base + shiftCount) % 26) + base;
result += shiftedChar;
} else {
result += c;
}
}
return result;
}
void decodeBinary(const std::string& binaryCode, std::string& originalInput, std::string& translation, int shiftCount) {
std::cout << "May I present your 1s&0s Code: " << binaryCode << std::endl;
std::this_thread::sleep_for(std::chrono::seconds(2));
std::string asciiText = binaryToASCII(binaryCode);
std::cout << "Here's your Decoded ASCII: " << asciiText << std::endl;
std::string shiftedText = shiftASCII(asciiText, shiftCount);
std::cout << "Shifted ASCII: " << shiftedText << std::endl;
std::string shiftedBinary = "";
for (char c : shiftedText) {
std::bitset<8> bits(c);
shiftedBinary += bits.to_string();
}
std::cout << "Thy Shifted Binary: " << shiftedBinary << std::endl;
originalInput = binaryCode;
translation = shiftedText;
}
int main() {
std::string runProgram;
std::cout << "Wouldst thou like to runneth the program? (Yes/No): ";
std::cin >> runProgram;
if (runProgram == "Yes" || runProgram == "yes" || runProgram == "Y" || runProgram == "y") {
std::string binaryCode;
std::cout << "Giveth to me thine code of 1's and 0's (without spaces): ";
std::cin >> binaryCode;
std::this_thread::sleep_for(std::chrono::seconds(2));
std::string hexCode = binaryToHex(binaryCode);
std::cout << "Ye ole Hex Code: 0x" << hexCode << std::endl;
std::this_thread::sleep_for(std::chrono::seconds(2));
std::vector input;
double number;
std::cout << "Entereth numbers (entereth any non-numeric charact'r to complete thy quest): ";
while (std::cin >> number) {
input.push_back(number);
}
std::vector filtered = applyFilter(input);
std::cout << "Thine Filtered value: ";
for (unsigned char value : filtered) {
std::cout << static_cast(value) << " ";
}
std::cout << std::endl;
std::string hashValue = hashSHA256(filtered);
std::cout << "A Hash value for thee: " << hashValue << std::endl;
std::this_thread::sleep_for(std::chrono::seconds(2));
std::string originalInput;
std::string translation;
int shiftCount;
bool validShiftCount = false;
while (!validShiftCount) {
std::string shiftCountStr;
std::cout << "Supply to me the count of shift: ";
std::cin >> shiftCountStr;
try {
shiftCount = std::stoi(shiftCountStr);
validShiftCount = true;
} catch (const std::exception& e) {
std::cout << "The count of shift is invalid." << std::endl;
}
}
decodeBinary(binaryCode, originalInput, translation, shiftCount);
std::cout << "Original Input of yourn: " << originalInput << std::endl;
std::cout << "Terrific Translation: " << translation << std::endl;
std::ofstream outputFile("what_you_had_said_was.txt");
if (outputFile.is_open()) {
outputFile << "1s&0s Code: " << binaryCode << std::endl;
outputFile << "Thine Hex Cast: 0x" << hexCode << std::endl;
outputFile << "I present you Filtered value: ";
for (unsigned char value : filtered) {
outputFile << static_cast(value) << " ";
}
outputFile << std::endl;
outputFile << "Hash value for thee: " << hashValue << std::endl;
outputFile << "Original Input of yourn: " << originalInput << std::endl;
outputFile << "Tantalizing translation: " << translation << std::endl;
outputFile.close();
std::cout << "Thine translation hath been saved to what_you_had_said_was.txt" << std::endl;
} else {
std::cout << "There hath been a major malfunction, not safe my leige." << std::endl;
}
std::cout << "Program hath finished its course." << std::endl;
} else {
std::cout << "Very well. Fare thee well!" << std::endl;
}
return 0;
}