Festival de luces de arte ASCII


12

Escriba, en la menor cantidad de caracteres posible, un programa que tome cero o seis argumentos de línea de comando

menorah
menorah YEAR MONTH DAY HOUR MINUTE SECOND

(Ambos formularios deben ser compatibles. La versión de argumento cero será equivalente a llamar a la versión de seis argumentos con la fecha y hora actuales del sistema en la zona horaria local).

y si la fecha y hora especificadas (calendario gregoriano) caen durante Hanukkah , entonces emite una menorá de nueve ramas de arte ASCII (o arte Unicode) con el número apropiado de velas encendidas. Si es no durante Hanukkah, entonces una sola salida de línea nueva. Por ejemplo,

~$ ./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
~$

El día N del festival, se encienden N + 1 velas: la vela central de shamash y N de las 8 velas de Hanukkah, colocadas en orden de derecha a izquierda.

Las variaciones permitidas en el formato de salida son:

  • Las velas no utilizadas se pueden encender sin encender en lugar de omitirlas.
  • Puede usar caracteres que no sean ASCII para hacer que el resultado sea más estéticamente agradable. Me gusta 🔥(U + 1F525) en lugar de *. O dibujar cuadros en lugar de +-|.

Para el propósito de este desafío, se puede suponer que un día en el calendario hebreo comienza a las 18:00.

Los resultados deben ser correctos para los años gregorianos entre 1900 y 2239, inclusive.


Hanukkah comienza al atardecer en las fechas gregorianas

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

99
Para aquellos de nosotros que no somos judíos (y para aquellos que sí lo son pero que no saben cómo calcular el calendario judío), explique cómo se calcula el inicio de Hanukkah. También debe explicar la secuencia de encender las velas (parece ser una por día, pero ¿importa qué vela encienda?)
Level River St

Estamos obligados a apoyar a ambos cero y seis argumentos de línea de comandos, o podemos elegir?
lirtosiast

@ThomasKwa: Ambos. La diferencia es que la versión de argumento cero usa la fecha y hora actuales .
dan04

1
la opción de dibujar velas sin usar como apagadas significa que la parte dinámica del arte ascii de esto es solo una fila de asteriscos alternados, lo cual no es nada interesante. No es que encuentre el dibujo de arte ascii más grande particularmente interesante para empezar.
Sparr

1
@Sparr, la parte de arte ascii está lejos de ser la parte más desafiante de este desafío al final, la conversión de la fecha gregoriana a la hebrea y verificar si estamos dentro de las vacaciones o no es mucho más interesante OMI
Tensibai

Respuestas:


3

Mathematica, 376 338 334 bytes

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},"*
|||||||||
|||||||||
+++++++++
    |
   -+-"}]

Se ejecuta en un script.


3

R, 467 bytes

Con un poco de duda si usar una biblioteca para la conversión del Calendario está permitido o no.

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,,'')}

Ejemplo para entrada 2015 12 07 00 00 00:

    *    
    |   *
    |   |
    |   |
+++++++++
    |    
   -+-   

Mis ojos ........ :)
David Arenburg

1

APL (Dyalog) , 193 bytes

Solicita la entrada de STDIN e imprime en STDOUT.

Utiliza caracteres de dibujo de caja y un símbolo de lámpara real .

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' Use .NET

⍳8 primeros ocho Ɩ ntegers
(... )∊ booleano que indica si el siguiente es un miembro de esa:
⍳9 nueve primeros números enteros
(... ).AddDays¨ para cada uno, añadir que muchos días a:
  ⎕NEW DateTime(... ) un nuevo objeto DateTime .NET con el valor de:
   ⍞'⎕TS' STDIN y expresión para la corriente T iempo S apisonamiento
   ε nlist (aplanar)
    ejecutar (evaluar) que (da la lista de seis o siete elemento numérico)
   6↑ dar los primeros seis elementos (HMS) ymd
  i← tienda como i(para i Nput)
  (⎕NEW Globalization.HebrewCalendar).(... ) en un nuevo objeto HebrewCalendar:
   GetYear obtener la (hebreo) años de la entrada
   3 23 18,⍨ en Anexar estos (de 3 meses, el 23 º día, 18hora th - una noche antes de Hanukkah)
   7↑ tome los primeros siete elementos, rellenando con 0s (minutos, segundos)
   ToDateTime convierta ese punto hebreo en el tiempo en un objeto DateTime normal
i≥ Boolean si la entrada es igual o después de cada una de esas
+/ sumas que el Booleans
c← almacena como c( para c )
 multiplicar por tres
 ir a esa línea (3, es decir, siguiente, si Hanukkah; 0, es decir, salir, si no)

¯5↑'⍝' imprimir implícitamente los últimos cinco caracteres del símbolo de la lámpara (relleno con espacios)

¯5↑'│' los últimos cinco caracteres del símbolo de la vela central (relleno con espacios) se
s← almacenan como s (por s tem)
9↑ toman los primeros nueve caracteres de ese
 rendimiento ( relleno con espacios) (separa lo anterior de lo siguiente
'⍝'@(... ) imprime implícitamente con lámparas colocadas en el siguientes índices:
⍳c el mayor número de Ɩ ntegers como el recuento de días de Hanukkah comenzado
r← almacenan en r(para R ange)
5≤ Booleanos para los mayores o iguales a cinco (saltarse la vela medio)
r+ añadir a la gama de índices de
10- restar los de diez (para comenzar a las la derecha)

⍪'││┴' convertir esta cadena en una matriz de columnas
9/ imprime implícitamente nueve copias horizontales de ese

s imprimir implícitamente el tallo

' ─┴─' imprimir esta cadena implícitamente

Ejemplo de ejecución:

      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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.