Code katas - probleme/proiecte

Haideti sa facem o lista cu proiecte/probleme de tip code kata/interviu/pedagogic.

Eu propun:

  1. O versiune simplificata de React
  2. Versiune simplificata de Redux
  3. Un DI container
  4. Un pachet de autentificare similar passport.js doar pentru oauth
  5. Versiune rudimentare de framework de testare similar cu Jest
3 Likes

Un proiect mai vechi de-al meu.

1 Like

Strict pedagogic, pe partea de limbaje de programare: engine RE, interpretor Lisp (sau vreun dialect simplificat), compilator simplu, parsere de mână.

Nu neaparat un katas, dar de prin vremurile facultatii

Modulare in frecventa a unui sir de biti(semnal discret). Codul este in Matlab.

%Tema 1 Prelucrarea semnalelor.(digital signal processing)
%Popescu Ionut Cosmin, 331AC
%modulation of a bit stream using FSK

data = [0 0 1 1 1 0 0 1 1 0 1 0 1 1 0 0 ]; %sirul de biti pe care il vom modula
%stem(data)%reprezentare date.
bit_period = 0.0001;
disp('Mesajul catre transmitatorul FM');%mesage to FM trasmitter
disp(data);


%am reprezentat sirul de biti ca un semnal dreptunghiular
%representation of the bit stream "data" as a rectangular singnal
bit = [];
for n=1 : 1 : length(data)
    if data(n) == 1;
        a = ones(1, 100);
    else data(n) = 0;
        a = zeros(1, 100);
    end
     bit = [bit a];

end

t1 = bit_period / 100 : bit_period/100 : 100 * length(data) * (bit_period/100);
subplot(4,1,1);
plot(t1, bit, 'lineWidth', 3);
grid on;
xlabel('timp');%time
ylabel('amplitudine');%amplitude
title('Datele trimise ca semnal digital');%data as digital signal


%%modularea semnalului
%modulation of signal
bit_rate = 1 / bit_period;
frecv_bit_0 = bit_rate * 8;
frecv_bit_1 = bit_rate * 32;
t2 = bit_period / 99 : bit_period / 99 : bit_period;
b = length(t2);%signal size
signal = [];

for i = 1 : 1 : length(data)
    if(data(i) == 1)
        y = sin(2 * pi * frecv_bit_0 * t2);
    else
        y = sin(2 * pi * frecv_bit_1 * t2);
    end
    signal = [signal, y];
end

t3 = bit_period / 99 : bit_period / 99 : bit_period * length(data);
b1 = length(t3);
subplot(4, 1, 2);
plot(t3, signal);
title('date modulate FM');


%adaugare zgomot peste semnalul modulat
% awgn - add white gaussian noise
noisy_signal = awgn(signal, 1.5);
subplot(4, 1, 3);
plot(noisy_signal);


%demodulare
%demodulation
mn = [];
for n = b : b : length(noisy_signal)
    t = bit_period / 99 : bit_period / 99 : bit_period;
    y1 = sin(2 * pi * frecv_bit_0 * t2);
    y2 = sin(2 * pi * frecv_bit_1 * t2);
    
    c = y1.*noisy_signal((n-(b-1)):n);
    c1 = y2.*noisy_signal((n-(b-1)):n);
    t4 = bit_period / 99 : bit_period / 99 : bit_period;
    
    z1 = trapz(t4, c); %integrare dupa t4 a semnalelor fm 
    z2 = trapz(t4, c1);
    z3 = round(2 * z1 / bit_period);
    z4 = round(2 * z2 / bit_period);
    
    if(z3 > 0.5)%amplitudianea semnalului este 1 %comparatorul
        digital_signal = 1;
    else (z4 > 0.5)
          digital_signal = 0;
    end
    
    mn = [mn, digital_signal];
end
disp('Semnalul digital reconstruit');
disp(mn);

%reprezentare informatia binra
%display bitstream as individual bits
bit = [];
for n=1 : 1 : length(data)
    if data(n) == 1;
        a = ones(1, 100);
    else data(n) = 0;
        a = zeros(1, 100);
    end
     bit = [bit a];

end
t1 = bit_period / 100 : bit_period/100 : 100 * length(mn) * (bit_period/100);
subplot(4,1,4);
plot(t1, bit, 'lineWidth', 3);
grid on;
xlabel('timp');
ylabel('amplitudine');
title('Datele receptionate');

Un kernel.

2 Likes

Un alocator de memorie.

Un blockchain minimal.

Un unit test (mocha/jest) dupa story inainte de a scrie cod. (un todo list, o aplicatie de rating carti/filme)
Un e2e test cu puppeteer/cypress inainte de a avea feature-ul implementat.
Implementarea feature-ului ca sa treaca testele scrise mai sus.
Pe backend un API de autentificare care implementeaza JWT dupa recomandarile OWASP. (necesita cunostiile speciale dar e simplu)
Un client de graphql. (necesita cunostiinte speciale, dar e simplu)
O extensie de chrome pentru a cauta printre tab-uri.
O extensie de VSCode pentru a rula un test de jest la describe/it.
O extensie de VSCode pentru a rula o linie de cod sub cursor.
O extensie de VSCode pentru a gasi functii impure.