Cryptopals zestaw 1 ćwiczenie 4 i polecenie MORE

przez | 23 lutego 2020

Tym razem proste zadanie. Mamy plik testowy, w którym znajduje się 327 linii z których każda może zawierać potencjalną tajną wiadomość a my musimy znaleźć tą wiadomość i ją zdekodować. Napisałem, że zadanie jest proste ponieważ, podobny problem rozwiązywaliśmy w poprzednim zadaniu, ale mieliśmy jedną linię która była zaszyfrowana.

Najprościej rozwiązać ten problem sprawdzając wszystkie linijki pliku i na końcu wybranie tej która uzyska najlepszy wynik (co mam na myśli mówiąc wynik wyjaśniłem w poprzednim wpisie).

def s1challenge4():
    result = ""
    score = 0
    with open('testfiles/4.txt') as f:
        file_lines = f.readlines()
        for line in file_lines:
            if line[-1] == '\n':
                line = line[:-1]
            new_score, new_msg = find_best_key(line)
            if new_score > score:
                score = new_score
                result = new_msg
    print(result)

W związku z tym, że wpis wyszedł dość krótki mały bonus na koniec: komenda MORE w GNU/Linux. Jeżeli ktoś pracuje z systemem operacyjnym opartym o jądro Linuxa w terminalu na pewno kiedyś musiał wyświetlić zawartość jakiego pliku tekstowego. Można to zrobić na kilka sposobów:

  • Użyć edytora np. Vim, Emacs, Nano itd. – możemy przeglądać zawartość pliku i go edytować
  • Użyć polecenia CAT – wyświetlana jest zawartość pliku polecenie cat przestaje się wykonywać.
  • Użyć polecenia LESS – wyświetlana jest zawartość pliku a następnie program czeka, aż go zamkniemy naciskając Q, jeżeli plik jest duży możemy go przeglądać przy pomocy strzałek.

Możemy też użyć polecenia MORE, które działa trochę jak polecenie CAT a trochę jak polecenie LESS. Jeżeli plik da się w całości wyświetlić w oknie terminala polecenie MORE kończy się wykonywać, jeżeli nie da się wyświetlić całego pliku wyświetlany jest jego początek. W takim wypadku można naciskają klawisz V uruchomić edytor VI (albo VIM jeżeli jest zainstalowany).

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *