Festival der ASCII-Kunstlichter


12

Schreiben Sie in möglichst wenigen Zeichen ein Programm, das null oder sechs Befehlszeilenargumente akzeptiert

menorah
menorah YEAR MONTH DAY HOUR MINUTE SECOND

(Beide Formen müssen unterstützt werden. Die Version mit null Argumenten entspricht dem Aufrufen der Version mit sechs Argumenten mit dem aktuellen Systemdatum und der aktuellen Systemzeit in der lokalen Zeitzone.)

und wenn das angegebene (Gregorianische-Kalender) Datum und die Uhrzeit während Chanukka liegen , geben Sie eine ASCII-Kunst (oder Unicode-Kunst) mit neun Zweigen und der entsprechenden Anzahl brennender Kerzen aus. Wenn dies nicht während Chanukka der Fall ist , geben Sie eine einzelne neue Zeile aus. Beispielsweise,

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

Am N-ten Tag des Festivals werden N + 1 Kerzen angezündet: Die zentrale Shamash- Kerze und N der 8 Chanukka-Kerzen in der Reihenfolge von rechts nach links.

Zulässige Abweichungen im Ausgabeformat sind:

  • Nicht benutzte Kerzen können nicht beleuchtet, sondern weggelassen werden.
  • Sie können Nicht-ASCII-Zeichen verwenden, um das Ergebnis ästhetischer zu gestalten. Wie 🔥(U + 1F525) anstelle von *. Oder Box-Zeichen statt +-|.

Für die Zwecke dieser Herausforderung kann davon ausgegangen werden, dass ein Tag im hebräischen Kalender um 18:00 Uhr beginnt.

Die Ergebnisse müssen für die Gregorianischen Jahre zwischen 1900 und 2239 einschließlich korrekt sein.


Chanukka beginnt bei Sonnenuntergang an den gregorianischen Daten

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
Für diejenigen von uns, die nicht jüdisch sind (und für diejenigen, die nicht wissen, wie man den jüdischen Kalender berechnet), erklären Sie bitte, wie der Beginn von Chanukka berechnet wird. Sie sollten auch die Reihenfolge des Anzündens der Kerzen erklären (es scheint eine pro Tag zu sein, aber spielt es eine Rolle, welche Kerze Sie anzünden?)
Level River St

Müssen wir sowohl null als auch sechs Befehlszeilenargumente unterstützen, oder können wir wählen?
Lirtosiast

@ ThomasKwa: Beide. Der Unterschied besteht darin, dass in der Version mit null Argumenten das aktuelle Datum und die aktuelle Uhrzeit verwendet werden.
Dan04

1
Die Option, unbenutzte Kerzen als unbeleuchtet zu zeichnen, bedeutet, dass der dynamische Teil dieser Kunst nur eine Reihe umgeschalteter Sternchen ist, was überhaupt nicht interessant ist. nicht, dass ich die größere ASCII-Kunstzeichnung anfangs besonders interessant finde.
Sparr

1
@Sparr der ASCII-Kunst-Teil ist am Ende alles andere als der herausforderndste Teil dieser Herausforderung, die Umstellung von Gregorian auf hebräisches Datum und die Überprüfung, ob wir in den Ferien sind oder nicht, ist weitaus interessanter IMO
Tensibai

Antworten:


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

Läuft in einem Skript.


3

R, 467 Bytes

Mit ein wenig Zweifel, ob die Verwendung einer Bibliothek für die Kalenderkonvertierung zulässig ist oder nicht.

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

Eingabebeispiel 2015 12 07 00 00 00:

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

Meine Augen ........ :)
David Arenburg

1

APL (Dyalog) , 193 Bytes

Fordert zur Eingabe von STDIN auf und druckt zu STDOUT.

Verwendet Box-Zeichen und ein aktuelles Lampensymbol !

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' Verwenden Sie .NET

⍳8 first eight eight ntegers
()∊ Boolean, ob Folgendes Mitglied davon ist:
⍳9  erste neun Zahlen
(... ).AddDays¨ für jeden, fügen hinzu , dass viele Tage:
  ⎕NEW DateTime(... ) ein neues Datetime - .NET - Objekt mit dem Wert:
   ⍞'⎕TS' STDIN und Ausdruck für Strom T ime S Stampf
   ε nlist (Flatten)
    execute (bewerten) dass (sechs- oder sieben Element numerische Liste gibt)
   6↑ nimmt die ersten sechs Elemente (JMT hms)
  i← speichern , wie i(für i nput)
  (⎕NEW Globalization.HebrewCalendar).(... ) in einem neuen Jüdischen Kalender Objekt:
   GetYear bekommt das (Hebrew) Jahr der Eingang
   3 23 18,⍨ anfügen diese (3 Monate, 23 th th Tag, 18 Stunde - eine Nacht vor Chanukka)  multiplizieren Sie mit drei  gehen Sie zu dieser Zeile (3, dh als nächstes, wenn Chanukka; 0, dh beenden, wenn nicht)
   7↑ nehmen die ersten sieben Elemente, Klotzen mit 0s (Minuten, Sekunden)
   ToDateTime konvertieren , die Hebrew Zeitpunkt normal Datetime - Objekt
i≥ Boolean , ob die Eingabe zu oder nach jedem dieser gleich
+/ Summe der Boolesche Werte
c← Speichers als c(für c ount)

¯5↑'⍝' Die letzten fünf Zeichen des Lampensymbols implizit ausgeben (mit Leerzeichen auffüllen)

¯5↑'│' letzte fünf Zeichen des mittleren Kerze Symbols (Padding mit Leerzeichen)
s← Speichern als s (für s tem)
9↑ nehmen die ersten neun Zeichen aus diesem (Auffüllen mit Leerzeichen)
 Ausbeute (trennt die oben von der unten
'⍝'@(... ) implizit mit Lampen Druck auf dem platziert folgenden Indizes:
⍳c wie viele ɩ ntegers als Graf von Chanukka Tagen begonnen
r← speichern in r(für r ange)
5≤ Boolesche Werte für diejenigen , die größer als oder gleich fünf (die mittlere Kerze überspringen)
r+ auf den Bereich von Indizes hinzufügen
10- von zehn diejenigen subtrahieren (beginnen bei das Recht)

⍪'││┴' machen Sie diesen String zu einer Spaltenmatrix, die
9/ implizit neun horizontale Kopien davon druckt

s Drucken Sie den Stiel implizit aus

' ─┴─' Drucken Sie diese Zeichenfolge implizit aus

Beispiellauf:

      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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.