Sprawa kalendarzowa

2007-12-31 11:40

Dzisiejszy dzień nie jest zwyczajny – ale tylko dlatego, że kiedyś tak postanowiono. Z bliżej nieokreślonych przyczyn Nowy Rok świętujemy wtedy, gdy za oknami jest szaro, buro i ponuro (względnie biało i zimno). Oczywiście wszystko zależy od punktu widzenia, a ten od punktu siedzenia – lub raczej zamieszkania tudzież klimatu – ale można sobie wyobrazić lepiej dobrany termin…
W ogóle należy stwierdzić, że używany przez nas kalendarz jest wybitne nielogiczny :) Wprawdzie na pewne występujące w nim liczby (zwłaszcza 365 jako najczęstsza liczbę dni w roku) nie da się nic poradzić, ale inne – jak 12, 24, 60, itp. – nie mają specjalnego uzasadnienia ani też żadnej logiki w sobie. Może więc dałoby się jakoś ten system usprawnić? Proponuję “subtelne” przerobienie go na modłę koderską, aby kluczową rolę odgrywały w nim… potęgi dwójki :) Kalendarz ten mógłby wyglądać następująco:

  • Zaczynamy od sekundy, którą aczkolwiek zostawimy w spokoju, jako że jest bardzo dobrze zdefiniowana sposób fizyczny. U nas miałaby więc tę samą długość.
  • Minuta powinna mieć naturalnie 64 (26) sekundy.
  • Analogicznie, godzinę ustalimy jako trwającą 64 minuty.
  • Z długością dnia jest pewien problem, jako że 24 znajduje się dokładnie między dwoma potęgami dwójki (16 i 32). Dwa powody przemawiają jednak za tym, aby ustalić tę długość na 32 godziny. Po pierwsze dlatego, iż pozwoli nam to później dobrać dogodniejszą długość roku. A po drugie: dla kodera obecna 24-godzinna doba jest zwykle za krótka, więc dobrze by było ją wydłużyć :-)
  • Tydzień miałby oczywiście 8 dni. Zauważmy, że jeśli weekend dalej byłby dwudniowy, to w tym systemie miałby on 64 godziny – czyli o 50% więcej!
  • Z miesiącem też nie ma kłopotu: okrągłe 4 tygodnie dałyby łącznie 32 dni w każdym miesiącu. Równa długość miesięcy jest zresztą bardzo praktyczna, bowiem wtedy każda data miałaby jednoznacznie przypisany dzień tygodnia.
  • Jeśli zaś chodzi o liczbę miesięcy w roku, to powinna ona wynosić 8. Wtedy nasz koderski rok będzie miał bardzo przyjemną liczbę 256 dni :)

Nietrudno zauważyć, że możliwe są jeszcze trzy inne warianty tego kalendarza, zależne od liczby godzin w dobie i miesięcy w roku (które to w normalnym kalendarzu są niefortunnie ‘pośrodku’). Dwa skrajne produkowałyby jednak rok bardzo różniący długością od obecnego. Trzeci – z 16-godzinnym dniem i 512-dniowym rokiem – miałby z kolei zbyt dużo dni w roku: liczbie 365 (lub 366) jest bowiem nieco bliżej do 256.
Najciekawsze jest to, że w kalendarzu opisanym powyżej rok byłby tylko o 6,33% dłuższy od obecnego. Jeśli więc wystartowalibyśmy koderski rok dzisiaj o północy, to jego koniec przypadłby nad ranem 23 stycznia 2009 roku. Myślę jednak, że istnieją o wiele lepsze punkty startowe, wśród których od razu nasuwa się początek epoki uniksowej, czyli północ 1 stycznia 1970 roku w UTC.

Oczywiście ta wielce pożądana reforma kalendarza napotyka pewne problemy praktyczne. Inna długość doby zapewne byłaby jednym z nich, chociaż oznaczałaby jedynie, że nowa data pojawia się na zmianę albo w środku nocy, albo w środku dnia. Niestety nawet ta prawidłowość dość szybko przestałaby obowiązywać, a w dalszej perspektywie te 6,33% różnicy w długości roku też zaczęłoby być widoczne. I w ten sposób ten genialny w swej prostocie (czy raczej głupocie ;]) pomysł należałoby niestety odrzucić. Po prostu astronomia nie chce z nami współpracować ;P
Ale jest i pewna dobra strona. Otóż napisanie prostego zegarka, wyświetlającego czas w tym systemie “koderiańskim” to zajęcie nieskomplikowane i mało pracochłonne – idealne jako odpoczynek po sylwestrze :)


Author: Xion, posted under Programming »


7 comments for post “Sprawa kalendarzowa”.
  1. Kurak:
    December 31st, 2007 o 13:32

    12 i 24 mają logiczne uzasadnienie

    ;)

  2. brodny:
    December 31st, 2007 o 16:16

    Xion, jesteśmy przez Sylwestrem, a nie po :) Takie wnioski to po północy, ew. jutro rano :D

  3. Charibo:
    January 1st, 2008 o 15:19

    Nerd ;)

  4. zerlo:
    January 1st, 2008 o 19:59

    Napisal juz ktos konwerter? Nie jestem pewien co do poprawnosci mojego, ale wychodzi mi (dd/mm/yy):
    30.06.36
    Przyjelem, ze rok 1970 byl rokiem 1.

  5. Xion:
    January 1st, 2008 o 21:07

    zerlo: Jak możesz? Przecież prawdziwi programiści liczą wszystko od zera :) Nie widzę więc powodu, aby tutaj czynić wyjątek ^^
    Jeśli o przeliczanie, to napisałem prosty skrypt (wyświetla aktualny czas):

    1. # -*- coding: cp1250 -*-
    2.  
    3. # Coderian Time.py
    4. # Przelicza aktualny czas na "koderski" i wyświetla go
    5.  
    6. import time
    7. import math
    8.  
    9. # Stałe
    10. SECONDS_IN_MINUTE = 64
    11. MINUTES_IN_HOUR = 64
    12. HOURS_IN_DAY = 32
    13. DAYS_IN_MONTH = 32
    14. MONTHS_IN_YEAR = 8
    15. #
    16. SECONDS_IN_HOUR = SECONDS_IN_MINUTE * MINUTES_IN_HOUR
    17. SECONDS_IN_DAY = SECONDS_IN_HOUR * HOURS_IN_DAY
    18. SECONDS_IN_MONTH = SECONDS_IN_DAY * DAYS_IN_MONTH
    19. SECONDS_IN_YEAR = SECONDS_IN_MONTH * MONTHS_IN_YEAR
    20.  
    21. # Pobieramy aktualny czas UTC w sekundach
    22. # od początku uniksowej epoki
    23. stamp = time.time()
    24.  
    25. # Liczymy lata, miesiące, itd.
    26. year = int(math.floor(stamp / SECONDS_IN_YEAR))
    27. stamp -= year * SECONDS_IN_YEAR
    28. month = int(math.floor(stamp / SECONDS_IN_MONTH))
    29. stamp -= month * SECONDS_IN_MONTH
    30. day = int(math.floor(stamp / SECONDS_IN_DAY))
    31. stamp -= day * SECONDS_IN_DAY
    32. hour = int(math.floor(stamp / SECONDS_IN_HOUR))
    33. stamp -= hour * SECONDS_IN_HOUR
    34. minute = int(math.floor(stamp / SECONDS_IN_MINUTE))
    35. stamp -= minute * SECONDS_IN_MINUTE
    36. second = stamp
    37.  
    38. # Wyświetlamy wynik
    39. print str(year) + "-" +  str(month) +  "-" + str(day),
    40. print str(hour) +  ":" + str(minute) + ":"  + str(second)

    Przykładowy wynik:
    Normalny kalendarz (GMT+1): 2008-01-01 21:05:00.317000
    Koderski kalendarz (UTC): 35-5-29 9:51:44.3169999123

  6. zerlo:
    January 1st, 2008 o 22:59

    Blisko bylo. Widac, ze marny ze mnie programista, ale _zastanawialem_ sie nad 0. :D

    Przyjalem zamiast przyjelem…

Comments are disabled.
 


© 2017 Karol Kuczmarski "Xion". Layout by Urszulka. Powered by WordPress with QuickLaTeX.com.