Co masz zrobić jutro, zrób dziś. Rozwiązanie zagadki dla cierpliwych.

Zagadkę, którą tydzień temu postawiłem przed p.t. Czytelnictwem blogu można rozwiązać na kilka sposobów.

Sposób pierwszy: policzyć algorytmem. Na przykład Pythonem:

dzień, zostało = 1, 1
while zostało > 0:
    zrobione = 2*zostało/(366-dzień)
    zostało -= zrobione
    print(dzień, zrobione, zostało)
    dzień += 1

W wyniku zobaczymy, że ostatnia praca została wykonana w dniu numer 364, a więc w przedostatni dzień roku:

1 0.005479452054794521 0.9945205479452055
2 0.005464398615083547 0.989056149330122
3 0.005449345175372573 0.9836068041547494
4 0.005434291735661599 0.9781725124190879
5 0.005419238295950625 0.9727532741231373
6 0.0054041848562396515 0.9673490892668977
7 0.005389131416528678 0.961959957850369
8 0.005374077976817704 0.9565858798735514
...
358 0.00010537407797681763 0.00031612223393045287
359 9.032063826584368e-05 0.0002258015956646092
360 7.526719855486973e-05 0.00015053439710973948
361 6.021375884389579e-05 9.032063826584369e-05
362 4.5160319132921845e-05 4.5160319132921845e-05
363 3.0106879421947898e-05 1.5053439710973947e-05
364 1.5053439710973947e-05 0.0

Sposób drugi: policzyć w arkuszu. Na przykład tak:

...

Też widać, że na koniec 364 dnia cała praca została wykonana.

Zerknijmy jeszcze na wykres pozostałej pracy w czasie:

Pomarańczowa część wykresu pokazuje ilość pozostałej pracy przy podejściu "normalnym" tj. liniowym, kiedy codziennie wykonujemy 1/365 zadania. Niebieska - przy podejściu jak w zagadce.

Okazuje się, że owszem, na początku "zaoszczędzamy" całkiem sporo czasu wykonując więcej pracy niż wynikałoby to ze średniej dziennej. Ale ilość pozostałej pracy stale się zmniejsza, a wyliczenie dziennej pracy do wykonania opiera się na tym właśnie, co pozostało; czym bliżej końca tym mniej pracy wykonujemy. Dokładnie w połowie roku, drugiego lipca, czyli w dniu numer 183, niebieska krzywa osiąga stromiznę linii pomarańczowej i od tego dnia wykonujemy codziennie mniej niż 1/365 zadania, a więc "przepada" to, co "nadgoniliśmy" dotychczas:

Ale - jak zresztą zasugerowałem w treści samej zagadki - można ją rozwiązać w pamięci, bez pomocy arkuszy kalkulacyjnych czy w ogóle komputerów!

A jak?

A no tak: skoro każdego dnia wykonujemy ułamek pracy wyliczany jako dwukrotność pracy pozostałej podzieloną przez liczbę pozostałych dni, to dopóki ta liczba pozostałych nie osiągnie dwójki, nigdy nie wykonamy całej pracy. A liczba pozostałych dni osiąga dwójkę w 364 dniu, czyli 30 grudnia rano, na dwa dni przed końcem roku. W tym dniu wykonamy 2/2 pozostałej pracy czyli w Sylwestra mamy wolne.

A jak Wam poszło?

Szybko. I same poprawne odpowiedzi!

1Waldek wygrał tę rundę, przysyłając poprawne rozwiązanie jako pierwszy, zaledwie w kilka godzin po publikacji zagadki:

2Również jeszcze tego samego dnia swoją odpowiedź nadesłał Rafał. A konkretnie dwie, pierwszą błędną, przymykam oko, a zaraz potem drugą, poprawną. Plusik za zauważenie własnego błędu i szybką poprawkę!

3Jeszcze się dobrze nie zrobił wieczór, a już pokazał się trzeci rozwiązujący. Cichy idzie na rekord jeśli chodzi o zwięzłość odpowiedzi 🙂

4Nazajutrz Rozie, bez pudła:

5Chwilę potem rekordowo krótkie rozwiązanie nadesłał Piotr:

6Potem dwa dni ciszy, wyczerpała się pula zwyczajowych rozwiązujących. Aż tu nagle poprawne rozwiązanie odgadł Zielak:

6 komentarzy

  1. Aż zgłupiałem i musiałem wrzucić do translatora tytuł tego okienka “Leave a Comment” – jednak żadnego idiomu nie zobaczyłem… To pewnie dlatego, że u nas komentarze w okienku edycyjnym nadal się pisze, a nie zostawia. Pozostawiony komentarz może się poczuć smutny, samotny lub opuszczony. Wrażliwym osobnikom może zrobić się go żal. Paru romantyków wznieci na Albumie akcję ratunkową i… pominę parędziesiąt stron beletrystyki i przejdę do kody: ukamienują cię.

    Piękne jest to, że mój, wspaniały i precyzyjny na ogół, translator DeepL też zgłupiał doszczętnie i tępo tłumaczy “opuść komentarz” oraz “osamotnij komentarz” jako “Leave a Comment”. Żadnych niuansów – czysto łopatologicznie, według smartfoniarzowych prymitywizmów językowych. Aż opada rzyć…

    Hola, to tylko dygresja – przecież nie o tym miałem pisać. Ale o tym tak:

    Jeżeli liczbę 2 z twojego zadania nazwiemy “licznik”, czyli L, a liczbę 366 – “mianownik”, czyli M, to można napisać ogólny wzór na pracę wykonaną w dniu n: X*L/(M-n). To X (reszta zadania do wykonania) łatwo da się wyliczyć w arkuszu, tak jak ty to zrobiłeś w rozwiązaniu zadania.

    Jeśli ktoś myśli, że dla M=366 (jak w zdaniu) i L=3 otrzymamy wynik 363 to ma rację, a dla L=4 wynik 362, to też się nie myli. Ale dla większych L zaczynają się dziać dziwne rzeczy (dla którego to się zaczyna?).
    Na logikę powinno zawsze być tak, że koniec, to: M-L. Ale taka logika okazuje się zwodnicza.

    Proszę (zadanie uzupełniające), niech ktoś ambitny wyjaśni jasno, jednoznacznie i do końca porąbaną logikę tego zadania – czyli rezultaty uzyskiwane dla dowolnych L i M – powiedzmy na początek, że L=M, ujemne, rzeczywiste i zespolone – to brzmi, jak żart, ale tylko brzmi, gdyż większość tych przypadków jest – rzecz jasna – sprzeczna, ale nie wszystkie. Miłego Riemannowania…

    Waldek

    P.S. 1 Przypadek ogólny jest tak chory, że podczas rozwiązywania rozbolały mnie włoski przy gruczołach potowych. Jeśli ktoś dba o higienę, to nie radzę zabierać się za to zadanie.

    P.S. 2 Poza tym spoko – nadal czuję się dobrze.

  2. Zadanie dodatkowe nr 2:
    Należy odtworzyć oryginalną treść mojej poprzedniej wiadomości, wiedząc, że xpilowy edytor “Leave a Comment” usunął znaki większości i mniejszości. Bez tych znaków moje poprzednie wyznania nie mają żadnego sensu…

  3. Zgłębiam tę zagadkę, a im bardziej ją poznaję, tym mniej ją rozumiem… Niby wszystko jest oczywiste, a cały czas wyskakują dziwadełka, które trudno ogarnąć.

    Żeby każdy mógł chociaż liznąć tej dziwności, to proszę sobie policzyć w arkuszu kalkulacyjnym coś takiego:
    Przypomnę wzór na pracę wykonaną w dniu n: L/(M-n)X_n, gdzie:
    – L: licznik ułamka, w zadaniu było L=2
    – M: liczba o 1 większa od liczby dni w roku. Na Ziemi M=365+1=366, ale na Marsie będzie inaczej.
    – X_n – część zadania pozostała do wykonania w dniu n rano. Jest to po prostu 1 – suma dotychczas wykonanych zadań cząstkowych.

    Jeżeli teraz zrobimy sobie tabelkę podobną do tej, którą zrobił Gospodarz prezentując rozwiązanie, ale zamiast L=2 zaczniemy wstawiać inne liczby, to zacznie się dziać. Oznaczając przez K numer dnia, w którym zakończy się zadanie otrzymamy z arkusza:
    L=2 K=364
    L=3 K=363
    L=4 K=362
    L=5 K=361
    L=6 K=360
    L=7 K=359
    i wreszcie nieoczekiwane
    L=8 K=357
    Powinno być K=358, a nie jest! Dlaczego? To nielogiczne…

    Wcześniej pytałem też o rozwiązanie w liczbach rzeczywistych. Metodą sprawdzania wyniku dla kolejnych cyfr po przecinku znalazłem liczbę:
    L=7,087135221… dla której jeszcze K=359, ale już dla
    L=7,087135222 będzie K=357.

    Różnica tych L o 10^{-9} daje skokową zmianę K o 2. Nie ma, nawet w liczbach rzeczywistych płynnego przejścia przez K=358. Mówiąc inaczej K=358 jest niemożliwe. I można by na tym skończyć, gdyby nie kilka matematycznych zagwozdek:

    1. Pierwsza, to wyprowadzenie prostego, jednoznacznego wzoru na pracę wykonaną do dnia n. Proste? Wcale nie, proszę spróbować.

    2. Druga zagwozdka, to dla świrów, takich, jak ja – jak już ktoś się całkiem zagłębi w rachunki i wyniki z dziedziny liczb zespolonych – tam da się uzyskać K=358 (tak!) i wszystkie inne, ale z jednym, jedynym wyjątkiem K=183… I tu na razie poległem. Może wejdę w kwaterniony?

    1. Obstawiam, że masz gdzieś błąd we formule liczącej K. Pobawiłem się przed chwilą arkuszem i dla L=7 wyszło mi K=359, a dla L=8 K=358 (a nie, jak piszesz, 357). Testowałem dalej aż do L=11 i wszystko bez niespodzianek.

      Ewentualnie ja mam gdzieś błąd w swojej formule…

      Tu moje formuły: https://i.imgur.com/SR42dxn.png
      A tutaj wyniki: https://i.imgur.com/HuncdWW.png

      Pomysły?

      P.S. Co do edycji komentarzy to pozbyłem się niedawno wtyczki WPDisquz (za drogo mnie kosztowała – płaciłem za rzeczy, których nie używałem), dlatego zniknęła możliwość edytowania. Dzisiaj dodałem inną wtyczkę, która pozwala na edycję komentarza w ciągu godziny od jego publikacji. Powinno być OK.

      1. Wygląda na klasyczny problem z zaokrągleniami. Czyli, że błąd może nie tkwić w formule, a w narzędziu. Czyli wersja programu w którym jest arkusz itp. BTW możecie porównać na żywo np. na Google Sheets, bez przekazywania formuł w obrazkach.

        W Pythonie także nie ma przeskoku o 2 dla L=8, więc to nie właściwość zagadki.

Leave a Comment

Komentarze mile widziane.

Jeżeli chcesz do komentarza wstawić kod, użyj składni:
[code]
tutaj wstaw swój kod
[/code]