Wygląda na to, że jeszcze go nie mamy, więc zaczynamy:
Wyzwanie
Napisz program lub funkcję, która pobiera datę jako dane wejściowe i wyświetla numer dnia w roku. Nie możesz do tego używać żadnych wbudowanych funkcji!
Zasady
- Jak zwykle możesz napisać pełny program lub funkcję.
- Format danych wejściowych zależy od Ciebie, ale musi zawierać rok, miesiąc i dzień. Wyjaśnij, którego używa Twoje rozwiązanie!
- Niedozwolone są wbudowane funkcje związane z datą! Musisz wykonać pracę sam. Wbudowane, które nie są związane z operacjami daty są w porządku.
- Podstawą obliczeń jest kalendarz gregoriański.
- Musisz wziąć pod uwagę lata przestępne.
- Wystarczy obsłużyć lata w przedziale [1, 9999]
- Standardowe luki są zabronione.
- Najniższa liczba bajtów wygrywa!
Przypadki testowe
Format wejściowy to RRRR / MM / DD
2016/07/05 -> 187
2000/03/28 -> 88
0666/06/06 -> 157
6789/10/11 -> 284
0004/04/04 -> 95
1337/07/13 -> 194
Happy Coding!
Odpowiedzi:
Pyth, 31 bajtów
Dzięki @Dennis i @Jakube za część roku przestępnego . Dane wejściowe to RRRR, MM, DD w osobnych wierszach.
Zestaw testowy .
źródło
JavaScript ES6,
8169 bajtówZakładając, że miesiące są oparte na 1, w przeciwnym razie mógłbym zaoszczędzić 2 bajty.
Edycja: Zapisano 12 bajtów, używając końcówki @ user81655.
źródło
C,
961028961 bajtówźródło
Python 3,
152148150 bajtówPrzyjmuje daty w formacie „MD RRRR”.
źródło
print n[m-1]+d
Python 2,
10082 bajtówPort Pythona w odpowiedzi @ Neil :
Podobnie jak w poprzedniej odpowiedzi, dodanie 17 bajtów (łącznie 99 bajtów) da pełny program:
Poprzednia odpowiedź:
Jako anonimowa lambda:
Można zamienić na nazwaną lambda za 2 bajty kary. Alternatywnie można uzyskać pełny program (przyjmujący dane wejściowe w formacie
D,M,Y
) dla 117 bajtów:źródło
Python 3, 125 bajtów
Inne podejście do tego problemu. Kod korzysta z priorytetów wykonywania algebry logicznej Pythona, a ponieważ
not
jest to ostatnia operacja, konwersja na wartość logiczną jest automatyczna. Po zakończeniu sumowania wartość logiczna jest traktowana jako 1 lub 0. Format wejściowy to ciąg „RR MM DDDD”. System wprowadzania inspirowany podobnym systemem @ SteveEckert .Kolejna postać jako funkcja, 91 bajtów
W tym przypadku wejściem są trzy liczby całkowite, miesiąc między 0-11. Działa to również w Pythonie 2.
źródło
Excel, 106 bajtów
Pobiera dane w trzech komórkach
A1
= rok,B1
= miesiąc,C1
= dzień.1
jeśli LeapYear, jeszcze0
Wiele
30
, WYBIERZ na dodatkowe dni plus dni w miesiącuEwolucja:
źródło