Misja Gynvaela 003

MISJA 003            goo.gl/ZPQvV0               DIFFICULTY: ██░░░░░░░░ [2/10]

Tym razem nie trzeba nic robić. Wystarczy uruchomić poniższy skrypt, chwilkę
poczekać, a hasło zostanie wypisane. No, taką dłuższą chwilkę...

#!/usr/bin/python
def magic1(a, b):
  o = 0
  i = 0
  while i < a:
    o += 1
    i += 1
  i = 0
  while i < b:
    o += 1
    i += 1
  return o
def magic2(a, b):
  o = 0
  i = 0
  while i < b:
    o = magic1(o, a)
    i += 1
  return o
n1 = int("2867279575674690971609643216365"
         "4161626212087501848651843132337"
         "3373323997065608342")
n2 = int("1240905467219837578349182398365"
         "3459812983123659128386518235966"
         "4109783723654812937")
n = magic2(magic1(n1, n2), 1337)
print hex(n)[2:-1].decode("hex").splitlines()[0]

--

Odzyskaną wiadomość umieśc w komentarzu pod tym video :)
Linki do kodu/wpisów na blogu/etc z opisem rozwiązania są również mile
widziane!

P.S. Rozwiązanie zadania przedstawie na początku kolejnego livestreama.

Zastanawiam się czy ta misja, cytując znanego polskiego polityka, nie została przypadkiem przeceniona.

Po pobieżnej analizie kodu funkcji magic1 można zauważyć, że realizuje ona dodawanie, czyli następująca implementacja jest równoważna (dla liczb naturalnych):

def magic1(a, b):
  return a + b

Analogicznie, po analizie funkcji magic2, oczywistym jest, że realizuje ona mnożenie (dla liczb naturalnych), czyli:

def magic2(a, b):
  return a*b

Zbierając te modyfikacje do całości:

#!/usr/bin/python
def magic1(a, b):
  return a + b
 
def magic2(a, b):
  return a*b
 
n1 = int("2867279575674690971609643216365"
         "4161626212087501848651843132337"
         "3373323997065608342")
n2 = int("1240905467219837578349182398365"
         "3459812983123659128386518235966"
         "4109783723654812937")
n = magic2(magic1(n1, n2), 1337)
print hex(n)[2:-1].decode("hex").splitlines()[0]

Wywołanie z pomocą pythona2 daje następujący wynik:

Haslo: "WolneOprogramowanie!"

Z ciekawostek: próbowałem przepuścić oryginalny kod przez PyPy i nuitkę. W obu przypadkach po kilku minutach działania programu uznałem, że optymalizacja nie była dostateczna.

Leave a Reply

Your email address will not be published.