Skip to content

Instantly share code, notes, and snippets.

@mukeshgurpude
Last active November 3, 2021 13:56
Show Gist options
  • Save mukeshgurpude/706c41f5ce9d40a8299e8a9eb936c713 to your computer and use it in GitHub Desktop.
Save mukeshgurpude/706c41f5ce9d40a8299e8a9eb936c713 to your computer and use it in GitHub Desktop.
computer-networks
def xor(a: str, b: str) -> str:
return bin(int(a, 2) ^ int(b, 2))[2:].zfill(len(a) - 1)
def generator(data: str, divisor: str) -> str:
initial = data
for i in range(len(divisor)):
if len(data) != len(divisor): data += '0'
if data[0] == '0':
data = xor(data, '0000')
else:
data = xor(data, divisor)
return initial + data
def checker(code: str, divisor: str) -> str:
data, bits = code[:len(divisor)], code[len(divisor):]
for i in range(len(divisor)):
if len(data) != len(divisor): data += bits[i - 1]
if data[0] == '0':
data = xor(data, '0000')
else:
data = xor(data, divisor)
return data == '000'
if __name__ == '__main__':
# Ask for data input
data = input('Enter data: ')
# Check if data is valid, it must be a string of 0 and 1
if not data.isdigit() or data.count('0') + data.count('1') != len(data):
print('Data must be a string of 0 and 1')
exit()
divisor = '1101'
print('Encoded Data: ', generator(data, divisor))
recv = input('Enter the received data: ')
if checker(recv, divisor) == True:
print('Data is correct')
else:
print('Data is not correct')
#include <iostream>
#include <cmath>
#include "functions.h"
using namespace std;
int main() {
int m, r, n;
cout << "Enter message length: ";
cin >> m;
// Use find_r function from temp.h to find r
r = find_r(m);
n = pow(2, r);
int data_bits_reversed[n];
int data_bits[n];
cout<<"Enter the data: ";
int count = r-1;
for (int i = n - 1; i >= 0; i--) {
if(i == pow(2, count)) {
data_bits_reversed[i] = 0;
count--;
} else if( i <= (m + count)) {
int bit;
cin >> bit;
data_bits_reversed[i] = bit;
} else {
data_bits_reversed[i] = 0;
}
}
for(int i = 0; i < r; i++) {
data_bits_reversed[(int) pow(2, i)] = r_value(n, data_bits_reversed, i);
}
for (int i = 0; i < n; i++){
data_bits[i] = data_bits_reversed[n - i - 1];
}
// Print the data
cout <<endl << "Encoded Data: ";
count = 0;
for (int i = 0; i < n; i++) {
cout << data_bits[i];
if(data_bits[i] == 1) count++;
}
if(count%2 == 0) cout << endl << " (Even) Parity" << endl;
else cout << " (Odd) Parity" << endl;
return 0;
}
#include<iostream>
using namespace std;
bool get_parity_bit(unsigned int number) {
int parity = 0;
while (number > 0){
parity = parity + number%2;
number = number / 2;
}
return parity%2;
}
int main() {
/* Assumed number in the decimal form
e.g.
number = 7
*/
unsigned int number;
bool expected_parity;
cout<<"\tPlease enter the parity for this operation (even: 0, odd: 1):\t";
cin>>expected_parity;
cout<<"\tPlease enter the received data:\t";
cin>>number;
if( get_parity_bit(number) == expected_parity ) {
cout<<"\t\tNo error in the received bits"<<endl;
}else{
cout<<"\t\tParity mismatch, please rerequest the data from sender"<<endl;
}
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment