जन्मदिन मुबारक हो, चलो कुछ केक है!


12

यह मेरे दोस्त का जन्मदिन जल्द ही है और क्योंकि वह एक प्रोग्रामर और ASCII कला प्रेमी है, मैंने सोचा कि मैं उसे कुछ ASCII केक बनाऊंगा!

अफसोस की बात है कि मैं उसकी वर्तमान आयु को भूलता जा रहा हूं, इसलिए मैं अपने ASCII ओवन के लिए एक कार्यक्रम रखना चाहूंगा, जो कि एक निर्दिष्ट संख्या में मोमबत्तियों के साथ एक केक बनाता है, इसलिए अगर मुझे उसके साथ गलत लगता है, तो मुझे इसे स्वयं करने की आवश्यकता नहीं है उम्र।

ASCII ओवन में केवल सीमित मेमोरी और स्टोरेज क्षमता होती है, इसलिए इसे संभव सबसे कम बाइट्स का उपयोग करना चाहिए ।


आपका कार्य:

एक प्रोग्राम लिखें जो कंसोल के लिए एक जन्मदिन का केक आउटपुट करता है, जिसमें इनपुट के रूप में कई मोमबत्तियां होती हैं।

केक की आवश्यकताएं हैं:

  • इसमें एक सीमा होती है, जो क्षैतिज -और ऊर्ध्वाधर |रेखाओं और वर्टिकल से बनी होती है +
  • कम से कम 5 अक्षर चौड़े (केक बॉर्डर सहित |)
  • कम से कम 5 अक्षर ऊंचे (केक बॉर्डर सहित -)
  • केक सीमा और प्रत्येक मोमबत्ती-बेस (लौ नहीं) के बीच प्रत्येक तरफ एक व्हाट्सएप चरित्र होना चाहिए , सिवाय इसके कि उस स्थान पर एक लौ हो। एक लौ या मोमबत्ती-बेस केक सीमाओं को ओवरलैप करने में सक्षम नहीं होना चाहिए।
  • केक की अधिकतम चौड़ाई 9 वर्ण है, इसलिए प्रति पंक्ति अधिकतम 5 मोमबत्तियां हैं।
  • चूंकि हम नहीं चाहते कि हमारा केक 2-आयामी हो, इसलिए इसे कुछ मात्रा देने के लिए, अतिरिक्त 2 पंक्तियों का होना आवश्यक है। तल पर एक और बॉर्डर जोड़ें और उनके ऊपर वाले छोरों को कनेक्ट करें, फिर से ऊपर ( -, |और +) से ASCII वर्णों का उपयोग करते हुए ।

मोमबत्ती की आवश्यकताएं हैं:

  • बेस के ऊपर स्टैक्ड होने के साथ बेस |और फ्लेम *से मिलकर बनता है।
  • तिरछे को छोड़कर मोमबत्तियाँ सीधे प्रत्येक अभिभावक के पास नहीं हो सकती हैं।
  • मोमबत्तियों को बाएं से दाएं, फिर ऊपर से नीचे, 5 से अधिकतम एक पंक्ति में रखा गया है।
    (ध्यान दें: यदि पिछली पंक्ति में 5 मोमबत्तियाँ थीं, तो अगली पंक्ति में संभवतः 5 असवेल नहीं हो सकते हैं, तब से वे आसन्न होंगे।)

अतिरिक्त नोट्स:

  • केक की चौड़ाई पहली पंक्ति में मोमबत्तियों की संख्या पर निर्भर करती है , लेकिन इसमें न्यूनतम 5 वर्ण और अधिकतम 9 वर्ण होने चाहिए।
  • मोमबत्तियाँ शीर्ष-सबसे पंक्ति में शुरू होकर भरी जाती हैं, बाएँ से दाएँ जाती हैं। एक बार एक पंक्ति पूरी होने पर अगली पंक्ति पहले वाले के नीचे शुरू होनी चाहिए।

इनपुट:

आप (उचित) प्रारूप में एक नंबर स्वीकार कर सकते हैं।

इस चुनौती के लिए आप मान सकते हैं संख्या 0 और 2 के बीच है कि 31 (0 को छोड़कर), भले ही मैं कोई है जो इस वर्ष है स्वीकार करते हैं नहीं है।

आउटपुट:

आप या तो एक स्ट्रिंग लौटा सकते हैं या सीधे परिणामी केक को आउटपुट कंसोल में लिख सकते हैं।

नियम:

  • मानक खामियों को मना किया जाता है।
  • यह , बाइट्स में किसी भी भाषा में सबसे छोटा कोड है, जीतता है।

उदाहरण:

इनपुट: 8

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

इनपुट: 2

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

इनपुट: 12

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

सौभाग्य!


क्या एक इनपुट के लिए कई वैध समाधान हो सकते हैं?
आधिकारिक

1
@officialaimm चूंकि मोमबत्ती-ऑर्डरिंग और केक-साइज़िंग के लिए विनिर्देश हैं, इसलिए यह संभव नहीं होना चाहिए।
इयान एच।

2
बेकार तथ्य: यदि आप अपना जन्मदिन हर साल के बजाय हर दूसरे दिन मनाते हैं, तो 2 ^ 31 ~ = 68 वर्षीय। लेकिन यह हर दिन बहुत सारे केक बनाता है और कुछ समय बाद थकाऊ हो सकता है।
अरनौलड

1
@ अरनल्ड लेकिन फिर 99% समय आपका जन्मदिन नहीं है :( ... इसके अलावा अगर आप सामान्य तथ्य का जश्न मना रहे हैं कि आप पैदा हुए थे।
इयान एच।

3
@IanH। मान लीजिए कि आप अपनी स्थापना टाइमस्टैम्प मना रहे हैं, तब। :-)
अरनौलड

जवाबों:


10

चारकोल , 76 71 70 66 46 बाइट्स

NθF=+B⁺³⌊⟦χ⁺θθ⟧÷⁺℅ι⁺θθ⁹↘↘Fθ«↑|*¶¶¿‹⁶﹪⁺ιι⁹«M⁹←↓

इसे ऑनलाइन आज़माएं! लिंक कोड के वर्बोज़ संस्करण के लिए है। संपादित करें: @ASCII_Only के लिए 1 बाइट धन्यवाद सहेजा गया। मोमबत्तियों को खींचने का एक साफ तरीका खोजने के द्वारा एक बड़े पैमाने पर 20 बाइट्स बचाए। स्पष्टीकरण:

NθF=+B⁺³⌊⟦χ⁺θθ⟧÷⁺℅ι⁺θθ⁹

अतिरिक्त मात्रा सहित पूरे केक के आकार की गणना करें और केक के ऊपर सिर्फ इतना है कि उन्हें खींचा जा सके। (( == ASCII 61) = ( += ASCII 43) + 9 * 2 अतिरिक्त मात्रा के लिए।)

↘↘Fθ«

कर्सर को 5 मोमबत्तियों की पहली पंक्ति में ले जाएं। प्रत्येक मोमबत्ती के माध्यम से लूप।

↑|*¶¶

एक मोमबत्ती प्रिंट करें और अगले मोमबत्ती के लिए सही दो वर्णों को स्थानांतरित करें।

¿‹⁶﹪⁺ιι⁹«

हालाँकि (शून्य-अनुक्रमित) के बाद 4 थी, 8 वीं, 13 वीं, 17 वीं, 22 वीं आदि मोमबत्तियाँ (जो एक पंक्ति के अंत में हैं),

M⁹←↓

अगली पंक्ति में कर्सर को पहले मोमबत्ती पर ले जाएं। यह दोनों विषम और यहां तक ​​कि पंक्तियों पर काम करता है!


1
आपका समाधान इनपुट संख्या के लिए एक (अवांछित) अतिरिक्त पंक्ति डालता है 6. :)
इयान एच।

@IanH। क्षमा करें, मुझे लगा कि किसी कारण से न्यूनतम ऊंचाई थी। फिक्सिंग कि वास्तव में मुझे 4 बाइट बचा लिया!
नील

अभी भी TIO पर गलत प्रदर्शित करता है: /
Ian H.

1
@IanH। इसे ऑनलाइन आज़माएं! मुझे अपने उदाहरण के समान उत्पादन देता है ...
नील

1
@ याद रखें कि आपको शुरुआत में इसकी आवश्यकता नहीं है : P (एक और गोल्फर (नहीं-तो) किनारे के मामले को खोजने के लिए धन्यवाद)
केवल

3

जेली , 67 बाइट्स

s9s€5Ẏa;⁶;⁶z⁶Z
ç”|ṙ-ż"ç”*$U⁸RḤ’¤¦Ẏ€j@€“| “|”Zj@€⁾--Z”+®¦€0,1©¦;ṫ¥-Y

एक मोनडिक लिंक एक नंबर ले रहा है और वर्णों की सूची या आउटपुट को प्रिंट करने वाले एक पूर्ण कार्यक्रम को वापस कर रहा है।

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

कैसे?

s9s€5Ẏa;⁶;⁶z⁶Z - Link 1, make some candle parts & topping: number, age; character, part
s9             - split (implicit range(age)) into chunks of 9 (or remainder)
  s€5          - split each chunk of 9 into chunks of 5 (a 5 and a 4 or remainder)
     Ẏ         - tighten (to a list of lists of length 5, 4, 5, 4, ..., remainder)
      a        - logical and with the part character (either | or * here)
       ;⁶      - concatenate a space (we all still want topping when no candles)
         ;⁶    - ...and another (we also want some extra topping below the last row)
           z⁶  - transpose with filler space (fill the top with topping!)
             Z - transpose (put it back around the right way again chef)

ç”|ṙ-ż"ç”*$U⁸RḤ’¤¦Ẏ€j@€“| “|”Zj@€⁾--Z”+®¦€0,1©¦;ṫ¥-Y - Main link: number, age
ç”|                                                  - call last link (1) as a dyad with '|'
   ṙ-                                                - rotate left by -1
          $                                          - last two links as a monad:
       ç”*                                           -   call (1) as a dyad with '*'
      "                                              - zip with the dyadic operation:
     ż                                               -   zip (interleave each)
                 ¦                                   - sparse application:
           U                                         - ...of: upend (reverse each)
                ¤                                    - ...to indexes: nilad+links as a nilad:
            ⁸                                        -   chain's left argument, age
             R                                       -   range
              Ḥ                                      -   double (vectorises)
               ’                                     -   increment
                  Ẏ€                                 - tighten €ach (from '|*' or '*|' pairs)
                       “| “|”                        - literal ["| ", "|"]
                    j@€                              - join (swap arguments) for €ach (add a little extra topping to the left, and add piping to the sides)
                             Z                       - transpose
                                 ⁾--                 - literal "--"
                              j@€                    - join (swap arguments) for €ach (add piping to the top and bottom edges)
                                    Z                - transpose (time to invest in a potters wheel!)
                                              ¦      - sparse application:
                                          0,1        - ...to indexes: [0,1] (both ends)
                                             ©       -   (copy that to the register)
                                         €           - ...of: for each:
                                        ¦            -   sparse application:
                                     ”+              -   ...of: '+' character
                                       ®             -   ...to indexes: recall from register (both ends)
                                                  -  - literal -1
                                                 ¥   - last two links as a dyad
                                                ṫ    -   tail from index (gets last two rows)
                                               ;     -   concatenate (repeats them underneath)
                                                   Y - join with newlines
                                                     - as a full program: implicit print

1
चारकोल को पीटने के लिए पवित्र क्या +1
केवल

@ ASCII- केवल क्षमा करें, मुझे 4-बाइट की बचत हुई ...
नील

@ अच्छी तरह से यह भी अच्छा है, चारकोल ASCII कला (जेली से बेहतर) में अच्छा माना जाता है सब के बाद: P
केवल

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