#include "encoder.h"
#include "encoderlib.h"
void encode(int N, int M[]) {
for (int i = 0; i < N; i++) {
// Her 8-bitlik sayıyı 2-bitlik 4 parçaya bölüyoruz
for (int j = 0; j < 4; j++) {
// j=0: 0-1. bitler, j=1: 2-3. bitler...
int val = (M[i] >> (j * 2)) & 3;
// Papağan değeri: İlk 6 bit indeks, son 2 bit hangi parça olduğu
// Toplam 8 bit (0-255)
int parrot_val = (i << 2) | j;
// Parçanın sayısal değeri (0, 1, 2 veya 3) kadar papağan gönder
// NOT: Eğer val 0 ise hiç papağan gitmez.
for (int k = 0; k < val; k++) {
send(parrot_val);
}
}
}
}
#include "decoder.h"
#include "decoderlib.h"
#include <vector>
void decode(int N, int L, int X[]) {
// Papağan değerlerinin kaçar kez geldiğini tutan frekans dizisi
int counts[256] = {0};
for (int i = 0; i < L; i++) {
counts[X[i]]++;
}
for (int i = 0; i < N; i++) {
int original_byte = 0;
for (int j = 0; j < 4; j++) {
// encode kısmındaki parrot_val'ı geri çözüyoruz
int parrot_val = (i << 2) | j;
int val = counts[parrot_val];
// Parçayı ait olduğu bit pozisyonuna yerleştir
original_byte |= (val << (j * 2));
}
output(original_byte);
}
}