मेल्टिंग आइकल्स कैसे ड्रा करें


23

एक मूर्तिकार को ग्रीनलैंड में नए संग्रहालय के लिए प्रतिष्ठित मूर्तियां बनाने का काम सौंपा जाता है। उसे उसके मालिक द्वारा विनिर्देश दिए गए हैं, जिसमें दो नंबर होते हैं: [s, m] या आकार और पिघल। आकार एक विषम संख्या होना चाहिए। उन्हें असली आइकनों की कुछ तस्वीरें दी गईं:

vvvvv [5, 0]
 vvv 
  v


vvvvvvv [7, 0]
 vvvvv 
  vvv
   v


vvvvvvv [7, 2]
 vvvvv 



vvvvvvv [7, 3]




vvv [3, 1]

उसे आकर्षित करने के लिए एक कार्यक्रम की आवश्यकता है। किसी भी भाषा की अनुमति है। कार्यक्रम को एस और एम, इनपुट स्वीकार्य की किसी भी विधि में लेने की आवश्यकता है। फिर आपको इसका एक एससीआई कला प्रतिनिधित्व प्रिंट आउट करना होगा।

S v, पहली परत पर कितने s हैं। M, नीचे से कितनी परतों को काटता है।

यह , इसलिए हमेशा की तरह यह प्रतियोगिता बाइट आधारित है । व्हाइट स्पेस बाइट काउंटिंग के लिए गिनती करता है। कम से कम बाइट्स जीतता है।

संपादित करें: आपको कभी भी संख्या का एक सेट नहीं मिलेगा जो कुछ भी नहीं खींचता है, उदाहरण के लिए [5, 3]। हालांकि चेकिंग कोड की आवश्यकता नहीं है।


आप कहते हैं कि व्हॉट्सएप गिनती करता है , लेकिन उदाहरणों में कुछ पंक्तियों में अनुगामी स्थान हैं। क्या इसकी अनुमति है?
लुइस मेंडो

जवाबों:


8

05AB1E , 11 बाइट्स

;-Ý·¹+'v×.c

;-          Compute x = Input[1]-Input[0]/2  (e.g. 7,2 -> -1.5)
  Ý         Push [0, ..., x]                 (e.g. 7,2 -> [0, -1])
   ·        Multiply each value by 2         (e.g. 7,2 -> [0, -2])
    ¹+      Add Input[0] to each value       (e.g. 7,2 -> [7, 5])
      'v×   String multiply by 'v'
         .c Center all strings and implicitly display them  

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


1
अच्छी नौकरी, आप @ अदनान के 12 बाइट्स 05AB1E में !!
युमिपिस्ता

2
@yummypasta अच्छी तरह से, मुझे लगता है कि उनका निक संयोग नहीं है :)
Bacco

धन्यवाद! अदनान और एमिग्ना आमतौर पर मेरी जितनी मदद कर सकते हैं, उससे अधिक करते हैं। और अगर आप कर रहे हैं ठीक है, मेरा उपनाम है काफी 05AB1E से संबंधित;)।
ओसेबल

16

वी , 15 बाइट्स

Àévò^lYp2x>òÀñd

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

काफी सरल।

À               " Arg1 times:
 év             "   Insert a 'v'
   ò       ò    " Recursively:
    ^l          "   Break if there is only one character on this line
      Y         "   Yank this line
       p        "   Paste it below us
        2x      "   Delete two characters
          >     "   Indent this line
            À   " Arg2 times:
             ñd "   Delete a line

5
मुझे लगता है कि वी "सबसे अधिक अप्रिय भाषा" के लिए जीतता है।
निसा

1
वह भाषा डीबग करने में मज़ेदार लगती है
ब्लूविरर

4
स्रोत कोड कुछ यादृच्छिक उत्पन्न हैश की तरह दिखता है। मैं इसे एक सुरक्षित पासवर्ड के रूप में उपयोग कर सकता था।
२१

8
मुझे पसंद है कि वी नाम की एक भाषा है जो इस समस्या को हल कर सकती है।
djechlin

9

05AB1E , 12 बाइट्स

कोड:

ÅÉ'v×R²F¨}.c

स्पष्टीकरण:

ÅÉ             # List of uneven numbers: [1, 3, 5, ..., input]
  'v×          # String multiply by 'v', giving ['v', 'vvv', 'vvvvv', ...]
     R         # Reverse the array
      ²F }     # Second input times, do...
        ¨      #   Remove the first element of the array
          .c   # Centralize the array

CP-1252 एन्कोडिंग का उपयोग करता है । इसे ऑनलाइन आज़माएं!


;-Ý·¹+'v×.cएक बाइट बचा
लेगा

@ यह केवल एक पूरी तरह से अलग जवाब नहीं है?
djechlin

अच्छी बात है, मैं वास्तव में नहीं जानता क्योंकि दोनों उत्तरों के पीछे कोई बड़ा एल्गोरिथ्म नहीं है। जरूरत पड़ने पर मैं इसे दूसरे उत्तर के रूप में पोस्ट करूंगा।
9

1
@ अच्छा लग रहा है! मुझे लगता है कि आपको इसे एक अलग उत्तर के रूप में रखना चाहिए, क्योंकि यह इस एक से बहुत अलग है।
अदनान

7

MATL , 22 बाइट्स

'v'itQ2/i-wX"R2&PRZ{Zv

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

व्याख्या

'v'   % Push character 'v'
it    % Input first number. Duplicate
Q2/   % Add 1 and divide by 2
i-    % Input second number. Subtract
w     % Swap
X"    % Char matrix of 'v' repeated those many times along each dim
R     % Upper triangular part
2&P   % Flip horizontally
R     % Upper triangular part
Z{    % Split char matrix along first dimension into a cell array of strings 
Zv    % Remove trailing spaces from each string. Implicitly display

6

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

Rm-2”vẋµLḶ⁶ẋżðḣL_¥Y

TryItOnline!

कैसे?

Rm-2”vẋµLḶ⁶ẋżðḣL_¥Y - Main link: s, m
       µ            - monadic chain separation
R                   - range(s)  [1,2,3,...s]
 m-2                - mod -2    [s,s-2,s-4,...,1]
    ”v              - 'v'
      ẋ             - repeat    ['v'*s,...,'vvv','v']  (call this y)
             ð      - dyadic chain separation
        L           - length, effectively (s+1)/2
         Ḷ          - lowered range [0,1,2,...length-1]
          ⁶         - ' '
           ẋ        - repeat ['', ' ', ... ' '*(length-1)]
            ż       - zip with y
                 ¥  - last two links as a dyad
               L    -     length
                _   -     subtract m
              ḣ     - head
                  Y - join with line feeds
                    - implicit print

मुझे वह लंबाई-मध्य-चेन श्रृंखला बीच में ;-)
ETHproductions

हाँ, J’(लंबाई घटने की सीमा) का भी एक ही प्रभाव होगा, लेकिन इसका कोई छोटा संस्करण नहीं है J, और यह LḶप्यारा है :)
जोनाथन एलन

5

बैच, 142 बाइट्स

@set/ah=%1-%2-%2
@set s=v
@for /l %%i in (3,2,%1)do @call set s=%%s%%vv
@for /l %%i in (1,2,%h%)do @call echo %%s%%&call set s= %%s:~0,-2%%

5

रूबी, 46 44 बाइट्स

->s,m{0.upto(s/2-m){|i|puts' '*i+?v*s;s-=2}}

2 बाइट्स GB के लिए धन्यवाद को बचाया


putsव्हाट्सएप की जरूरत नहीं है
जीबी

1
और आप s decrementing द्वारा एक और चरित्र को बचा सकते हैं: ?v*(s-2*i)उपयोग के बजाय?v*s;s-=2
GB

4

पायथन, 76 73 बाइट्स

def f(s,m):print"\n".join([' '*(s/2-i/2)+'V'*i for i in range(s,m*2,-2)])

संपादित करें: @TuukkaX और @ Challenger5 के लिए 3 बाइट्स सहेजे गए (धन्यवाद!)


2
के बाद print, वहाँ एक बेकार
व्हाट्सएप है

1
लैंबडा का उपयोग क्यों नहीं करते? lambda s,m:"\n".join([' '*(s/2-i/2)+'V'*i for i in range(s,m*2,-2)])
0WJYxW9FMN

1
आप def f(s,m):दो बाइट को सहेजने के बाद सीधे फ़ंक्शन कोड डाल सकते हैं ।
फल

@ J843136028 यह बाइट्स की समान संख्या है: def f()7 lambda है। 7. चैलेंजर 5 की नोक के साथ, डीफ वास्तव में कम है। कम से कम अगर ऐसा है तो आपका मतलब है कि मुझे लगता है :)
nephi12

@nephi लेकिन आप इसे भी हटा देते हैं print, इसलिए यह 4 अक्षर छोटा है ( lambda s,m:"\n".join(...)), क्योंकि lambdaमूल रूप से इसका निहितार्थ है।
अरेटियर

3

जावास्क्रिप्ट (ईएस 6), 57 बाइट्स

f=(s,m,p=``)=>s<m+m?``:p+`v`.repeat(s)+`
`+f(s-2,m,p+` `)

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

f=(s,m,p=`
`)=>s<m+m?``:p+`v`.repeat(s)+f(s-2,m,p+` `)

3

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

lambda s,m:'\n'.join((s-x)/2*' '+x*'v'for x in range(s,m*2,-2))

3

टर्टल , 53 बाइट्स

@v?,:l[v,l][ [ l]rr[ d,ur]ld' l]?<:d[ [ u]d[ ' d]luu]

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

स्पष्टीकरण:

@v,           set char var to v, write it to cell

   ?:l        take positive int input, move that many character right, move 1 left

      [v,l]   move left back to the v, writing v on all the cells it goes on

           [                   ]                      until the current cell is a space

             [ l]    move left until finding a space
                 rr  move two right

                   [     ]  until cell is a space
                     d,ur   move down, write v, move up and right


                          ld' l    move left, down, write space

                                [end of big loop]


                                  [that part made the "icicle", the next melts some]




                                ?<:    
           Take integer input again,
           rotate counterclockwise, move that number right (now up the icicle)

                                    d      move down
                                     [               ] until cell is space
                                       [ u]d   up until space is found, down 1
                                            [ ' d]  until space is found, write space to cell and move down
                                                  luu    move left, up, up
                                                   [end loop]

2

जावा, 138 137 बाइट्स

void m(int l,int r){int f=l;do{String v="";for(int i=0;i++<l;v+="v");if(l/2<r)break;System.out.printf("%"+f--+"s%n",v);l-=2;}while(l>0);}

Ungolfed:

void m(int l, int r) {
    int f = l;
    do {
        String v = "";
        for (int i = 0; i++ < l; v += "v");
        if (l / 2 < r) break;
        System.out.printf("%" + f-- + "s%n", v);
        l -= 2;
    } while (l > 0);
}

अद्यतन: एक बाइट और लूप बॉडी @ClaytonRamsey के लिए धन्यवाद गया।


आप एक बाइट में कटौती कर सकते हैं यदि आप फॉर-लूप को फिर से लिखते हैं (int i = 0; i ++ <l; v + = "v");
क्लेटन रेम्सी

1

सी, 83 बाइट्स

i,j;f(s,m){for(i=-1;i++<s/2-m;)for(j=-1;++j<=s;)putchar(j<s?j>=i&&s-j>i?86:32:10);}

अधूरा और उपयोग:

i,j;
f(s,m){
  for(i=-1;i++<s/2-m;)
    for(j=-1;++j<=s;)
      putchar(j<s ?
                j>=i&&s-j>i ? 86 : 32
                : 10);
}


main() {

  f(5,0);
  f(7,0);
  f(7,2);
  f(7,3);
  f(3,1);

}

1

पायथ, 21 बाइट्स

j<E.e+*kd*hyb\v_Uh/Q2

एक ऐसा प्रोग्राम , Sजिसके द्वारा इनपुट किया जाता है M, उसके बाद newline- पृथक, और परिणाम प्रिंट करता है।

परीक्षण सूट

यह काम किस प्रकार करता है

j<E.e+*kd*hyb\v_Uh/Q2  Program. Inputs: Q, E
                  /Q2  Yield Q // 2
                 h      + 1
                U      Yield [0, 1, 2, ..., Q //2 +1]
               _       Reverse
   .e                  Map over with elements as b and zero-indexed indices as k:
           yb           2 * b
          h              + 1
         *   \v          "v" characters
     +                  prepended with
       k                k
      * d                spaces
 <E                    All but the last E elements
j                      Join on newlines
                       Implicitly print
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.