Untitled
unknown
plain_text
3 years ago
1.8 kB
16
Indexable
#include <bits/stdc++.h>
using namespace std;
class HammingCode {
private:
string s;
vector<int> msg;
int r;
int m;
public:
void func() {
m = s.size();
r = 0;
while (true) {
if (pow(2, r) >= (m + r + 1))
break;
else
r++;
}
// cout << "r: " << r;
vector<int> rs;
int x = 0;
for (int i = 0; i < r; i++) {
rs.push_back(pow(2, x));
x++;
}
int sz = rs.size() + m;
vector<int> message(sz, -2);
x = 1;
for (int i = 0; i < r; i++) {
message[sz - x] = -1;
x = x * 2;
}
x = 0;
sz = message.size();
for (int i = 0; i < sz; i++) {
if (message[i] == -1)
continue;
if (x < m)
message[i] = (s[x++] - '0');
}
// for(int i=0;i<sz;i++) cout<<message[i]<<" ";
int XOR = 0;
x = 1;
int drop = 1;
string error = "";
for (int i = 0; i < r; i++) {
int j = sz - x;
x = x * 2;
for (;; j -= drop) {
if (j < 0) {
j+=drop;
// for(int l=j;l>=0;l--)
}
if (message[j] >= 0)
XOR = XOR ^ (message[j]);
}
error += (XOR + '0');
XOR = 0;
}
// cout<<"error: "<<error;
x = 0;
for (int i = 0; i < sz; i++) {
if (message[i] != -1)
continue;
message[i] = error[x++] - '0';
}
// for (int i = 0; i < sz; i++)
// cout << message[i] << " ";
error = "";
XOR = 0;
x = 1;
drop = 1;
for (int i = 0; i < r; i++) {
int j = sz - x;
x = x * 2;
for (; j >= 0; j -= drop) {
if (message[j] >= 0)
XOR = XOR ^ (message[j]);
}
error += (XOR + '0');
XOR = 0;
}
cout << "error: " << error;
// bool isError = 0;
// x = 1;
// for (int i = 0; i < error.size(); i++) {
// if (error[i] != '0') {
//
// }
// }
}
HammingCode() {
cout << "\nENTER MSG: ";
cin >> this->s;
func();
}
};
int main() {
cout << "s";
HammingCode obj;
return 0;
}
Editor is loading...