Z1

Dane są dwa pliki tekstowe A i B. Linie w plikach są unikalne (w żadnym z plików żadna linia nie występuje dwa razy).

Napisz komendę basha, która wypisuje:
- linie które występują w A a nie występują w B
- linie które występują w B a nie występują w A
- linie które występują w A i występują w B

1. Oszacuj złożoność obliczeniową rozwiązania.
2. Przetestuje je na danych wejściowych zawierających około 1.000 linii, 10.000 linii, 100.000 linii, 1.000.000 linii.
3. Zaproponuj rozwiązanie, które realizuje zadaną funkcjonalność w jednym poleceniu, bez używania systemu plików, bez otwierania dodatkowych strumieni.

Przykład:

A =>
a1
b1

B=>

b1
a2

Wynik 1 => a1
Wynik 2 => a2
Wynik 3 => b1

Z2

Napisz to samo w C.

Z3

Dane są dwa katalogi A i B. Napisz skrypt w bash, który wypisze pliki, które są w A a nie ma ich w B, przy założeniu, że interesują nas tylko ścieżki względne do plików razem z nazwami.

Jak ten problem ma się do poprzedniego problemu?

Przykład:

A = /root
B = /tmp

Pliki /root/a/x.txt i /tmp/a/x.txt są takie same, natomiast /root/b/x.txt jest inny.

Z4

Dane są dwa katalogi A i B. Napisz skrypt w bash, który wypisze pliki, które są w A a nie ma ich w B, przy założeniu, że interesują nas zarówno nazwy jak i zawartość (dwa pliki są takie same jeśli mają tą samą ścieżkę względną łącznie z nazwą od korzenia wskazanego katalogu oraz mają taką samą zawartość).

Jak ten problem ma się do poprzednich problemów?

Z5

Dane są dwa katalogi A i B. Napisz skrypt w bash, który wypisze pliki, które są w A a nie ma ich w B, przy założeniu, że interesują nas zarówno nazwy jak i zawartość (dwa pliki są takie same jeśli mają taką samą zawartość).

Jak ten problem ma się do poprzednich problemów?

Z6

Problem najkrótszego ciągu dodawań, czyli operacji w postaci [cat nazwa1 nazwa2 > nazwa3], aby ostągnąć zadany wynik.

Napisać skrypt w bash, który bierze jako parametry liczbę N oraz plik A, w którym w każdej z linii znajdują się trzy liczby Pi, Qi i Ri, a następnie tworzy pliki P0 i Q0 z jedną linią, wykonuje sekwencję operacji cat Pi Q1 > Ri i sprawdza, czy w ostatnim utworzonym pliku znajduje się dokładnie N linii.

Przykład.

./skrypt 6
A =>
1 1 2
2 1 3
3 3 6

Prawdą jest, że liczby nie muszą odpowiadać ilości linii, równie dobrze będzie działało np. to:

A =>
100 100 5
5 100 77
77 77 1500

Z7

Napisz to samo, ale bez zapisywania czegokolwiek w systemie plików.