Фестиваль огней ASCII-art


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 ханукальных свечей, расположенных в порядке справа налево.

Допустимые изменения в выходном формате:

  • Неиспользованные свечи могут быть нарисованы неосвещенными, а не опущенными.
  • Вы можете использовать не-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
Для тех из нас, кто не является евреем (и для тех, кто не знает, как рассчитать еврейский календарь), пожалуйста, объясните, как рассчитывается начало Хануки. Вы также должны объяснить последовательность зажигания свечей (кажется, что по одной в день, но имеет ли значение, какую свечу вы зажигаете?)
Level River St

Нужно ли нам поддерживать как ноль, так и шесть аргументов командной строки, или мы можем выбрать?
Lirtosiast

@ThomasKwa: оба. Разница в том, что версия с нулевым аргументом использует текущую дату и время.
Ден04

1
Возможность рисовать неиспользованные свечи как неосвещенные означает, что динамическая часть ascii art - это всего лишь один ряд переключаемых звездочек, что совсем не интересно. не то чтобы я рисовал более крупный рисунок ascii art особенно интересным для начала.
Спарр

1
@Sparr художественная часть ascii далека от самой сложной части этой задачи в конце, переход от григорианского к ивриту Дата и проверка, находимся ли мы в праздничные дни или нет, гораздо интереснее ИМО
Тенсибай

Ответы:


3

Mathematica, 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 (Flatten)
    выполнять (оценку) , что (дает шести- или семь элементов числовому список)
   6↑ занимают первые шесть элементов (ГМД HMS)
  i← магазин как i(для I Nput)
  (⎕NEW Globalization.HebrewCalendar).(... ) в новом объекте еврейского календаря:
   GetYear получить (иврит) год к входу
   3 23 18,⍨ добавьте эти (3 месяца, 23- й день, 18ой час - за одну ночь до Хануки)
   7↑ возьмите первые семь элементов, заполнив их 0с (минутами, секундами), чтобы
   ToDateTime преобразовать этот момент времени на иврите в обычный объект DateTime.
i≥ Логическое значение, равное или равное входному значению для каждой из этих
+/ сумм, которые логические значения
c← сохраняют как c( для с р а ф)
 путем умножения на три
 пути к этой линии (3, то есть дальше, если Ханука; 0, то есть бросить курить, если нет)

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

¯5↑'│' последние пяти символов символа среднего свечи (обивка с пробелами)
s← хранить в с (для й ПОГО)
9↑ занимают первые девять символов из этого (дополнений с пробелами)
 выходом (отделяющим выше от ниже
'⍝'@(... ) неявная печать с лампами , расположенных на следующие показатели: так
⍳c как многие ɩ ntegers как кол начавших дней Хануки
r← хранить в r(для г Анж)
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.