Festiwal świateł ASCII-art

12

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
dan04
źródło
9
Dla tych z nas, którzy nie są Żydami (i dla tych, którzy nie wiedzą, jak obliczyć kalendarz żydowski), proszę wyjaśnić, w jaki sposób obliczany jest początek Chanuki. Powinieneś także wyjaśnić sekwencję zapalania świec (wydaje się, że jest to jedna dziennie, ale czy ma znaczenie, którą świecę zapalasz?)
Level River St
Czy musimy obsługiwać zarówno zero, jak i sześć argumentów wiersza poleceń, czy możemy wybrać?
lirtosiast
@ThomasKwa: Oba. Różnica polega na tym, że wersja z zerowym argumentem używa bieżącej daty i godziny.
dan04,
1
opcja rysowania nieużywanych świec jako nieoświetlonych oznacza, że ​​dynamiczna część sztuki ascii to tylko jeden rząd przełączanych gwiazdek, co wcale nie jest interesujące. nie to, że uważam, że większy rysunek sztuki ascii jest szczególnie interesujący na początek.
Sparr
1
@Sparr część sztuki ascii jest daleka od najtrudniejszej części tego wyzwania pod koniec, konwersja z gregoriańskiego na hebrajski Data i sprawdzanie, czy jesteśmy w Święta, czy nie, jest znacznie bardziej interesujące IMO
Tensibai

Odpowiedzi:

3

Mathematica, 376 338 334 bajty

a=Rest@$ScriptCommandLine;b=CalendarConvert[If[a=={},Now~TimeZoneConvert~0,DateObject[FromDigits/@a,TimeZone->0]],j="Jewish"];c=Floor@DateDifference[DateObject[{b[[1,1]],9,25},CalendarType->j,TimeZone->0],b][[1]];d=If[#<=c,"*"," "]&;0<=c<8&&Print["    *
"<>{d/@{7,6,5,4},"|",d/@{3,2,1},"*
|||||||||
|||||||||
+++++++++
    |
   -+-"}]

Działa w skrypcie.

LegionMammal978
źródło
3

R, 467 bajtów

Nie ma wątpliwości, czy korzystanie z biblioteki do konwersji kalendarza jest dozwolone, czy nie.

library(ConvCalendar)
f='%Y %m %d %H %M %S'
g='hebrew'
s=' '
if(length(n<-scan())!=6)n=format(Sys.time(),f)
if(n[4]>17)n[3]=n[3]+1
d=strptime(paste(n,collapse=s),f)
h=as.OtherDate(d,g)
i=OtherDate(25,3,h$year,g)
j=round(difftime(d,as.Date(i),,"days"))+1
N=ifelse(j>0&j<10,(1:9)[j],0)
if(!N)write('')else{l='**||+|+'
z=matrix(strsplit(l,'')[[1]],9,7,T)
z[c(1:4,6:9),c(1,6:7)]=s
z[c(4,6),7]='-'
if(N<8)z[1:(9-N),2:4]=s
z[5,2:4]='|'
write(z,'',9,,'')}

Przykład danych wejściowych 2015 12 07 00 00 00:

    *    
    |   *
    |   |
    |   |
+++++++++
    |    
   -+-   
Tensibai
źródło
Moje oczy ........ :)
David Arenburg
1

APL (Dyalog) , 193 bajtów

Monituje o wejście ze STDIN i drukuje do STDOUT.

Wykorzystuje znaki rysunkowe i rzeczywisty symbol lampy !

USING'System'
3×(c←+/i≥((⎕NEW Globalization.HebrewCalendar).(ToDateTime 73 23 18,⍨GetYear)i←⎕NEW DateTime(6↑⍎∊⍞'⎕TS')).AddDays¨⍳9)∊⍳8
¯5'⍝'
'⍝'@(10-r+5r←⍳c)⊢9s←¯5'│'
9/⍪'││┴'
s
'   ─┴─'

⎕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← magazyn i(na i nPrzenieś)
  (⎕NEW Globalization.HebrewCalendar).(... ) w nowym obiekcie kalendarz żydowski:
   GetYear uzyskać (hebrajski) roku wejścia
   3 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 DateTime
i≥ Boolean czy wejście jest równa lub po każdym z tych
+/ zsumować Boolean
c← sklepu jako c( dla c ount)
 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 dniach
r← przechowywania w r(dla r Ange)
5≤ Boolean dla tych, większa lub równa pięć (pominąć środkowy świecę)
r+ dodać do zakresu indeksów
10- odjąć te z dziesięciu (rozpoczęcie w prawo)

⍪'││┴' przekształć ten ciąg w macierz kolumny,
9/ domyślnie wydrukuj dziewięć jego poziomych kopii

s niejawnie wydrukuj trzon

' ─┴─' niejawnie wydrukuj ten ciąg

Przykładowy przebieg:

      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
Adám
źródło