Napisz, używając jak najmniej znaków , program, który przyjmuje zero lub sześć argumentów wiersza poleceń
menorah
menorah YEAR MONTH DAY HOUR MINUTE SECOND
(Obie formy muszą być obsługiwane. Wersja z zerowym argumentem będzie odpowiednikiem wywołania wersji z sześcioma argumentami z bieżącą datą i godziną systemową w lokalnej strefie czasowej).
a jeśli określona data i godzina (kalendarz gregoriański) przypada w czasie Chanuki , wyślij dziewięcioramienną menorę sztuki ASCII (lub sztuki Unicode) z odpowiednią liczbą zapalonych świec. Jeśli nie dzieje się to podczas Chanuki, wypisz jedną nową linię. Na przykład,
~$ ./menorah 2015 12 7 0 0 0
*
| *
| |
| |
+++++++++
|
-+-
~$ ./menorah 2015 12 9 0 0 0
*
| ***
| |||
| |||
+++++++++
|
-+-
~$ ./menorah 2015 12 14 0 0 0
*
****|****
|||||||||
|||||||||
+++++++++
|
-+-
~$ ./menorah 2015 12 15 0 0 0
~$
W N-ty dzień festiwalu zapalane są świece N + 1: centralna świeca szamaszowa oraz N z 8 świec Chanuka, ułożonych w kolejności od prawej do lewej.
Dozwolone odmiany formatu wyjściowego to:
- Nieużywane świece można wyciągnąć bez oświetlenia, a nie pominąć.
- Możesz użyć znaków spoza ASCII, aby wynik był bardziej estetyczny. Jak
🔥
(U + 1F525) zamiast*
. Lub postacie rysujące w polu zamiast+-|
.
Na potrzeby tego wyzwania można założyć, że dzień w kalendarzu hebrajskim rozpocznie się o godzinie 18:00.
Wyniki muszą być poprawne dla lat gregoriańskich między 1900 a 2239 włącznie.
Chanuka rozpoczyna się o zachodzie słońca w datach gregoriańskich
1900-12-16 1901-12-05 1902-12-24 1903-12-13 1904-12-02 1905-12-22
1906-12-11 1907-11-30 1908-12-18 1909-12-07 1910-12-25 1911-12-15
1912-12-04 1913-12-23 1914-12-12 1915-12-01 1916-12-19 1917-12-09
1918-11-28 1919-12-16 1920-12-05 1921-12-25 1922-12-14 1923-12-02
1924-12-21 1925-12-11 1926-11-30 1927-12-18 1928-12-07 1929-12-26
1930-12-14 1931-12-04 1932-12-23 1933-12-12 1934-12-01 1935-12-20
1936-12-08 1937-11-28 1938-12-17 1939-12-06 1940-12-24 1941-12-14
1942-12-03 1943-12-21 1944-12-10 1945-11-29 1946-12-17 1947-12-07
1948-12-26 1949-12-15 1950-12-03 1951-12-23 1952-12-12 1953-12-01
1954-12-19 1955-12-09 1956-11-28 1957-12-17 1958-12-06 1959-12-25
1960-12-13 1961-12-02 1962-12-21 1963-12-10 1964-11-29 1965-12-18
1966-12-07 1967-12-26 1968-12-15 1969-12-04 1970-12-22 1971-12-12
1972-11-30 1973-12-19 1974-12-08 1975-11-28 1976-12-16 1977-12-04
1978-12-24 1979-12-14 1980-12-02 1981-12-20 1982-12-10 1983-11-30
1984-12-18 1985-12-07 1986-12-26 1987-12-15 1988-12-03 1989-12-22
1990-12-11 1991-12-01 1992-12-19 1993-12-08 1994-11-27 1995-12-17
1996-12-05 1997-12-23 1998-12-13 1999-12-03 2000-12-21 2001-12-09
2002-11-29 2003-12-19 2004-12-07 2005-12-25 2006-12-15 2007-12-04
2008-12-21 2009-12-11 2010-12-01 2011-12-20 2012-12-08 2013-11-27
2014-12-16 2015-12-06 2016-12-24 2017-12-12 2018-12-02 2019-12-22
2020-12-10 2021-11-28 2022-12-18 2023-12-07 2024-12-25 2025-12-14
2026-12-04 2027-12-24 2028-12-12 2029-12-01 2030-12-20 2031-12-09
2032-11-27 2033-12-16 2034-12-06 2035-12-25 2036-12-13 2037-12-02
2038-12-21 2039-12-11 2040-11-29 2041-12-17 2042-12-07 2043-12-26
2044-12-14 2045-12-03 2046-12-23 2047-12-12 2048-11-29 2049-12-19
2050-12-09 2051-11-28 2052-12-15 2053-12-05 2054-12-25 2055-12-14
2056-12-02 2057-12-21 2058-12-10 2059-11-29 2060-12-17 2061-12-07
2062-12-26 2063-12-15 2064-12-03 2065-12-22 2066-12-12 2067-12-01
2068-12-18 2069-12-08 2070-11-27 2071-12-16 2072-12-04 2073-12-24
2074-12-13 2075-12-01 2076-12-20 2077-12-10 2078-11-29 2079-12-17
2080-12-06 2081-12-26 2082-12-15 2083-12-04 2084-12-22 2085-12-11
2086-11-30 2087-12-19 2088-12-07 2089-11-27 2090-12-16 2091-12-05
2092-12-23 2093-12-13 2094-12-02 2095-12-20 2096-12-09 2097-11-29
2098-12-18 2099-12-06 2100-12-26 2101-12-16 2102-12-05 2103-12-23
2104-12-12 2105-12-02 2106-12-21 2107-12-10 2108-11-28 2109-12-17
2110-12-06 2111-12-25 2112-12-13 2113-12-03 2114-12-22 2115-12-10
2116-11-29 2117-12-19 2118-12-08 2119-12-26 2120-12-15 2121-12-04
2122-12-23 2123-12-12 2124-12-01 2125-12-21 2126-12-10 2127-11-29
2128-12-17 2129-12-06 2130-12-24 2131-12-14 2132-12-03 2133-12-22
2134-12-11 2135-11-30 2136-12-18 2137-12-07 2138-12-26 2139-12-15
2140-12-04 2141-12-23 2142-12-12 2143-12-01 2144-12-20 2145-12-09
2146-11-27 2147-12-17 2148-12-05 2149-12-24 2150-12-13 2151-12-03
2152-12-22 2153-12-11 2154-11-30 2155-12-19 2156-12-07 2157-12-25
2158-12-15 2159-12-05 2160-12-23 2161-12-12 2162-12-01 2163-12-20
2164-12-09 2165-11-28 2166-12-16 2167-12-06 2168-12-24 2169-12-13
2170-12-02 2171-12-22 2172-12-10 2173-11-28 2174-12-18 2175-12-08
2176-12-26 2177-12-14 2178-12-04 2179-12-24 2180-12-12 2181-12-01
2182-12-20 2183-12-09 2184-11-28 2185-12-17 2186-12-06 2187-12-25
2188-12-14 2189-12-03 2190-12-21 2191-12-11 2192-11-29 2193-12-17
2194-12-07 2195-12-27 2196-12-15 2197-12-03 2198-12-23 2199-12-13
2200-12-02 2201-12-20 2202-12-10 2203-11-30 2204-12-18 2205-12-07
2206-12-26 2207-12-15 2208-12-03 2209-12-22 2210-12-11 2211-12-01
2212-12-19 2213-12-08 2214-12-27 2215-12-17 2216-12-05 2217-12-23
2218-12-13 2219-12-02 2220-12-20 2221-12-09 2222-11-29 2223-12-18
2224-12-05 2225-12-25 2226-12-15 2227-12-04 2228-12-21 2229-12-11
2230-12-01 2231-12-20 2232-12-08 2233-12-27 2234-12-16 2235-12-05
2236-12-23 2237-12-12 2238-12-02 2239-12-21
Odpowiedzi:
Mathematica,
376338334 bajtyDziała w skrypcie.
źródło
R, 467 bajtów
Nie ma wątpliwości, czy korzystanie z biblioteki do konwersji kalendarza jest dozwolone, czy nie.
Przykład danych wejściowych 2015 12 07 00 00 00:
źródło
APL (Dyalog) , 193 bajtów
Monituje o wejście ze STDIN i drukuje do STDOUT.
Wykorzystuje znaki rysunkowe i rzeczywisty symbol lampy !
⎕USING←'System'
Użyj .NET⍳8
Pierwsze osiem ɩ ntegers(
...)∊
Boolean do tego, czy następuje to członek że:⍳9
Pierwsze dziewięć całkowitymi(
...).AddDays¨
dla każdego, należy dodać, że wiele dni do:⎕NEW DateTime(
...)
nowy obiekt DateTime .NET o wartości:⍞'⎕TS'
stdin i ekspresji dla obecnego T ime S TAMP∊
ε nlist (Spłaszczenie)⍎
execute (oceny), że (daje listę sześcio- lub siedmio-element numeryczną)6↑
podjąć pierwsze sześć elementów (HMS RMD)i←
magazyni
(na i nPrzenieś)(⎕NEW Globalization.HebrewCalendar).(
...)
w nowym obiekcie kalendarz żydowski:GetYear
uzyskać (hebrajski) roku wejścia3 23 18,⍨
Dołącz te (3 miesiąc, 23 th dni, 18th godzin - jedna noc przed Chanuka)7↑
podjąć pierwsze siedem elementów, wyściółka z 0s (minuty, sekundy)ToDateTime
przekonwertować punkt hebrajski w czasie do normalnego obiektu DateTimei≥
Boolean czy wejście jest równa lub po każdym z tych+/
zsumować Booleanc←
sklepu jakoc
( dla c ount)3×
pomnóż przez trzy→
przejdź do tej linii (3, tj. dalej, jeśli Chanuka; 0, tj. wyjdź, jeśli nie)¯5↑'⍝'
niejawnie wydrukuj ostatnie pięć znaków symbolu lampy (wypełnienie spacjami)¯5↑'│'
ostatnie pięć znaków środkowo-świeca symbol (dopełnienie spacjami)s←
przechowują jako s ( ów TEM)9↑
podjąć pierwsze dziewięć znaków z tego (wyściółki ze spacjami)⊢
wydajność (oddziela wyżej od dołu'⍝'@(
...)
niejawnie drukować z lampami umieszczonymi u następujące wskaźniki:⍳c
jak wiele ɩ ntegers jak hrabiego rozpoczęli chanukowe dniachr←
przechowywania wr
(dla r Ange)5≤
Boolean dla tych, większa lub równa pięć (pominąć środkowy świecę)r+
dodać do zakresu indeksów10-
odjąć te z dziesięciu (rozpoczęcie w prawo)⍪'││┴'
przekształć ten ciąg w macierz kolumny,9/
domyślnie wydrukuj dziewięć jego poziomych kopiis
niejawnie wydrukuj trzon' ─┴─'
niejawnie wydrukuj ten ciągPrzykładowy przebieg:
źródło