Фестиваль арт-вогнів ASCII


12

Напишіть якомога менше символів програму, яка бере нуль або шість аргументів командного рядка

menorah
menorah YEAR MONTH DAY HOUR MINUTE SECOND

(Обидві форми повинні підтримуватися. Версія з нульовим аргументом повинна бути еквівалентною виклику шестиаргументальної версії з поточною датою та часом системи в локальному часовому поясі.)

і якщо вказані (григоріансько-календарний) дата і час припадають під час Хануки , тоді виведіть дев'ять гілок менори ASCII (або мистецтво Unicode) з відповідною кількістю свічок. Якщо його немає під час Хануки, виведіть один новий рядок. Наприклад,

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

На N-й день фестивалю запалюються свічки N + 1: Центральна свічка шамаш та N 8 із 8 свічок Хануки, розміщених у правому та лівому порядку.

Дозволені зміни у вихідному форматі:

  • Невикористані свічки можуть бути намальовані незагореними, а не опущеними.
  • Ви можете використовувати символи, що не належать до ASCII, щоб зробити результат більш естетичним. Як 🔥(U + 1F525) замість *. Або символи для малювання коробки замість +-|.

Для цілей цього виклику день за єврейським календарем, можливо, передбачається, що він розпочнеться о 18:00.

Результати повинні бути правильними для григоріанських років між 1900 та 2239 роками включно.


Ханука починається на заході сонця на григоріанські дати

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
Тим із нас, хто не єврей (і тим, хто є, але не знає, як обчислити єврейський календар), будь ласка, поясніть, як розраховується початок Хануки. Ви також повинні пояснити послідовність запалення свічок (здається, що це одна на день, але чи важливо, яку свічку ви запалюєте?)
Рівень річки Св.

Чи потрібно нам підтримувати як нульовий, так і шість аргументів командного рядка, або ми можемо вибрати?
lirtosiast

@ThomasKwa: Обидва. Різниця полягає в тому, що версія з нульовим аргументом використовує поточну дату та час.
dan04

1
можливість малювати невикористані свічки як незасвітлені означає, що частина динамічного мистецтва Ascii - це лише один ряд зміщених зірочок, що зовсім не цікаво. не те, що мені здається, що для більшого мистецького малюнка ascii особливо цікаво почати.
Спарр

1
@Sparr частина мистецтва Ascii - це далеко не найскладніша частина цього виклику в кінцевому підсумку, перехід з григоріанської на іврит і дата, а також перевірка, чи ми в рамках свят чи ні, є набагато цікавішим IMO
Тенсібай

Відповіді:


3

Математика, 376 338 334 байт

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

Запускається за сценарієм.


3

R, 467 байт

З невеликим сумнівом, чи дозволено використання бібліотеки для перетворення Календаря чи ні.

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

Приклад для введення 2015 12 07 00 00 00:

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

Мої очі ........ :)
Девід Аренбург

1

APL (Dyalog) , 193 байт

Підказки для введення з STDIN та друкує до STDOUT.

Використовує символи для малювання поля та фактичний символ лампи !

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' Використовуйте .NET

⍳8 Перші вісім ɩ ntegers
(... )∊ Boolean для наступних , чи є членом , що:
⍳9 перші дев'ять цілих чисел
(... ).AddDays¨ для кожного, додати , що багато днів:
  ⎕NEW DateTime(... ) новий об'єкт DateTime .NET зі значенням:
   ⍞'⎕TS' STDIN і вираз для струму Т IME S TAMP
   ϵ nlist (згладити)
    виконати (оцінити), що (дає шести- або
   6↑ семиелементний числовий список) приймає перші шість елементів (YMD hms)
  i← як зберігання i(для i nput)
  (⎕NEW Globalization.HebrewCalendar).() у новому об’єкті HebrewCalendar:
   GetYear отримай (іврит) рік вхідних даних
   3 23 18,⍨ додайте їх (3 місяць, 23- й день, 18го години - за одну ніч до Хануки)
   7↑ візьміть перші сім елементів, набиваючи 0s (хвилини, секунди)
   ToDateTime перетворіть цей іврит в момент часу в нормальний об'єкт DateTime
i≥ Boolean, незалежно від того, що вхід дорівнює або після кожної з цих
+/ сум, булеві
c← зберігають як c( для c ount)
 помножте на три
 перейдіть до цього рядка (3, тобто далі, якщо Ханука; 0, тобто киньте, якщо ні)

¯5↑'⍝' неявно надрукувати останні п'ять символів символу лампи (набивання пробілами)

¯5↑'│' останні п’ять символів символу середньої свічки (набивання пробілами)
s← зберігають як s (для s tem)
9↑ перші дев'ять символів із цього (прокладки з пробілами)
 отримують (відокремлює вищезазначене знизу
'⍝'@() неявно друкують лампами, розміщеними на наступні індекси:
⍳c стільки фільтрів, скільки підрахунок розпочатих днів Хануки
r← зберігають у r(для r ange)
5≤ булів, для тих, що перевищують або дорівнюють п'яти (для пропуску середньої свічки),
r+ додайте до діапазону індексів,
10- відніміть ці десятки (для початку з право)

⍪'││┴' зробити цей рядок в матриці стовпців
9/ неявно друкувати дев'ять горизонтальних копій цього

s неявно друкують стебло

' ─┴─' неявно надрукувати цей рядок

Приклад виконання:

      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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.