Kolejność formatowania dat jest jedną z najbardziej złożonych i dzielących kwestii, przed którymi stoi dziś świat. Niektórzy z nas zdecydowanie twierdzą, że miesiąc / dzień / rok jest właściwy, biorąc pod uwagę, że tak mówimy na głos. Inni głośno ogłaszają, że dzień / miesiąc / rok jest najlepszy, ponieważ ustawia terminy w porządku rosnącym według czasu, który reprezentują.
Wystarczy. Komputery mogą rozwiązać ten spór w prosty i uczciwy sposób. Twój kod, pełna funkcja lub program, będzie zawierał ciąg daty oddzielony ukośnikami, np 12/1/2015
. Uwaga: jest to dokładny format, bez zer wiodących i czterocyfrowego roku na końcu.
- Jeśli jest to zdecydowanie Miesiąc / Dzień / Rok, np.
10/31/1998
Wypisz tekstową reprezentację tej daty w dokładnie takim formacie, z pełną nazwą miesiąca, dniem i rokiem:October 31, 1998
- Jeśli jest to zdecydowanie dzień / miesiąc / rok, na przykład
25/12/1989
, wyjście tego samego rodzaju reprezentacji tekstu:December 25, 1989
. - Jeśli nie jest jednoznaczne, czy jest to miesiąc / dzień / rok, czy dzień / miesiąc / rok, wpisz datę, która rozwiązuje niejednoznaczność, łącząc dwie możliwe daty w następujący sposób:
- Utwórz nową nazwę miesiąca, biorąc pierwszą połowę nazwy z poprzedniego miesiąca i dołącz drugą połowę późniejszego miesiąca. W przypadku miesięcy o nieparzystej długości pierwsza połowa otrzymuje dodatkową literę. Aby być jawne, pierwsze połówki miesiącach są
Janu
,Febr
,Mar
,Apr
,Ma
,Ju
,Ju
,Aug
,Septe
,Octo
,Nove
, iDece
, a drugie połówki są zatemary
,uary
,ch
,il
,y
,ne
,ly
,ust
,mber
,ber
,mber
, imber
. - Oblicz dzień, uśredniając dwa możliwe dni, zabierając głos, gdy średnia nie jest liczbą całkowitą.
- Wydrukuj tekstową reprezentację tej daty, np. Dla
10/8/2011
danych wyjściowychAugber 9, 2011
.
- Utwórz nową nazwę miesiąca, biorąc pierwszą połowę nazwy z poprzedniego miesiąca i dołącz drugą połowę późniejszego miesiąca. W przypadku miesięcy o nieparzystej długości pierwsza połowa otrzymuje dodatkową literę. Aby być jawne, pierwsze połówki miesiącach są
Jeśli datą wejściową nie może być miesiąc / dzień / rok lub dzień / miesiąc / rok (np. 13/13/2013
Lub nawet 2/30/2002
), każde zachowanie jest dopuszczalne. Ten kod golf, najkrótszy kod wygrywa!
Przypadki testowe:
10/31/1998
daje October 31, 1998
25/12/1989
daje December 25, 1989
10/8/2011
daje Augber 9, 2011
8/5/1957
daje Maust 6, 1957
9/12/2012
(co dziwne) daje September 10, 2012
1/1/2000
daje January 1, 2000
without leading zeroes and with a four-digit year at the end
sugerujeyear >= 1000
Odpowiedzi:
Pyth - 156 bajtów
Naprawdę zły kod i trzeba będzie użyć spakowanych ciągów, ale to coś.
Pakiet testowy .
źródło
Mathematica
341 304 298 288293 bajtówWykorzystuje funkcję czystą lub anonimową, to znaczy funkcję bez własnej nazwy.
DateString
zwraca komunikat o błędzie, jeśli data jest niejednoznaczna.Check
wyłapuje niejednoznaczność i przesyła datę przestępstwa na adresDateList
, która przekształca ją w listę 3 liczb całkowitych (które według niego są{year, month, day}
). Liczby całkowite miesiąca i dnia są sortowane według wielkości i używane do określenia miesiąca i dnia zgodnie z instrukcjami PO.Quiet
wycisza błąd drukowania.źródło
JavaScript (ES6),
311295282274246238 bajtówEdycja: służy
toLocaleString
do generowania nazw miesięcy. Zmień ustawienia regionalne, aby uzyskać wyniki przy użyciu nazw miesięcy w różnych lokalizacjach!Edycja 2: Teraz generuje nazwy dwóch miesięcy zamiast wszystkich 12!
Nie golfowany:
Przykład:
Dzięki:
@ user81655 , 274 => 246 bajtów
@ edc65 , 246 => 238 bajtów
źródło
Math.ceil(e[c].length/2)
na(r=e[c].length/2)+r%1
,Array(2).fill().map((_,f)=>...)
dof=>...
ie[n]
doe(n)
,i=+(g>h)
doi=g>h
ie[i]
doe[+i]
, usuń niepotrzebne nawiasy w ostatnim operatorze trójskładnikowym, równieżnewDate
powinno byćnew Date
.Math.ceil
używaniab=c=>e(c).length+1>>1
JavaScript ES6, 204
Fragment testowy:
źródło
Python 3 (290 bajtów)
Podobne do odpowiedzi Ashwina Gupty, ale korzystając z modułu kalendarza Pythona, aby uniknąć zapisywania wszystkich nazw miesięcy.
Python 2 powinien przyciąć kilka bajtów z dzieleniem liczb całkowitych i zgubieniem nawiasów
print
.źródło
Python,
558554 bajtówNaprawdę, naprawdę, naprawdę strasznie golfowy przykład tego, jak to zrobić w Pythonie. Przepraszam, jestem bardzo zła w tych sprawach golfowych
D:
. Ale to działa. Jestem pewien, że istnieje wiele sposobów na uproszczenie tego, więc daj mi znać w komentarzach. Gra w golfa:Bez golfa
Zrzut ekranu:
źródło
S=" "
w górę, a następnie zastąpienie każde wystąpienie" "
zS
- które golić kilka bajtówe= int[...
,o = o...
). może również okazać się ryzykowne wykonywanie często używanych połączeń, takich jakint
wieloliterowe zmiennefrom math import* I=int S=" " C="," L=len P=print def d(i): l=["","January","February","March","April","May","June","July","August","September","October","November","December"];w=i.split('/');f=I(w[0]);s=I(w[1]);y=w[2] if f>12:e=I(w[1]);P(l[e]+S+w[0]+C+S+y) elif f<13and s>12:e=I(w[0]);P(l[e]+S+w[0]+C+S+y) else: if f<s:o=l[f];t=l[s] else:o=l[s];t=l[f];o=o[0:I(ceil(L(o)/2))];t=t[I(ceil(L(t)/2)):L(t)] P(o+t+S+str(floor((f+s)/2))+C+S+y)
PHP,
301294 bajtówMyślałem, że mogę konkurować z odpowiedzią JavaScript. No cóż.
Myślę, że mógłbym go zmniejszyć i nie podoba mi się kod użyty do dwuznacznych dat. Myślę, że jest na to lepszy sposób.
Nie golfowany:
źródło