Lễ hội ánh sáng nghệ thuật ASCII


12

Viết, càng ít ký tự càng tốt, một chương trình lấy 0 hoặc 6 đối số dòng lệnh

menorah
menorah YEAR MONTH DAY HOUR MINUTE SECOND

(Cả hai hình thức phải được hỗ trợ. Phiên bản không có đối số sẽ tương đương với việc gọi phiên bản sáu đối số với ngày và giờ hệ thống hiện tại theo múi giờ địa phương.)

và nếu ngày và giờ được chỉ định (lịch Gregorian) rơi vào Hanukkah , thì hãy tạo ra một bảng xếp hạng chín nhánh nghệ thuật ASCII (hoặc nghệ thuật Unicode) với số lượng nến thích hợp được thắp sáng. Nếu không phải trong Hanukkah, thì hãy xuất một dòng mới. Ví dụ,

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

Vào ngày thứ N của lễ hội, nến N + 1 được thắp lên: Nến shamash trung tâm và N của 8 cây nến Hanukkah, được đặt theo thứ tự từ phải sang trái.

Các biến thể được phép trong định dạng đầu ra là:

  • Nến không sử dụng có thể được rút ra thay vì bỏ qua.
  • Bạn có thể sử dụng các ký tự không phải ASCII để làm cho kết quả có tính thẩm mỹ hơn. Giống như 🔥(U + 1F525) thay vì *. Hoặc nhân vật vẽ hộp thay vì +-|.

Với mục đích của thử thách này, một ngày trong lịch Do Thái có thể được giả định bắt đầu lúc 18:00.

Kết quả phải chính xác cho những năm Gregorian trong khoảng thời gian từ 1900 đến 2239.


Hanukkah bắt đầu vào lúc hoàng hôn vào những ngày Gregorian

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
Đối với những người trong chúng ta không phải là người Do Thái (và cho những người nhưng không biết cách tính lịch Do Thái), hãy giải thích cách bắt đầu của Hanukkah. Bạn cũng nên giải thích trình tự thắp nến (dường như là mỗi ngày một lần, nhưng bạn có thắp nến nào không?)
Level River St

Chúng tôi có bắt buộc phải hỗ trợ cả hai đối số dòng lệnh 0 và 6 hay chúng tôi có thể chọn không?
lirtosiast

@ThomasKwa: Cả hai. Sự khác biệt là phiên bản không đối số sử dụng ngày và giờ hiện tại .
dan04

1
tùy chọn để vẽ những ngọn nến không được sử dụng là không phù hợp có nghĩa là phần nghệ thuật ascii năng động của điều này chỉ là một hàng dấu hoa thị bị đảo lộn, điều này không thú vị chút nào. không phải là tôi thấy bản vẽ nghệ thuật ascii lớn hơn đặc biệt thú vị để bắt đầu.
Sparr

1
@Sparr phần nghệ thuật ascii là xa thách thức hầu hết các phần của thách thức này ở cuối, việc chuyển đổi từ Gregorian to Date hebrew và kiểm tra nếu chúng ta trong ngày lễ hay không được thú vị hơn IMO
Tensibai

Câu trả lời:


3

Toán học, 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},"*
|||||||||
|||||||||
+++++++++
    |
   -+-"}]

Chạy trong một kịch bản.


3

R, 467 byte

Với một chút nghi ngờ nếu sử dụng thư viện để chuyển đổi Lịch có được phép hay không.

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

Ví dụ cho đầu vào 2015 12 07 00 00 00:

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

Mắt tôi ........ :)
David Arenburg

1

APL (Dyalog) , 193 byte

Nhắc nhở đầu vào từ STDIN và in ra STDOUT.

Sử dụng các ký tự vẽ hộp và một biểu tượng đèn thực tế !

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' Sử dụng .NET

⍳8 đầu tiên Tám ɩ ntegers
(... )∊ Boolean cho dù những điều sau đây là thành viên của rằng:
⍳9 chín số nguyên đầu tiên
(... ).AddDays¨ cho mỗi, thêm rằng nhiều ngày để:
  ⎕NEW DateTime(... ) một đối tượng mới DateTime NET với giá trị:
   ⍞'⎕TS' STDIN và biểu hiện cho hiện tại T ime S TAMP
   ε nlist (flatten)
    thực hiện (đánh giá) mà (cho danh sách sáu hoặc bảy phần tử số)
   6↑ lấy sáu yếu tố đầu tiên (YMD hms)
  i← cửa hàng như i(ví i nput)
  (⎕NEW Globalization.HebrewCalendar).(... ) trong một đối tượng Lịch Do Thái mới:
   GetYear có được (Hebrew) năm của đầu vào
   3 23 18,⍨ append này (3 tháng, 23 ngày ngày, 18giờ thứ nhất - một đêm trước khi Hanukkah)
   7↑ lấy bảy yếu tố đầu tiên, đệm bằng 0 giây (phút, giây)
   ToDateTime chuyển đổi thời điểm tiếng Do Thái đó thành đối tượng DateTime bình thường
i≥ Boolean cho dù đầu vào bằng hoặc sau mỗi lần
+/ tổng đó
c← lưu trữ Booleans là c( với c ount)
 nhân với ba
 đi đến dòng đó (3, tức là tiếp theo, nếu Hanukkah; 0, tức là bỏ, nếu không)

¯5↑'⍝' ngầm in năm ký tự cuối cùng của biểu tượng đèn (đệm có khoảng trắng)

¯5↑'│' năm nhân vật cuối cùng của biểu tượng trung nến (đệm với không gian)
s← cửa hàng như s (đối với s tem)
9↑ mất chín ký tự đầu tiên từ đó (đệm với không gian)
 sản lượng (tách trên từ dưới đây
'⍝'@(... ) ngầm in với đèn đặt ở chỉ số sau:
⍳c càng nhiều ɩ ntegers như đếm ngày Hanukkah bắt đầu
r← lưu trữ trong r(đối với r ange)
5≤ Booleans cho những lớn hơn hoặc bằng năm (bỏ qua nến giữa)
r+ thêm vào một loạt các chỉ số
10- trừ những người từ mười (bắt đầu lúc bên phải)

⍪'││┴' làm cho chuỗi này thành một ma trận cột
9/ in ngầm chín bản sao ngang đó

s ngầm in thân cây

' ─┴─' ngầm in chuỗi này

Chạy ví dụ:

      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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.