Festival delle luci di arte ASCII


12

Scrivi, nel minor numero di caratteri possibile, un programma che accetta zero o sei argomenti della riga di comando

menorah
menorah YEAR MONTH DAY HOUR MINUTE SECOND

(Entrambi i moduli devono essere supportati. La versione a argomento zero equivale a chiamare la versione a sei argomenti con la data e l'ora di sistema correnti nel fuso orario locale.)

e se la data e l'ora specificate (calendario gregoriano) cadono durante Hanukkah , quindi emette una menorah a nove rami di arte ASCII (o arte Unicode) con il numero appropriato di candele accese. Se è non durante Hanukkah, uscita poi una singola riga. Per esempio,

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

L'ennesimo giorno del festival, vengono accese N + 1 candele: la candela shamash centrale e N delle 8 candele Hanukkah, disposte nell'ordine da destra a sinistra.

Le variazioni consentite nel formato di output sono:

  • Le candele inutilizzate possono essere disegnate spente anziché omesse.
  • È possibile utilizzare caratteri non ASCII per rendere il risultato esteticamente più gradevole. Come 🔥(U + 1F525) invece di *. O caratteri di disegno al posto invece di +-|.

Ai fini di questa sfida, si può presumere che un giorno del calendario ebraico inizi alle 18:00.

I risultati devono essere corretti per gli anni gregoriani tra il 1900 e il 2239, compresi.


Hanukkah inizia al tramonto nelle date gregoriane

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

9
Per quelli di noi che non sono ebrei (e per quelli che lo sono ma non sanno come calcolare il calendario ebraico), spiega come viene calcolato l'inizio di Hanukkah. Dovresti anche spiegare la sequenza di accensione delle candele (sembra essere una al giorno, ma importa quale candela accendi?)
Level River St

Siamo tenuti a supportare entrambi gli argomenti della riga di comando zero e sei o possiamo scegliere?
lirtosiast

@ThomasKwa: entrambi. La differenza è che la versione con argomento zero utilizza la data e l'ora correnti .
dan04,

1
l'opzione di disegnare candele inutilizzate come spente significa che la parte dinamica di arte ascii di questo è solo una fila di asterischi a levetta, il che non è affatto interessante. non che trovo particolarmente interessante il disegno artistico ascii più grande per cominciare.
Sparr,

1
@Sparr la parte di arte ascii è tutt'altro che la parte più impegnativa di questa sfida alla fine, la conversione da gregoriano a data ebraica e verificare se siamo dentro le festività o no è molto più interessante IMO
Tensibai

Risposte:


3

Mathematica, 376 338 334 byte

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

Viene eseguito in uno script.


3

R, 467 byte

Con un piccolo dubbio se è consentito o meno l'utilizzo di una libreria per la conversione del Calendario.

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

Esempio per input 2015 12 07 00 00 00:

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

I miei occhi ........ :)
David Arenburg,

1

APL (Dyalog) , 193 byte

Richiede input da STDIN e stampa su STDOUT.

Utilizza personaggi di disegno a scatola e un vero simbolo della lampada !

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

⍳8 primi otto ɩ nteger
(... )∊ Booleano per stabilire se ne sia un membro: i
⍳9 primi nove numeri interi
(... ).AddDays¨ per ciascuno, aggiungono tanti giorni a:
  ⎕NEW DateTime(... ) un nuovo oggetto DateTime .NET con il valore di:
   ⍞'⎕TS' STDIN ed espressione per l'attuale T ime S tamp
   ϵ nlist (flatten)
    esegue (valuta) che (fornisce un elenco numerico a sei o sette elementi)
   6↑ accetta i primi sei elementi (YMD hms)
  i← come i(per i nput)
  (⎕NEW Globalization.HebrewCalendar).(... ) in un nuovo oggetto HebrewCalendar:
   GetYear ottieni l'anno (ebraico) dell'input
   3 23 18,⍨ aggiungi questi (3 mesi, 23 ° giorno, 18th ora - una notte prima Hanukkah)
   7↑ prendere i primi sette elementi, imbottitura con 0s (minuti, secondi)
   ToDateTime convertito quel punto ebraico tempo normale oggetto DateTime
i≥ booleano se l'ingresso è pari o dopo ciascuno di quelli
+/ somma del Booleans
c← negozio come c( per c ount)
 moltiplicare per tre
 vai a tale asse (3, cioè, accanto, se Hanukkah, 0, cioè chiudere, in caso contrario)

¯5↑'⍝' stampa implicitamente gli ultimi cinque caratteri del simbolo della lampada (imbottitura con spazi)

¯5↑'│' gli ultimi cinque caratteri del simbolo della candela centrale (imbottitura con spazi)
s← memorizzano come s (per il sistema)
9↑ prendono i primi nove caratteri da quel
 rendimento ( imbottitura con spazi) (separa il sopra dal sotto
'⍝'@(... ) implicitamente stampa con le lampade poste al seguenti indici:
⍳c il maggior numero di ɩ ntegers come numero di giorni di Hanukkah iniziato
r← conservare a r(per r ange)
5≤ booleane per coloro maggiore o uguale a cinque (per saltare la candela centrale)
r+ aggiungere alla gamma di indici
10- sottrarre quelli da dieci (inizio alle la destra)

⍪'││┴' trasforma questa stringa in una matrice di colonne in modo
9/ implicito stampandone nove copie orizzontali

s implicitamente stampare lo stelo

' ─┴─' stampa implicitamente questa stringa

Esempio di esecuzione:

      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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.