चंद्रमा चरण खींचना


20

चुनौती

चंद्रमा के चरण को देखते हुए, इसे ASCII कला का उपयोग करके ड्रा करें।

आपके कार्यक्रम को नए चाँद को संभालना चाहिए, वैक्सिंग वर्धमान, पहली तिमाही, वैक्सिंग गिबस, पूर्णिमा, वानिंग गिबस, अंतिम तिमाही और वानिंग वर्धमान। आपका इनपुट पूर्णांक होगा।

0 -> new moon
1 -> waxing crescent
2 -> first quarter
3 -> waxing gibbous
4 -> full moon
5 -> waning gibbous
6 -> last quarter
7 -> waning crescent

ASCII कला सभी को 16x8 ग्रिड (क्योंकि चरित्र आयाम अनुपात) पर रखा गया है। आप .किसी भी चरित्र के #साथ और किसी भी गैर-व्हाट्सएप चरित्र के साथ बदल सकते हैं ।

अमावस्या के लिए आउटपुट होना चाहिए:

................
................
................
................
................
................
................
................

एपिलेशन के लिए:

..........######
............####
.............###
.............###
.............###
.............###
............####
..........######

पहली तिमाही के लिए:

........########
........########
........########
........########
........########
........########
........########
........########

मोम लगाने के लिए:

......##########
....############
...#############
...#############
...#############
...#############
....############
......##########

और पूर्णिमा के लिए:

################
################
################
################
################
################
################
################

वानिंग वर्धमान केवल वैक्सिंग वर्धमान है प्रत्येक रेखा के साथ उलट, वानिंग गिबस और वैक्सिंग गिबस, और पहली और अंतिम तिमाही के साथ।

नियम

  • स्टैंडर्ड लोफॉल्स लागू होते हैं
  • यदि आप चाहें तो विपरीत दिशा में आउटपुट / वेनिंग को चुन सकते हैं, हालांकि इससे कोई अंतर नहीं होना चाहिए (इस प्रश्न में दिखाए गए ग्राफिक्स उत्तरी गोलार्ध के लिए हैं)
  • आपका आउटपुट बिल्कुल निर्दिष्ट होना चाहिए। आपकी newlines किसी भी उचित लाइन विभाजक हो सकती हैं, और यदि आप चाहें तो एक नई अनुगामी हो सकती है।


"हालांकि इससे कोई फर्क नहीं पड़ना चाहिए" - मुझे एक बाइट को बचाया (मुझे आशा है कि मुझे यह सही लगा) :)
जोनाथन एलन

1
क्या यह ASCII कला होना चाहिए? MoonPhase["Icon"]Mathematica में 17 बाइट्स है ...
एक पेड़ नहीं

@JonathanAllan ओह अच्छा। ठीक है तो यह एक अंतर हो सकता है: पी
हायपरनीट्रीनो

@ lanlock4 आपने मुझे ASCII कला बनाने के कारणों में से एक बताया। इसके अलावा हाँ यह ASCII कला होना चाहिए।
हाइपरएन्यूट्रीनो

जवाबों:


7

जेली ,  43 32 बाइट्स

-7 बाइट्स बिट-मास्क से तुलना-मास्क
-2 बाइट्स के साथ
चलती हैं, कुछ टैसिट प्रोग्रामिंग सुधार -1 बाइट के साथ दक्षिणी गोलार्ध
-1 बाइट में चलती हैं - ऑल-न्यू ɓचेन सेपरेटर का उपयोग करें ... इसका पहला कभी उपयोग करें!

“>,##‘m0Dm€0ż@€4Ḷ¤Œṙɓ%4>C¹⁸:4¤?Y

के 0लिए .और के 1लिए वर्ण का उपयोग करता है #

एक परीक्षण सूट में सभी मामलों में यह ऑनलाइन कोशिश करो!

कैसे?

पहले चार चरणों को कैप्चर करने वाला मास्क बनाता है, और लाइनों को उलटने के बजाय चरण 4 के गैर-शून्य होने पर मॉडुलो -4 चरण परिणाम के परिणामस्वरूप मूल्यों को पूरक करता है।

मैं मूल रूप से एक सा मुखौटा बनाया, लेकिन मुखौटा मूल्यों थे 0, 8, 12, और 14- 0000, 1000, 1100, और 1110- इन है phaseप्रमुख लोगों - तो एक तुलना-मुखौटा बजाय प्रयोग किया जा सकता है।

“>,##‘m0Dm€0ż@€4Ḷ¤Œṙɓ%4>C¹⁸:4¤?Y - Main link 1: number phase
“>,##‘                           - code-page index literal [62,44,35,35]
      m0                         - reflect -> [62,44,35,35,35,35,44,62]
        D                        - decimalise -> [[6,2],[4,4],[3,5],[3,5],[3,5],[3,5],[4,4],[6,2]]
         m€0                     - reflect €ach -> [[6,2,2,6],[4,4,4,4],[3,5,5,3],[3,5,5,3],[3,5,5,3],[3,5,5,3],[4,4,4,4],[6,2,2,6]]
                 ¤               - nilad and link(s) as a nilad:
               4                 -   literal 4
                Ḷ                -   lowered range -> [0,1,2,3]
            ż@€                  - zip (reverse @rguments) for €ach -> [[[0,6],[1,2],[2,2],[3,6]],[[0,4],[1,4],[2,4],[3,4]],[[0,3],[1,5],[2,5],[3,3]],[[0,3],[1,5],[2,5],[3,3]],[[0,3],[1,5],[2,5],[3,3]],[[0,3],[1,5],[2,5],[3,3]],[[0,4],[1,4],[2,4],[3,4]],[[0,6],[1,2],[2,2],[3,6]]]
                  Œṙ             - run-length decode -> [[0,0,0,0,0,0,1,1,2,2,3,3,3,3,3,3],[0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3],[0,0,0,1,1,1,1,1,2,2,2,2,2,3,3,3],[0,0,0,1,1,1,1,1,2,2,2,2,2,3,3,3],[0,0,0,1,1,1,1,1,2,2,2,2,2,3,3,3],[0,0,0,1,1,1,1,1,2,2,2,2,2,3,3,3],[0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3],[0,0,0,0,0,0,1,1,2,2,3,3,3,3,3,3]]
                                    -   i.e.: 0000001122333333  -
                                              0000111122223333  - Marking out the separate
                                              0001111122222333  - regions as filled up by
                                              0001111122222333  - the phases of the moon in
                                              0001111122222333  - the southern hemisphere.
                                              0001111122222333  -
                                              0000111122223333  -
                                              0000001122333333  -
                    ɓ            - dyadic chain separation & swap arguments, call that m
                     %4          - phase mod 4
                       >         - greater than? (vectorises across m) 1 if so 0 if not
                              ?  - if:
                             ¤   -   nilad followed by link(s) as a nilad:
                          ⁸      -     link's left argument, phase
                           :4    -     integer divide by 4
                        C        - then: complement
                         ¹       - else: identity (do nothing)
                               Y - join with newlines
                                 - implicit print

3
यह एक भाषा नहीं है, यह मॉडेम शोर है ...
अलनीतक

@Alnitak PPCG में आपका स्वागत है! क्या आप इस PPCG.SE में शामिल हुए ताकि आप वह टिप्पणी कर सकें? ;)
हाइपरएन्यूट्रीनो

8

जावास्क्रिप्ट (ईएस 6), 121 ... 103 92 बाइट्स

f=(n,i=128)=>i--?f(n,i)+(i%16?'':`
`)+'.#.'[i%16+4*n-~-'31000013'[n&1?i>>4:1]*~-(n&2)>>4]:''

डेमो


अजी, मैं इसे दोपहर के भोजन के समय देना चाहता था। संदेह है कि मैं तुम्हें पीटा होगा, हालांकि।
झबरा

4

हास्केल , 98 90 बाइट्स

f i=do{a<-[3,1,0,0,0,0,1,3];[".#."!!div(i*4+x+[0,a-1,0,1-a]!!mod i 4)16|x<-[0..15]]++"\n"}

यह सूची मोनड ( doपंक्तियों के लिए एक ब्लॉक और स्तंभों के लिए एक सूची) का उपयोग करके पंक्तियों और स्तंभों के माध्यम से लूप करता है और निर्धारित करता है कि इनपुट की अभिव्यक्ति का उपयोग करके प्रत्येक सेल के लिए कौन सा वर्ण है ( i), पंक्ति के लिए ऑफसेट मूल्य ( a), और कॉलम इंडेक्स ( x)।

सच्ची ऑफसेट के लिए उपप्रकारक को सरल करके 8 बाइट्स सहेजे गए।


3

पायथन 2 , 144 142 127 बाइट्स

i=input()
a,b='#.'[::i/4*2-1]
i%=4
for x in range(8):y=(int(abs(x-3.5))or 1)+2;y=[y,16-y][i>2];y=[i*4,y][i%2];print(16-y)*a+b*y

इसे ऑनलाइन आज़माएं!

निश्चित रूप से आगे गोल्फ हो सकता है, सुझावों की सराहना की जाती है :)

1 बाइट से भूमिगत गोले का धन्यवाद!

ओवी और मेगो की बदौलत बहुत से बाइट्स से दूर रहा क्योंकि मैं एक मूर्ख हूं जो कोडगुल्फ़ के लिए 4 रिक्त स्थान का उपयोग नहीं करना भूल जाता है :)


if i>2:y=16-yको बदला जा सकता है y=[16-y,y][i>2], जो लंबा है, लेकिन अर्धविराम के उदार उपयोग के साथ आपके लूप को कई बाइट्स को बचाने के लिए वन-लाइनर बनाने की अनुमति देगा।
मेगो

2

PHP, 105 बाइट्स

for(;$i++<8;)echo($p=str_pad)($p("",[16,16-$b=_64333346[$i],8,$b][3&$a=$argn],_M[$a/4]),16,M_[$a/4])."
";

इसे ऑनलाइन आज़माएं!


1
क्यों नहीं $a/4? इंडेक्सिंग कटिंग करेगा। :)
टाइटस

@ टिट्स मुझे इसकी जानकारी नहीं है। थैंक यू
जॉर्ग हल्सरमैन

1

गणितज्ञ, 125 बाइट्स

s=Switch;Grid@If[1<#<6,#&,1-#&][s[m=#~Mod~4,0,0,2,1,_,1-{3.4,5}~DiskMatrix~{8,16}]s[m,1,h=Table[Boole[i>8],8,{i,16}],_,1-h]]&

एक ग्रिड का उपयोग करता है और क्रमशः 1और 0बदले में देता है।.#

यह दो मास्क, एक परिपत्र एक और एक आधा छायांकित एक का उपयोग करके काम करता है, और उचित आकार प्राप्त करने के लिए तार्किक रूप से संयोजन करता है।

दो मुखौटे 1-{3.4,5}~DiskMatrix~{8,16}परिपत्र एक के लिए, और Table[Boole[i>8],8,{i,16}]आधे एक के लिए बनाए जाते हैं । तर्क इस प्रकार है:

output = f(a AND b)

where f, a and b are:

n | f    a  b
--+-----------
0 | NOT  F  ◨ 
1 | NOT  ○  ◧ 
2 | 1    T  ◨
3 | 1    ○  ◨
4 | 1    F  ◨ 
5 | 1    ○  ◧ 
6 | NOT  T  ◨ 
7 | NOT  ○  ◨

के लिए और के लिए गुणा का उपयोग करके तर्क को 1s और 0s के साथ जोड़ा जाता है ।ANDx -> 1-xNOT

28 बाइट्स के लिए एक बोनस (गैर-एएससीआईआई) समाधान: IconData["MoonPhase",#/4-1]&

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.