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 :)

  • RSS
  • Facebook
  • Twitter
  • Wykop
  • Reddit
  • del.icio.us
  • Google Bookmarks

Autor: Xion w Programowanie »


Możesz śledzić komentarze do tej notki poprzez kanał RSS 2.0.
Możesz zostawić komentarz lub śledzić tę notkę (trackback) ze swojej własnej strony.


7 komentarze/y do notki “Sprawa kalendarzowa”.
  1. Kurak:
    Grudzień 31st, 2007 o 13:32

    12 i 24 mają logiczne uzasadnienie

    ;)

  2. brodny:
    Grudzień 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:
    Styczeń 1st, 2008 o 15:19

    Nerd ;)

  4. zerlo:
    Styczeń 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:
    Styczeń 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):

    # -*- coding: cp1250 -*-

    # Coderian Time.py
    # Przelicza aktualny czas na "koderski" i wyświetla go

    import time
    import math

    # Stałe
    SECONDS_IN_MINUTE = 64
    MINUTES_IN_HOUR = 64
    HOURS_IN_DAY = 32
    DAYS_IN_MONTH = 32
    MONTHS_IN_YEAR = 8
    #
    SECONDS_IN_HOUR = SECONDS_IN_MINUTE * MINUTES_IN_HOUR
    SECONDS_IN_DAY = SECONDS_IN_HOUR * HOURS_IN_DAY
    SECONDS_IN_MONTH = SECONDS_IN_DAY * DAYS_IN_MONTH
    SECONDS_IN_YEAR = SECONDS_IN_MONTH * MONTHS_IN_YEAR

    # Pobieramy aktualny czas UTC w sekundach
    # od początku uniksowej epoki
    stamp = time.time()

    # Liczymy lata, miesiące, itd.
    year = int(math.floor(stamp / SECONDS_IN_YEAR))
    stamp -= year * SECONDS_IN_YEAR
    month = int(math.floor(stamp / SECONDS_IN_MONTH))
    stamp -= month * SECONDS_IN_MONTH
    day = int(math.floor(stamp / SECONDS_IN_DAY))
    stamp -= day * SECONDS_IN_DAY
    hour = int(math.floor(stamp / SECONDS_IN_HOUR))
    stamp -= hour * SECONDS_IN_HOUR
    minute = int(math.floor(stamp / SECONDS_IN_MINUTE))
    stamp -= minute * SECONDS_IN_MINUTE
    second = stamp

    # Wyświetlamy wynik
    print str(year) + "-"str(month)"-" + str(day),
    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:
    Styczeń 1st, 2008 o 22:59

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

    Przyjalem zamiast przyjelem...

Dodaj komentarz

Znaki nowej linii dodawane są automatycznie.
Do wstawiania kodu użyj [code][/code], a do wzorów (w LaTeX-u) [tex][/tex].
Dozwolne tagi HTML:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

 



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