एक ASCII चंद्रमा के चारों ओर एक ASCII बैट फ्लाई बनाएं


34

पृष्ठभूमि

यहाँ एक हेलोवीन संबंधित चुनौती है।

जैसा कि आपने मेरी पिछली चुनौती से देखा होगा कि मुझे काफी पसंद है जिसे मैं एएससीआई आर्ट एनिमेशन कहता हूं, यह सिर्फ एक पैटर्न नहीं है बल्कि एक पैटर्न है जो आगे बढ़ता है। यह विचार मेरे पास तब आया जब मैंने कुछ साल पहले हैलोवीन पर स्क्रीन पर बेतरतीब ढंग से उड़ने वाले चमगादड़ों को बनाकर (बल्कि नीरस) प्रस्तुति देने के लिए कहा था। कहने की ज़रूरत नहीं है कि मैंने विधिवत बाध्य किया (मुझे इसके लिए भुगतान किया जा रहा था), लेकिन इससे मुझे लगा कि यादृच्छिक चमगादड़ों की तुलना में जीवन के लिए और भी बहुत कुछ है। इससे प्रेरित होकर मैं इस चुनौती का प्रस्ताव करना चाहूंगा।

चुनौती

चाँद के चारों ओर एक बल्ला उड़ाओ।

यहाँ एक बल्ला है:

^o^

यहाँ चंद्रमा है:

     mmm         
   mmmmmmm       
  mmmmmmmmm      
   mmmmmmm       
     mmm     

आपको चमगादड़ की उड़ान के हर चरण को दिखाना चाहिए (आउटपुट देखें)।

इनपुट

कोई नहीं

उत्पादन

      ^o^         
      mmm         
    mmmmmmm       
   mmmmmmmmm      
    mmmmmmm       
      mmm         


      mmm^o^      
    mmmmmmm       
   mmmmmmmmm      
    mmmmmmm       
      mmm         


      mmm         
    mmmmmmm^o^    
   mmmmmmmmm      
    mmmmmmm       
      mmm         


      mmm         
    mmmmmmm       
   mmmmmmmmm^o^   
    mmmmmmm       
      mmm         


      mmm         
    mmmmmmm       
   mmmmmmmmm      
    mmmmmmm^o^    
      mmm         


      mmm         
    mmmmmmm       
   mmmmmmmmm      
    mmmmmmm       
      mmm^o^      


      mmm         
    mmmmmmm       
   mmmmmmmmm      
    mmmmmmm       
      mmm         
      ^o^         


      mmm         
    mmmmmmm       
   mmmmmmmmm      
    mmmmmmm       
   ^o^mmm         


      mmm         
    mmmmmmm       
   mmmmmmmmm      
 ^o^mmmmmmm       
      mmm         


      mmm         
    mmmmmmm       
^o^mmmmmmmmm      
    mmmmmmm       
      mmm         


      mmm         
 ^o^mmmmmmm       
   mmmmmmmmm      
    mmmmmmm       
      mmm         


   ^o^mmm         
    mmmmmmm       
   mmmmmmmmm      
    mmmmmmm       
      mmm         


      ^o^         
      mmm         
    mmmmmmm       
   mmmmmmmmm      
    mmmmmmm       
      mmm   

नियम

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

नमूना

पूरी तरह से अनियंत्रित अजगर 2 (620 बाइट्स में संदर्भ कार्यान्वयन लेकिन यह साबित करने के लिए कि यह किया जा सकता है। बाद में इसे गोल्फ कर सकते हैं)।

b='^o^'
m=['                     ',
'         mmm         ',
'       mmmmmmm       ',
'      mmmmmmmmm      ',
'       mmmmmmm       ',
'         mmm         ',
'                     ']
p=[(9,12),(12,15),(14,17),(15,18),(14,17),(12,15),(9,12),(6,9),(4,7),(3,6),(4,7),(6,9),(9,12)]
d=0
for z in range(7):
    x=map(str,m[z])
    c="".join(x[:p[z][0]]) + b + "".join(x[p[z][1]:])+"\n"
    print "\n".join(m[:z]) + "\n" + c+"\n".join(m[z+1:])
for z in range(6)[::-1]:
    x=map(str,m[z])
    c="".join(x[:p[z+6][0]]) + b + "".join(x[p[z+6][1]:])+"\n"
    print "\n".join(m[:z]) + "\n" + c+"\n".join(m[z+1:])

परिणाम

हालांकि @ जोनाथन स्पष्ट रूप से जेली के साथ बाइट काउंट पर जीतता है, मैं @ ओयरासा से ब्रेनफक जवाब को स्पष्ट रूप से स्वीकृत उत्तर के रूप में चिह्नित करने जा रहा हूं क्योंकि मुझे लगता है कि जो कोई भी वास्तव में इस तरह की पागल भाषा में कुछ कर सकता है वह योग्य है - 15 प्रतिनिधि कोई बात नहीं कितने बाइट्स लगते हैं। ऐसा इसलिए नहीं है क्योंकि मुझे गोल्फ भाषाओं से कोई समस्या है। मेटा पर इस संबंध में एक प्रश्न के मेरे उत्तर को देखेंयदि आपको कोई संदेह हो तो । सभी को बहुत-बहुत धन्यवाद और सम्मान, जिन्होंने किसी भी भाषा में योगदान दिया।


धन्यवाद @ ओलिवर मैं सैंडबॉक्स के बाद इसे निकालना भूल गया।
एलपेड्रो

@daHugLenny टैग जोड़ने के लिए धन्यवाद। मैं उस एक के बारे में सोचा नहीं था।
एलपीड्रो

6
अगर आपको लगता है कि संदर्भ कार्यान्वयन पूरी तरह से अनियंत्रित है, तो मैं आपके साथ किसी भी प्रोग्रामिंग प्रोजेक्ट पर काम नहीं करना चाहता।
निधि मोनिका मुकदमा

3
खैर, शायद थोड़ा गोल्फ हो तो :-)
एलपेड्रो

जवाबों:


9

ब्रेनफक, 690 बाइट्स

यह मेरी पहली बार गोल्फ है, इसलिए मुझे यकीन है कि सुधार के लिए अभी भी बहुत जगह है

-[-[-<]>>+<]>-<<+++[>+++++++<-]>>>+>>-[<-->-------]<->++++++++>+>+++++>+>+++++>+>+++++++>+>+++++>+>+++++>+>++++++++>+>+>+>>+++[<++++++>-]<+>+>-->+>+>+[<]>[[<+>>-[>]+[[<]>+[>]<+[<]>>>-]<<[->>+<<]>-]>-[->>>>+<<<<]>++]>>>[[-]<]>>>>[>]>>+>+++++++<<<<[<]+<+<<+[[<]++++[>++++<-]>[<+[>]>[-<+>]<[<]>>-]>[>]++++++++++[>]>>>-[<]<<[<]<]<[<]>->-<<<[-]++++++<+<+++[>++++++<-]+<++++[>++++++++<-]---<-[>+<-----]++<----[>+<----]--<-[>+<---]<-[>++<-----]++++<-[>+<---]++<-[>+<-------]---<----[>+<----]<--[>+<++++++]<+++++[>+++++<-]++++++>[[[>]>[>]>>[-<<+>>]<<[<]<[<]>-]>[>]>[>]+++++++[>+++++++++<-]>-[->+>+>+<<<]++++[>>++++<<-]>>+<<<<[<]>[.>]>>[.>]<[<]>[-]>[-]>[-]<+[--<---[->]<]<[->+>+>+<<<]<<[[->>+<<]<]<]

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

पठनीयता के लिए कुछ अनगढ़

-[-[-<]>>+<]>-<<+++[>+++++++<-]>>>+>>-[<-->-------]<->++++++++>+>+++++>+>+++++>+>+++++++>+>+++++>+>+++++>+>++++++++>+>+>+>>+++[<++++++>-]<+>+>-->+>+>+
Sets counters for creation of the m's and spaces
[<]>[[<+>>-[>]+[[<]>+[>]<+[<]>>>-]<<[->>+<<]>-]>-[->>>>+<<<<]>++]
Adds the first counter plus two of the character at the second counter to the end of the
current set of cells removes the first two counters on the list then repeats until
it encounters a 254
>>>[[-]<]>>>>[>]>>+>+++++++<<<<[<]
Removes some excess cells then adds a 7 after the end of the set of cells
+<+<<+[[<]++++[>++++<-]>[<+[>]>[-<+>]<[<]>>-]>[>]++++++++++[>]>>>-[<]<<[<]<]
Adds a newline every 16 characters until 7 newlines are added
<[<]>->-<<<[-]++++++<+<+++[>++++++<-]+<++++[>++++++++<-]---<-[>+<-----]++<----[>+<----]--<-[>+<---]<-[>++<-----]++++<-[>+<---]++<-[>+<-------]---<----[>+<----]<--[>+<++++++]<+++++[>+++++<-]++++++
Removes some excess cells then sets indices for the locations of bats
>[[[>]>[>]>>[-<<+>>]<<[<]<[<]>-]>[>]>[>]+++++++[>+++++++++<-]>-[->+>+>+<<<]++++[>>++++<<-]>>+<<<<[<]>[.>]>>[.>]<[<]>[-]>[-]>[-]<+[--<---[->]<]<[->+>+>+<<<]<<[[->>+<<]<]<]
Loops through the indices replacing the spaces at each index with a bat then printing 
the set of cells then changing the bat back to spaces

मैं इस तथ्य का उपयोग करना चाहता था कि शुरुआत में एक नई पंक्ति जोड़कर, प्रत्येक चरण को दो अलग-अलग चरणों को प्राप्त करने के लिए दोनों दिशाओं में पढ़ा जा सकता है, लेकिन मुझे ऐसा करने का एक अच्छा तरीका नहीं मिला, बिना पूरे साढ़े छह चरणों को उत्पन्न किए तुरंत।


2
बहुत अच्छा! मुझे नहीं लगता कि मेरे पास ब्रेनफक, हाहा में इस चुनौती का जवाब देने का धैर्य है।
DJMcMayhem

1
एक TIO लिंक जोड़ा, आशा है कि आपको कोई आपत्ति नहीं है। इसके अलावा, मैं 693 बाइट्स गिनता हूं।
एमिग्ना

पठनीयता के लिए अपुष्ट अभी भी अपठनीयता के लिए पहला पुरस्कार जीतेंगे :) वास्तव में ऐसा पागल भाषा में करने के लिए कुल सम्मान। बहुत अच्छा और उत्तर के लिए धन्यवाद। +1। किसी के समय के 690 बाइट्स के लायक।
एलपेड्रो

@ ईनिग्मा मेरी ओर से, TIO लिंक के लिए धन्यवाद।
एलपेड्रो

@DJMcMayhem, मैंने कॉपी / पेस्ट में गड़बड़ी की होगी, असम्बद्ध रूप में एक नकली [<] था जो केवल एक बार होना चाहिए था। अब तय होना चाहिए।
ओयारसा

23

05AB1E , 69 62 60 बाइट्स

अदनान की बदौलत 2 बाइट बच गईं

3ð×…^o^)U13FNV0379730vð5y>;ï-y_+×N(Y-12%_Xè'my×NY-12%_y&XèJ,

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

व्याख्या

3ð×…^o^)Uबाद में उपयोग के लिए X[" ","^o^"] में सूची संग्रहीत करता है ।

13FNV13 चरणों में छोरों [0 .. 12] और वाई में वर्तमान पुनरावृत्ति सूचकांक संग्रहीत करता है ।

0379730v प्रत्येक चरण की पंक्तियों पर छोरों,
जहां एन पंक्ति सूचकांक है और y मीटर की वर्तमान संख्या है ।

हम floor(5/(y+1))-(y==0)प्रत्येक पंक्ति में रिक्त स्थान जोड़कर शुरू करते हैं ð5y>;ï-y_+×

हम तब निर्धारित करते हैं कि एम के पहले एक बल्ले या 3 रिक्त स्थान होना चाहिए ।
अगर (-N-Y)%12 == 0सच है तो हम एक बैट जोड़ते हैं, बाकी 3 जगह।
यह अभिव्यक्ति ( N(Y-12%_Xè) चमगादड़ को चरणों में रखेगी 0,6-12

फिर हम जगह देते हैं y मीटर के साथ 'my×

अब हम निर्धारित करते हैं कि मीटर के बाद बल्ले या 3 रिक्त स्थान होने चाहिए ।
यदि कोड सही है, NY-12%_y&Xèतो कोड ((N-Y)%12 == 0) and y!=03 स्थान पर होगा।
यह चमगादड़ को चरणों में रखेगा 1-5

अंत में हम एक स्ट्रिंग में पूरी पंक्ति में शामिल होते हैं और एक नई रेखा के साथ प्रिंट करते हैं: J, :।


5
क्या यह वास्तव में टिन +1 पर कहता है
एलपेड्रो

1
3ð×…^o^) के बजाय " ^o^"2ä दो बाइट्स बचाना चाहिए।
अदनान

@ अदनान: धन्यवाद! किसी कारण के लिए मैंने अभी यह मान लिया है कि यह लंबा होगा और कभी कोशिश भी नहीं की जाएगी 3ð×
इमिग्ना

20

जावास्क्रिप्ट (ईएस 6), 109 144 140 138 बाइट्स

f=(k=13,b=y=>(y-k)%12?'   ':'^o^')=>k--?[0,3,7,9,7,3,0].map((n,y)=>' '.repeat(5-n/2+!n)+b(y)+'m'.repeat(n)+b(n?-y:.1)).join`
`+`
`+f(k):''

console.log(f());

एनिमेटेड संस्करण


अच्छा जवाब और आप मेरी आखिरी चुनौती पर पहले हैं :)
एलपेड्रो

1
अच्छा जवाब। मैं इस तरह से सोच कर अपना सिर नहीं लपेट सकता।
zfrisch

15

HTML + JS, 153 149 बाइट्स

n=setInterval(_=>o.innerText=`zzd
zc3e
 b7f
a9g
 l7h
zk3i
zzj`.replace(/\S/g,c=>parseInt(c,36)-n%12-10?`m`.repeat(c)||`   `:`^o^`,n++),1e3)
<pre id=o>

संपादित करें: @RickHitchcock को धन्यवाद बाइट्स का एक गुच्छा सहेजा गया। उबाऊ संस्करण है कि सिर्फ एक सरणी में 13 बहुपरत तार देता है 132 131 बाइट्स है:

_=>[...Array(13)].map((_,n)=>`zza
zl3b
 k7c
j9d
 i7e
zh3f
zzg`.replace(/\S/g,c=>parseInt(c,36)-n%12-10?`m`.repeat(c)||`   `:`^o^`))

अगर मैं वास्तव में सख्त हो रहा था, तो मैं इंगित करता हूं कि बल्ले शीर्ष पर शुरू नहीं होते हैं :) लेकिन फिर यह पूर्ण सर्कल करता है और शीर्ष पर राय खत्म होने पर निर्भर करता है जो कि मैं नियमों में निर्दिष्ट था। पहले पूर्ण एनीमेशन के लिए +1। अच्छी नौकरी और धन्यवाद।
ElPedro

@ElPedro मुझे लगता है कि जिस स्थान पर बल्ला शुरू होता है वह उस परिणाम पर निर्भर करता है setInterval, जो मेरे ब्राउज़र पर हमेशा एक जैसा होता है, लेकिन अन्य ब्राउज़रों के लिए भिन्न हो सकता है।
नील

ठीक है, लेकिन जैसा कि मैंने कहा कि शुरुआत की स्थिति स्पष्ट रूप से निर्दिष्ट नहीं की गई थी, इसलिए मैं सेटइंटरवल तय करने के लिए ठीक हूं;) यदि कोई दिलचस्पी नहीं है तो मैं उबंटू पर चोम के साथ देख रहा हूं। हमेशा शीर्ष से पहले एक स्थिति शुरू करता है, लेकिन इससे कोई फर्क नहीं पड़ता। शानदार समाधान और आपके उत्तर के लिए फिर से धन्यवाद ..
ElPedro

1
के innerHTMLबजाय का उपयोग करके आप कुछ बाइट्स बचा सकते हैं textContent। और बदल कर एक और बाइट repeat(+c)के लिए repeat(c)
रिक हिचकॉक

2
(और 1000बन सकता है 1e3।)
रिक हिचकॉक

14

जैली , 76 69 58 बाइट्स

⁾ mṁ11ż“椿¬®µ‘ŒḄ¤Œṙs⁴Y
_4¢ḣ;“^o^”;¢ṫ⁸¤
“½œ0CSbp\I7'ð½‘Ç€Y

TryItOnline

कैसे?

⁾ mṁ11ż“椿¬®µ‘ŒḄ¤Œṙs⁴Y - Link 1, make a moon (niladic)
⁾ m                     - literal " m"
   ṁ                    - reshape like
    11                  - 11 (interpreted as range(11)) -> " m m m m m "
                 ¤      - nilad followed by links as a nilad
       “椿¬®µ‘         - code page indexes [22,3,11,7,8,9]
               ŒḄ       - bounce -> [22,3,11,7,8,9,8,7,11,3,22]
      ż                 - zip -> [[22,' '],[3,'m'],[11,' '],...]
                  Œṙ    - run length decode -> "                      mmm           mmmmmmm        mmmmmmmmm        mmmmmmm           mmm                      "
                    s   - split into chunks of length
                     ⁴  - l6
                      Y - join with line feeds

_4¢ḣ;“^o^”;¢ṫ⁸¤ - Link 2, a moon with a bat placed: endIndex
_4              - subtract 4 (startIndex)
  ¢              - call last link (1) as a nilad
   ḣ            - ḣead to startIndex
    ;           - concatenate
     “^o^”      - literal "^o^"
          ;     - concatenate
              ¤ - nilad followed by links as a nilad
           ¢    - call last link (1) as a nilad
            ṫ⁸  - tail from endIndex

“½œ0CSbp\I7'ð½‘Ç€Y - Main link (niladic)
“½œ0CSbp\I7'𽑠   - code page indexes [10,30,48,67,83,98,112,92,73,55,39,24,10]
                   -    indices to the right of each bat in a constructed moon
               ǀ  - call last link (2) as a monad for each
                 Y - join on line feeds

बहुत अच्छा। मुझे लगता है कि मुझे जेली को थोड़ा करीब से देखना होगा।
एल्प्रेड्रो

महान व्याख्या। धन्यवाद।
एलपेड्रो

यह देखने के लिए अच्छा होगा कि यदि आप रुचि रखते हैं और आपके पास समय है, तो आप पायथन में भी कैसे पहुंचेंगे। मैं हमेशा सीखकर खुश हूं।
एलपेड्रो

12

पायथन 2, 146 144 138 बाइट्स

-2 बाइट्स @Willem करने के लिए धन्यवाद (चर का उपयोग cनहीं बल्कि एक के माध्यम से पाशन से map)

m='\n'.join(int(a)*' '+int(b)*'m'+3*' 'for a,b in zip('6643466','0379730'))
for b in" -;L[hrbQ@2' ":c=ord(b)-23;print(m[:c-3]+'^o^'+m[c:])

repl.it

'6643466' चंद्रमा से पहले रिक्त स्थान की संख्या है (खाली पहली और आखिरी पंक्तियों पर 6 के साथ, चूंकि बल्ला वहां जाएगा)।

'0379730' की संख्या है 'm' प्रत्येक पंक्ति पर चंद्रमा में रों।

zipमें इन पात्रों unpacks aऔर bऔर आकाश में चंद्रमा बना देता है,m , प्रत्येक पंक्ति पर 3 अनुगामी रिक्त स्थान के साथ।

अंतिम पंक्ति फिर चंद्रमा के भीतर बल्ले की स्थिति का पता लगाती है, और प्रभावी रूप से:

for c in(9,22,36,53,68,81,91,75,58,41,27,16,9):print(m[:c-3]+'^o^'+m[c:])

लेकिन पदों का टाप प्रिंटेड वर्णों के अध्यादेशों के रूप में एन्कोडेड है, एक जोड़ा 23 के साथ (चूंकि 9 मुद्रण योग्य नहीं है)। इस के रूप में बाहर आता है " -;L[hrbQ@2' ", औरc=ord(b)-23 मूल्यों को निकालने के लिए उपयोग किया जाता है।


सम्मान 1 और चुनौती को
बढ़ाने के

कभी-कभी मेरी इच्छा होती है कि मैं 2 उत्थान दे सकूं।
एलपेड्रो

1
आप इस तरह लिखकर अंतिम पंक्ति पर दो वर्णों को बचा सकते हैं:for b in" -;L[hrbQ@2' ":c=ord(b)-23;print(m[:c-3]+'^o^'+m[c:])
विलेम

7

ऑटोविम , 85 81 बाइट्स

कोई एनीमेशन नहीं, शायद अभी भी गोल्फ है ... फिर भी, ब्लॉक पर नए बच्चे के लिए बुरा नहीं है! (Autovim)

ñ9am␛ÿP2xÿP4xyjGpđp2o
%ce 15
®q=8j$p
®z=6␍"_d3hP
ñğyG12PğÿPC^o^␛v^y6@q==o␛6@z==O

इसे चलाने के लिए:

autovim run ascii-bat.autovim -ni

व्याख्या

संक्षेप में, हम चंद्रमा को आकर्षित करते हैं, इसे 12 बार कॉपी और पेस्ट करते हैं, और दो मैक्रोज़ का उपयोग करते हैं: एक पहले 7 चंद्रमाओं पर बल्ले को जोड़ने के लिए, दूसरा अंतिम 6 को प्रीपेन्ड करने के लिए।

" Draw the moon
ñ                                 " Normal mode
 9am␛                            " Write 9 `m`
      ÿP                          " Duplicate the line
        2x                        " Delete two characters
          ÿP                      " Duplicate the line
            4x                    " Delete 4 characters
              yj                  " Yank two lines
                Gp                " Paste at the end of the file
                  đp              " inverts the current line with the previous
                    2o            " Add two line breaks

%ce 15                            " Center our moon

" Macros
®q=8j$p                           " Macro `q` jumps 8 lines, and pastes
                                  "   at the end
®z=6␍"_d3hP                      " Macro `z` jumps 6 lines and replaces
                                  "   the previous 3 characters by the default

" Draw all 12 moons and add the bats
                                  "   register's content
ñ                                 " Run in normal mode
 ğyG                              " Copy the moon we just drew
    12P                           " Duplicate the moon 12 times
       ğÿP                        " Duplicate the top line (gets 3 centered `m`)
          C^o^␛                  " Change the mmm by a bat
                v^y               " Copy the bat we just drew
                   6@q            " Add the first 6 bats
                      ==          " Center the bat
                        o␛       " Add a line under the bat
                           6@z    " Add the 6 last bats
                              ==  " Align the last bat in the center
                                O " Add a line over the last moon

1
मैंने डाउनलोड निर्देश का पालन किया, VIM स्थापित किया और निम्नलिखित के साथ समाप्त हुआ: VIM - Vi IMproved 7.4 (2013 अगस्त 10, संकलित 9 दिसंबर 2014 17:36:41) अज्ञात विकल्प तर्क: "- a-term" अधिक जानकारी साथ: "vim -h" को अब इसे देखने का समय नहीं मिला, लेकिन आज शाम एक नाटक होगा। एक दिलचस्प परियोजना की तरह लग रहा है।
एलपेड्रो

1
यदि आपके पास कुछ समय है, तो एक GitHub समस्या खोलें - यह मेरे फोन (टर्मक्स, एक लिनक्स वितरण) के साथ-साथ गिट बैश में विंडोज पर काम कर रहा है। मैं इसे हर जगह काम करना पसंद करूंगा! मेरा सबसे अच्छा अनुमान यह है कि 2013 में संकलित वीआईएम वास्तव में नवीनतम संस्करण नहीं हो सकता है :) (नवीनतम संस्करण 8.0 है)
क्रिश्चियन रोंडू

ठीक है। मैंने अभी पैकेज मैनेजर से स्थापित किया है, इसलिए शायद मैं अपग्रेड विकल्प का प्रयास करूंगा। मैं आपको बताती हूं कि क्या होता है।
एलपेड्रो

1
अनुरोध के अनुसार GitHub पर मुद्दा उठाया गया। कृपया बेझिझक नजरअंदाज करें / अस्वीकार करें यदि आप इसे समस्या नहीं मानते हैं क्योंकि उन्नयन ने इसे हल किया है।
एलपीड्रो

1
तो इसका मतलब है कि यह अब काम करता है! महान!
क्रिश्चियन रोंडेउ

7

PHP, 167 बाइट्स

मैंने PHP में एक छोटा प्रोग्राम बनाया:

<?php foreach([0,3,7,9,7,3,0]as$l)$b.=str_pad(str_repeat('=',$l),15," ",2)."\n";foreach([6,25,43,60,75,89,102,83,65,48,33,19,6]as$x)echo substr_replace($b,'^o^',$x,3);

यहाँ एक अधिक वर्बोज़ संस्करण है:

// width of the moon
$moonsizes = [0,3,7,9,7,3,0];
// position where to place the bat
$positions = [6,25,43,60,75,89,102,83,65,48,33,19,6];
// prepare base moon painting
foreach($moonsizes as $size){
    $basepainting .= str_pad(str_repeat('=',$size),15," ",STR_PAD_BOTH)."\n";
}
// loop frames and place bat
foreach($positions as $position) {
    echo substr_replace($basepainting,'^o^',$position,3);
}

यह मेरा पहला कोडगोल्फ है, अगर आपके पास कोई सुझाव है तो मुझे खुशी होगी :)


PPCG में आपका स्वागत है! अच्छा पहला जवाब। धन्यवाद।
ElPedro

7

पायथन 2, 112 बाइट्स

b=['   ','^o^']
for k in range(91):r=k%7;print(b[k/7+r==12]*(r%6>0)+(r*(6-r)*8/5-5)*'m'+b[k/7%12==r]).center(15)

चित्र प्रिंट करें। प्रत्येक पंक्ति के तीन भाग होते हैं

  • बाईं ओर एक संभावित बल्ला
  • कुछ संख्या mचंद्रमा के लिए है
  • दायीं ओर एक संभावित बल्ला

इन भागों को स्पेसिंग के लिए आकार 15 के एक बॉक्स में समतल और केंद्रित किया जाता है। केंद्र को स्थानांतरित करने वाले चमगादड़ से बचने के लिए, एक लापता बल्ला तीन रिक्त स्थान, एक ही लंबाई है। चंद्रमा के ऊपर या नीचे चमगादड़ के लिए, बाएं बार स्लॉट को छोड़ दिया जाता है और दाएं स्लॉट पर कब्जा कर लिया जाता है।

वहाँ 91 लाइनें हैं: 13 तस्वीरों में से प्रत्येक के लिए एक 7-लाइन चित्र। इनकी गिनती divmod के माध्यम से की जाती है: जैसा कि इससे kहोता 0है 91, (k/7, k%7)जाता है

(0, 0)
(0, 1)
(0, 2)
(0, 3)
(0, 4)
(0, 5)
(0, 6)
(1, 0)
(1, 1)
 ....
(12, 5)
(12, 6)

पहला मान k/7चित्र और दूसरा मान होनाr=k%7 रूप में तस्वीर के भीतर पंक्ति संख्या के रूप में, यह चित्र द्वारा पहले गिना जाता है, फिर प्रत्येक चित्र के भीतर पंक्ति संख्या से, दोनों को 0-अनुक्रमित किया जाता है।

की संख्या m'पंक्ति संख्या के साथ चंद्रमा परिवर्तन में है r=k%7के रूप में [0,3,7,9,7,3,0]। इसमें अनुक्रमण करने के बजाय, एक सूत्र छोटा था। स्वतंत्रता की एक सुविधाजनक डिग्री यह है कि 0किसी भी नकारात्मक मूल्य हो सकता है, क्योंकि यह अभी भी गुणा द्वारा खाली स्ट्रिंग देता है m। एक पेराबोला और फर्श-विभाजन के साथ फ़िडलिंग ने एक सूत्र दियाr*(6-r)*8/5-5

अब, हम यह देखना चाहते हैं कि दोनों ओर से बल्ला या खाली स्थान खींचना है या नहीं। सरणीb=[' ','^o^'] में विकल्प होते हैं।

चित्र 0 में पंक्ति 0 में (शीर्ष पर), चित्र 1 में पंक्ति 1 में (दाईं ओर), चित्र 6 में पंक्ति 6 ​​में (शीर्ष पर) पंक्ति में बल्ले। इसलिए, यह है, चाहे वह पंक्ति और बराबर होने के रूप चित्र संख्या के रूप में दिखाई देता है आसान है k/7==r। लेकिन हमें चित्र 0 की तरह दिखने के लिए चित्र 12 की भी आवश्यकता है, इसलिए हम चित्र संख्या modulo 12 को पहले लेते हैं।

बाईं ओर यह समान है। r=5,4,3,2,1चित्रों में बल्ला बाईं ओर पंक्तियों में दिखाई देता है 7,8,9,10,11। तो, हम जाँचते हैं कि क्या पंक्ति और चित्र संख्या संख्या 12 है। हम यह भी सुनिश्चित करते हैं कि पंक्तियों पर तीन स्थानों के बजाय कुछ भी नहीं खींचना चाहिए 0और 6- सही बल्ले का स्लॉट बल्ले को खींचेगा, और हमें इसके केंद्र को गड़बड़ाना नहीं चाहिए।


1
एक त्वरित स्पष्टीकरण @xnor का कोई भी मौका? मैंने इसे चलाया है और यह निश्चित रूप से काम करता है इसलिए किसी स्पष्टीकरण की आवश्यकता नहीं है, लेकिन अगर आपके पास समय है और झुकाव यह शैक्षिक उद्देश्यों के लिए दिलचस्प होगा :)
ElPedro

+1 के लिए "एक पैराबोला और फ़्लोर-डिवाइडिंग के साथ फ़िडलिंग ..." - अगर मुझे अनुमान लगाना है, तो यह पहली बार है कि वाक्यांश पीपीसीजी में उपयोग किया गया है ... :-)
zmerch

धन्यवाद @xnor बहुत बढ़िया व्याख्या। मुझे यह अध्ययन करने में कुछ समय बिताना होगा :)
एलपेड्रो

6

सी#, 615 582 337 बाइट्स

यह इनमें से एक पर मेरा पहला (अभी भी बहुत पठनीय) प्रयास है, इसलिए मैं कुछ सौ बाइट्स को शेव करने के लिए किसी भी सुझाव का खुशी से स्वागत करूंगा! मेरी सूची के शीर्ष पर अभी चंद्रमा सरणी बनाने का एक छोटा तरीका है।

void M(){string[]m={"","      mmm","    mmmmmmm","   mmmmmmmmm","    mmmmmmm","      mmm",""};var b="^o^";for(int x=0;x<13;x++){var a=(string[])m.Clone();int n=x>6?12-x:x;int[] j={0,1,3,6};a[n]=!a[n].Contains("m")?"      "+b:x<=n?a[n]+b:new string(' ',j[Math.Abs(9-x)])+b+a[n].Replace(" ","");foreach(var c in a){Console.WriteLine(c);}}}

अनगोल्डेड (लूप शामिल है!)

class Program {
    public static string[] moon = new string[] { "               ", "      mmm      ", "    mmmmmmm    ", "   mmmmmmmmm   ", "    mmmmmmm    ", "      mmm      ", "               " };

    public static string bat = "^o^";

    static void Main(string[] args) {
        while (true) {
            Fly();
        }
    }

    static void Fly() {
        int times = (moon.Length * 2) - 1;
        for (int x = 0; x < times; x++) {
            string[] temp = (string[])moon.Clone(); //create a new array to maintain the original

            int index = x >= moon.Length ? times - x - 1 : x;

            if (!temp[index].Contains("m")) {
                temp[index] = new string(' ', 6) + bat + new string(' ', 6);
            } else if (x <= index) {
                int lastM = temp[index].LastIndexOf('m') + 1;
                temp[index] = temp[index].Insert(lastM, bat);
            } else {
                int firstM = temp[index].IndexOf('m');
                char[] src = temp[index].ToCharArray();
                int i = firstM - bat.Length;
                src[i] = bat[0];
                src[i + 1] = bat[1];
                src[i + 2] = bat[2];

                temp[index] = new string(src);
            }

            for (int y = 0; y < temp.Length; y++) {
                Console.WriteLine(temp[y]);
            }
            Thread.Sleep(100);
            Console.Clear();
        }            
    }
}

संपादित करें:

सरणी घोषणा में अनुगामी रिक्त स्थान को हटाकर 21 बाइट्स निकाले। ग्रिड 15 वर्णों के बजाय, प्रत्येक पंक्ति केवल बल्ले के फिट होने के लिए पर्याप्त चौड़ी है। Main()घोषणा में अनावश्यक स्ट्रिंग के लिए एक और 12 को हटा दिया गया है [] ।

2 संपादित करें:

245 बाइट्स निकालकर, अधिकांश तर्क को फिर से लिखिए! टिप्पणियों से सुझाए गए बदलाव शामिल हैं। धन्यवाद!

टिप्पणियों से, इसे M()पिछली Main()पद्धति के बजाय एक फ़ंक्शन में बदल दिया - इसलिए अब, इसे बाहरी रूप से कहा जाना चाहिए।


PPCG में आपका स्वागत है! :)
मार्टिन एंडर

आपका स्वागत है और अच्छा पहला प्रयास! आपके उत्तर के लिए धन्यवाद। नहीं एसी # विशेषज्ञ खुद तो शायद आप बहुत मदद नहीं कर सकते, लेकिन मुझे यकीन है कि आप कई समुदाय के सदस्यों को पाएंगे जो मदद करने में प्रसन्न होंगे।
एलपेड्रो

2
आप को हटाने के द्वारा कुछ बाइट्स बचा सकता new string[]से mऔर बस डाल string[]m={...}
प्रोक्यू 2222

2
कर सकते हैं सुरक्षित का उपयोग करके कुछ और बाइट var'जैसे स्थानों में है string[]w=(string[])m.Clone();- var w=(strin[])m.Clone();
एमएक्स डी

1
@ElPedro ज़रूर, मैं इसे ले जाऊँगा! यह निश्चित रूप से एक कॉल करने योग्य फ़ंक्शन के रूप में काम करता है जो वांछित परिणाम उत्पन्न करता है। अनायास, मैंने इसे फिर से लिखने की कोशिश की और एक सुंदर "चतुर" समाधान पाया। मेरे चैरगिन के लिए, मैंने वर्तमान बाइट काउंट से +1 को समाप्त किया, इसलिए मुझे लगता है कि मैं इसे यहाँ छोड़ने जा रहा हूँ - एक बहुत बड़ी चुनौती के लिए धन्यवाद! यह निश्चित रूप से मुझे कुछ नई चीजें सिखाता है।
लेवलोनहुमन

6

अजगर 2, 299 300 290 270 बाइट्स

270 से नीचे गोल्फ को थोड़ा और गोल्फ का अनुभव प्राप्त हुआ।

संदर्भ कार्यान्वयन ३२१ ३२० से नीचे चला गया ३३० बाइट्स से । सुंदर या सुरुचिपूर्ण नहीं। बस जानवर बल स्ट्रिंग और सूची टुकड़ा करने की क्रिया का उपयोग करता है। हालांकि बाइट को नीचे लाने के लिए मजेदार था, लेकिन मुझे लगता है कि गंभीर प्रतियोगी के लिए शुरू करने के लिए दृष्टिकोण पूरी तरह से गलत था।

मुझे उम्मीद नहीं है कि इस जवाब को गंभीरता से लिया जाएगा इसलिए कृपया नीचे नहीं जाए। मैंने सवाल में कहा था कि मैं संदर्भ कार्यान्वयन को लागू करने की कोशिश करूंगा और यह ठीक यही है। बस मजे के लिए पोस्ट किया गया।

c,e,n=' ','m','\n';f,g=c*9+e*3+c*9,c*7+e*7+c*7;h=9,12;i=12,15;j=6,9;k=13,17;l=4,7;m=c*21,f,g,c*6+e*9+c*6,g,f,c*21;p=h,i,k,(15,18),k,i,h,j,l,(3,6),l,j,h;w=0
for z in map(int,'0123456543210'):print n.join(m[:z])+n+m[z][:p[w][0]]+'^o^'+m[z][p[w][1]:]+n+n.join(m[z+1:]);w+=1

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


3

रूबी, 164 156 बाइट्स

puts Zlib.inflate Base64.decode64 "eNqlkrUVAAEMQvtMcZP9DfLYvzo3qhNSxQ2GVRC1ad29ar1JXaoHbul16Yig+p6BCKqtFBFU+1IE1famoHrX/jZBvN8e8f5tiE94Ib4SBREwNKH5BNJy2QM="

बहुत ही सरल कार्यक्रम। अधिक पर काम किया जा सकता है। कृपया टिप्पणियों में सुझाव छोड़ दें।


अच्छा जवाब। मैं इस समय रूबी के साथ खेल रहा हूँ क्योंकि यह जब गोल्फ की बात आती है तो पायथन की तुलना में बहुत कम क्रिया दिखती है।
एलपेड्रो

3
@ElPedro यह सिर्फ व्हाट्सएप, ज़्लिब संपीड़ित, और बेस 64 एनकोडेड के पीछे का पाठ है। कोई जादू रूबी कार्रवाई कहीं भी।
dkudriavtsev 20

फिर भी लगता है कि यह दृष्टिकोण पायथन के साथ बहुत अधिक भारी होगा जब तक कोई मुझे गलत साबित नहीं करना चाहता (@
जोनाथन कभी भी

वेल्ड, मैं कुछ पुस्तकालयों को शामिल करना भूल गया और एसई मुझे ऐसा करने नहीं देगा। क्या कोई कृपया base64और zlibलाइब्रेरी को कम से कम संभव तरीके से शामिल कर सकता है, और उन्हें बाइट की संख्या में जोड़ सकता है?
dkudriavtsev

क्या कोई अंतर है putsऔर say? मैं रूबी से परिचित नहीं हूं।
रोमन ग्रैफ


2

कण्ठमाला, 223 बाइट्स

यह InterSystems कैश मम्प्स का उपयोग कर रहा है - यह छोरों के चारों ओर ब्रेसिज़ की अनुमति देता है जो एक पंक्ति में नेस्टेड लूप के लिए काम करते हैं।

S X="09121415141209060403040609",R="097679",L="037973",S=-14 F Y=1:1:13 S S=S+2 F C=1:1:7 S F=$E(X,Y*2-1,Y*2),(M,T)="",$P(T," ",21)="" F A=1:1:$E(L,C){S M=M_"m"} S $E(T,$E(R,C))=M S:C=$S(Y<8:Y,1:Y-S) $E(T,F,F+2)="^o^" W T,!

शायद अधिक गोल्फ हो सकता है, और मैं उस समय के साथ खेल सकता हूं जब मेरे पास अधिक समय होगा। एक और 9 बाइट्स जोड़ें, और यह एनिमेटेड होगा [['H 1 W #' -> के जोड़ के कारण जो एक सेकंड के लिए रुकता है और स्क्रीन को साफ करता है:

S X="09121415141209060403040609",R="097679",L="037973",S=-14 F Y=1:1:13 S S=S+2 H 1 W # F C=1:1:7 S F=$E(X,Y*2-1,Y*2),(M,T)="",$P(T," ",21)="" F A=1:1:$E(L,C){S M=M_"m"} S $E(T,$E(R,C))=M S:C=$S(Y<8:Y,1:Y-S) $E(T,F,F+2)="^o^" W T,!

यहां सही 'do' स्टेटमेंट्स और डॉट लूप्स के साथ एक अनगढ़ / समझाया गया संस्करण (एनिमेशन संस्करण का) है:

 S X="09121415141209060403040609"
 S R="097679",L="037973",S=-14              ; Initialize Variablex
 F Y=1:1:13 D                               ; Set up our main loop of 13 cels
 . S S=S+2                                  ; set up secondary counter, for start char.
 . H 1                                      ; halt for 1 second
 . W #                                      ; clear screen
 . F C=1:1:7 D                              ; set up our per-line loop
 . . S F=$E(X,Y*2-1,Y*2)                    ; set F to 2-digit "start of bat"
 . . S (M,T)=""                             ; set our "builder" lines to empty strings
 . . S $P(T," ",21)=""                      ; then reset our main 'line string' to 21 spaces.
 . . F A=1:1:$E(L,C){S M=M_"m"}             ; make our 'moon' text.
 . . S $E(T,$E(R,C))=M                      ; and insert our 'moon' into the empty line
 . . S:C=$S(Y<8:Y,1:Y-S) $E(T,F,F+2)="^o^"  ; find the start character for our 'bat' and insert.
 . . W T,!                                  ; and write the line and a CR/LF.

मैंने "कम्प्रेस तो बेस -64 एनकोड" जैज़ करने की कोशिश की, बस यह देखने के लिए कि क्या होगा, लेकिन एन्कोडेड स्ट्रिंग कार्यक्रम से थोड़ा अधिक समय तक समाप्त हो गया! कि, और कैश की प्रणाली संपीड़न और base64 एन्कोडिंग के लिए कॉल काफी लंबा है ... उदाहरण के लिए, यहाँ base64 डिकोड करने के लिए सिस्टम कॉल है: $ System.Enc एन्क्रिप्शन.Base64Decode (STRING)

यह विधि 300 से अधिक वर्णों के लिए कार्यक्रम को 'ब्लॉट' करेगी, मुझे लगता है ...

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