Problem hidden
|This problem was hidden by Editorial Board member probably because it has incorrect language|version or invalid test data, or description of the problem is not clear.|

WI_DATY - Konwersja dat

Różnych sposobów zapisu daty i czasu (o czym wielokrotnie się wszyscy przekonywaliśmy) jest całe mnóstwo i nierzadko z tego powodu można popaść z zupełnie niespodziewane kłopoty. Weźmy pod uwagę choćby taki aspekt problemu – Polacy zwykli zapisywać daty w naturalnej dla nich kolejności DD.MM.RR (w tej konwencji zapis 01.05.09 oznacza pierwszy maja roku 2009). Amerykanie czynią to zupełnie inaczej, stosując formę MM.DD.RR (a więc ten sam zapis dla Amerykanina oznaczać będzie piąty stycznia). Międzynarodowa norma ISO 8601 zaleca, aby daty (niezależnie od zwyczajów i konwencji lokalnych) zapisywać w konwencji RRRR-MM-DD i takiego też sposobu będziemy używać w naszym zadaniu.

Systemy komputerowe mogą wprowadzać jeszcze bardziej skomplikowane konwencje, służące np. minimalizacji rozmiaru pamięci potrzebnej do przechowywania daty.

Przyjrzyjmy się bliżej sposobowi (nazwijmy go roboczo standardem DOSFAT), w jaki poczciwy system DOS z systemem plików FAT przechowuje datę modyfikacji pliku. Używa się do tego celu jedynie szesnastu bitów i czyni się to w sposób następujący:

  • pierwszych 7 bitów koduje liczbę lat począwszy od roku 1980 (oczywistym jest, że pomysłodawcy tego rozwiązania nie przewidywali konieczności pamiętania dat sprzed tego roku, ale musieli zapewne domyślać się, że po roku 2107 cały ten wynalazek stanie się bezużyteczny)

  • kolejne 4 bity kodują numer miesiąca (tu nie ma niespodzianek – 0001 to styczeń, a 1100 to grudzień

  • ostatnie 5 bitów to numer dnia miesiąca (tu również nie natkniemy się cokolwiek niespodziewanego)

 

W tej konwencji data 18 września 2009 roku będzie więc zapisana następującym ciągiem bitów:

0011101100110010

Polecenie: napisz program, który wczyta ze standardowego wejścia datę zapisaną w konwencji DOSFAT (ciąg 16 cyfr binarnych) lub ISO8601 (ciąg 10 znaków) i wypisze odpowiadającą jej datę zapisaną w konwencji przeciwnej. Jeśli przekształcenie takie jest z jakichkolwiek powodów niemożliwe, należy wypisać słowo ERROR.

Dane wejściowe: na standardowym wejściu może pojawić się jedna z poniższych danych:

  • ciąg 16 znaków, złożony wyłącznie z cyfr 0 i 1 (data DOSFAT)

  • ciąg 10 znaków, złożony kolejno z czterech cyfr dziesiętnych, znaku minus, dwóch cyfr dziesiętnych, znaku minus i dwóch cyfr dziesiętnych (data ISO8601)

Dane wyjściowe: ciąg 10 lub 16 znaków reprezentujący datę w konwencji przeciwnej do tej, która została odczytana ze standardowego wejścia albo słowo ERROR, jeśli taka data nie istnieje.

Przykład:

Wejście:

0011101100110010

Wyjście:

2009-09-18

 

Wejście:

2009-09-18

Wyjście:

0011101100110010

 

Wejście:

0000000000000000

Wyjście:

ERROR


Dodane przez:Sławomir Wernikowski
Data dodania:2009-09-12
Limit czasu wykonania programu:0.200s
Limit długości kodu źródłowego50000B
Limit pamięci:1536MB
Cluster: Cube (Intel G860)
Języki programowania:DOC C CSHARP CPP C99 JAVA PAS-GPC PAS-FPC PDF PS
Pochodzenie:Konkurs o nagrodę Dziekana WI ZUT w Szczecinie (2009)
© Spoj.com. All Rights Reserved. Spoj uses Sphere Engine™ © by Sphere Research Labs.