Festival lampu seni ASCII

12

Tulis, sesedikit mungkin karakter , program yang menggunakan argumen baris perintah nol atau enam

menorah
menorah YEAR MONTH DAY HOUR MINUTE SECOND

(Kedua bentuk harus didukung. Versi nol-argumen harus setara dengan memanggil versi enam argumen dengan saat tanggal dan waktu sistem dalam zona waktu lokal.)

dan jika tanggal dan waktu yang ditentukan (kalender Gregorian) jatuh selama Hanukkah , maka output seni ASCII (atau seni Unicode) sembilan cabang menorah dengan jumlah lilin yang sesuai menyala. Jika tidak selama Hanukkah, maka output satu baris baru. Sebagai contoh,

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

Pada hari ke-N festival, lilin N + 1 dinyalakan: Lilin shamash pusat , dan N dari 8 lilin Hanukkah, ditempatkan dalam urutan kanan-ke-kiri.

Variasi yang diizinkan dalam format output adalah:

  • Lilin yang tidak digunakan dapat ditarik tanpa menyalakan bukannya dihilangkan.
  • Anda dapat menggunakan karakter non-ASCII untuk membuat hasilnya lebih menyenangkan secara estetika. Suka 🔥(U + 1F525) alih-alih *. Atau karakter menggambar kotak bukannya +-|.

Untuk tujuan tantangan ini, satu hari dalam kalender Ibrani dapat diasumsikan dimulai pada pukul 18:00.

Hasil harus benar untuk Gregorian tahun antara 1900 dan 2239, inklusif.


Hanukkah dimulai saat matahari terbenam pada tanggal 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
dan04
sumber
9
Bagi kita yang bukan Yahudi (dan bagi mereka yang tetapi tidak tahu bagaimana menghitung kalender Yahudi) tolong jelaskan bagaimana permulaan Hanukkah dihitung. Anda juga harus menjelaskan urutan menyalakan lilin (sepertinya satu per hari, tetapi apakah penting lilin mana yang Anda nyalakan?)
Level River St
Apakah kita diperlukan untuk mendukung kedua nol dan enam argumen baris perintah, atau dapat kita pilih?
lirtosiast
@ ThomasKwa: Keduanya. Perbedaannya adalah bahwa versi nol-argumen menggunakan saat tanggal dan waktu.
dan04
1
pilihan untuk menggambar lilin yang tidak digunakan sebagai belum menyala berarti bagian seni ascii dinamis ini hanyalah satu baris tanda bintang yang bertautan, yang tidak menarik sama sekali. bukan karena saya menemukan gambar seni ascii yang lebih besar sangat menarik untuk memulai.
Sparr
1
@Sparr porsi ascii art jauh dari bagian yang paling menantang dari tantangan ini pada akhirnya, konversi dari gregorian ke hebrew Date dan memeriksa apakah kita sedang dalam liburan atau tidak jauh lebih menarik IMO
Tensibai

Jawaban:

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

Berjalan dalam skrip.

LegionMammal978
sumber
3

R, 467 byte

Dengan sedikit keraguan apakah menggunakan perpustakaan untuk konversi Kalender diperbolehkan atau tidak.

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

Contoh untuk input 2015 12 07 00 00 00:

    *    
    |   *
    |   |
    |   |
+++++++++
    |    
   -+-   
Tensibai
sumber
Mataku ........ :)
David Arenburg
1

APL (Dyalog) , 193 byte

Meminta input dari STDIN dan mencetak ke STDOUT.

Menggunakan karakter menggambar kotak dan simbol lampu yang sebenarnya !

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

⍳8 delapan ɩ ntegers pertama
(... )∊ Boolean untuk apakah yang berikut ini adalah anggota dari itu:
⍳9 sembilan bilangan bulat pertama
(... ).AddDays¨ untuk masing-masing, tambahkan beberapa hari untuk:
  ⎕NEW DateTime(... ) DateTime baru. Objek NET dengan nilai:
   ⍞'⎕TS' STDIN dan ekspresi untuk T ime S tamp saat ini
   ϵ nlist (flatten)
    mengeksekusi (mengevaluasi) bahwa (memberikan daftar numerik enam atau tujuh elemen)
   6↑ mengambil enam elemen pertama (YMD hms)
  i← simpan sebagai i(untuk i nput)
  (⎕NEW Globalization.HebrewCalendar).(... ) dalam objek HebrewCalendar baru:
   GetYear dapatkan tahun (Ibrani) input
   3 23 18,⍨ append ini (3 bulan, 23 th hari, 18jam ke -1 - satu malam sebelum Hanukkah)
   7↑ ambil tujuh elemen pertama, padding dengan 0s (menit, detik)
   ToDateTime mengonversi titik Ibrani itu pada waktunya menjadi objek DateTime yang normal
i≥ Boolean apakah inputnya sama atau setelah masing-masing
+/ jumlah yang
c← disimpan oleh Boolean sebagai c( untuk c ount)
 kalikan dengan tiga
 pergi ke baris itu (3, yaitu selanjutnya, jika Hanukkah; 0, yaitu berhenti, jika tidak)

¯5↑'⍝' secara implisit mencetak lima karakter terakhir dari simbol lampu (padding dengan spasi)

¯5↑'│' lima karakter terakhir dari simbol tengah-lilin (bantalan dengan spasi)
s← toko sebagai s (untuk s tem)
9↑ mengambil sembilan karakter pertama dari itu (bantalan dengan spasi)
 yield (memisahkan atas dari bawah
'⍝'@(... ) implisit mencetak dengan lampu ditempatkan di indeks berikut:
⍳c sebanyak as nteger yang dihitung dari hari Hanukkah yang dimulai
r← disimpan di r(untuk r ange)
5≤ Boolean untuk mereka yang lebih besar atau sama dengan lima (untuk melewati lilin tengah)
r+ menambah kisaran indeks
10- kurangi dari sepuluh (untuk memulai pada hak)

⍪'││┴' buat string ini menjadi matriks kolom yang
9/ secara implisit mencetak sembilan salinan horizontal itu

s cetak batang secara implisit

' ─┴─' cetak string ini secara implisit

Contoh dijalankan:

      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
Adm
sumber