গলিত আইকিলগুলি কীভাবে আঁকবেন


23

গ্রীনল্যান্ডের নতুন জাদুঘরের জন্য আইকিকল ভাস্কর্য তৈরি করার জন্য একজন ভাস্করকেই দায়িত্ব দেওয়া হয়েছে। তাকে তার বস দ্বারা স্পেসিফিকেশন দেওয়া হয়েছে, যা দুটি সংখ্যা নিয়ে গঠিত: [গুলি, মি] বা আকার এবং গলে। আকার অবশ্যই একটি বিজোড় সংখ্যা হতে হবে । তাকে আসল আইকনগুলির কয়েকটি ছবি দেওয়া হয়েছিল:

vvvvv [5, 0]
 vvv 
  v


vvvvvvv [7, 0]
 vvvvv 
  vvv
   v


vvvvvvv [7, 2]
 vvvvv 



vvvvvvv [7, 3]




vvv [3, 1]

আঁকতে সহায়তা করার জন্য তার একটি প্রোগ্রাম দরকার। যে কোনও ভাষা অনুমোদিত। প্রোগ্রামটি এস এবং এম তে গ্রহণ করা দরকার, যেকোন পদ্ধতি গ্রহণযোগ্য। তারপরে আপনাকে অবশ্যই এটির একটি আসকি শিল্প উপস্থাপনা মুদ্রণ করতে হবে।

এস হ'ল vপ্রথম স্তরে কতগুলি গুলি রয়েছে। এমটি হ'ল নীচে থেকে কত স্তর কেটে যায়।

এটি , তাই যথারীতি এই প্রতিযোগিতাটি বাইট ভিত্তিক । বাইট গণনা করার জন্য সাদা স্থান গণনা করে। সর্বনিম্ন বাইট জয়।

সম্পাদনা: আপনি কখনও সংখ্যার সেট পাবেন না যা কিছুই আঁকবে না, উদাহরণস্বরূপ [5, 3]। পরীক্ষা করা হচ্ছে কোড না তবে প্রয়োজন।


আপনি বলছেন হোয়াইটস্পেস গণনা করে তবে উদাহরণগুলিতে কিছু লাইনে স্থানের স্থান রয়েছে। এটা কি অনুমোদিত?
লুইস মেন্ডো

উত্তর:


8

05 এ বি 1 , 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
গুড জব, আপনি 05AB1E এ আদনানের 12 বাইট @ শিম!
ইয়ুম্মিপাস্ত

2
@ ইউমিপাস্টা ভাল, আমি মনে করি তার নিক কোন কাকতালীয় নয় :)
ব্যাকো

ধন্যবাদ! আদনান এবং এমিগনা আমার তখনকার চেয়ে বেশি সাহায্য করে। এবং আপনি ঠিক বলেছেন, আমার ডাক নামটি 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

05 এ বি 1 ই , 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

সিপি -1222 এনকোডিং ব্যবহার করে । এটি অনলাইন চেষ্টা করুন!


;-Ý·¹+'v×.cএকটি বাইট সংরক্ষণ করতে পারে
17

@ সম্ভাব্য এটি কি সম্পূর্ণ ভিন্ন উত্তর নয়?
djechlin

ভাল কথা, আমি উভয় উত্তর পিছনে কোন বড় অ্যালগরিদম আছে যেহেতু আমি সত্যিই জানি না। প্রয়োজনে এটি অন্য উত্তর হিসাবে পোস্ট করব।
9:30 অপারেশনযোগ্য

1
পছন্দ করুন! আমি মনে করি আপনার এটি অন্যরকম উত্তর হিসাবে দেওয়া উচিত, যেহেতু এটি এর থেকে খুব আলাদা।
আদনান

7

এমএটিএল , 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

আমি মাঝের মধ্যে দৈর্ঘ্য-দৈর্ঘ্য-আনলেন্থ চেইন পছন্দ করি ;-)
ETH প্রোডাকশন

হ্যাঁ, 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 বাইট সংরক্ষণ করে জিবি ধন্যবাদ


putsশ্বেত স্পেসের প্রয়োজন নেই
জিবি

1
এবং আপনি গুলি হ্রাস করে আরও একটি চরিত্র সংরক্ষণ করতে পারেন: পরিবর্তে ?v*(s-2*i)ব্যবহার করুন?v*s;s-=2
জিবি

4

পাইথন, 76 73 বাইট

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

সম্পাদনা: @ টুক্কাএক্স এবং @ চ্যালেঞ্জার 5 এর জন্য 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):দুটি বাইট সংরক্ষণ করে সরাসরি ফাংশন কোডটি রাখতে পারেন ।
Esolanging ফল

@ J843136028 এটি বাইটের সমান সংখ্যা: def f()7 lambda হ'ল 7 ip কমপক্ষে যদি আপনি যা ভাবেন ঠিক
তেমনটাই

@ নেফি তবে আপনি এগুলিও সরিয়ে ফেলুন print, সুতরাং এটি 4 টি অক্ষর সংক্ষিপ্ত ( lambda s,m:"\n".join(...)) হবে, কারণ lambdaমূলত এর অন্তর্নিহিত প্রত্যাবর্তন রয়েছে।
আরটিয়ার

3

জাভাস্ক্রিপ্ট (ES6), 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);
}

আপডেট: একটি বাইট এবং লুপ বডি @ ক্লেটনরামসে ধন্যবাদ জানায়।


আপনি যদি বর্ধমান লুপটি পুনরায় লিখেন তবে আপনি একটি বাইট কেটে দিতে পারেন (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, নিউলাইন-পৃথক, এবং ফলাফল মুদ্রণ করে।

পরীক্ষা স্যুট

কিভাবে এটা কাজ করে

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
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.