স্টিকারম্যান যুদ্ধগুলি আঁকুন


19


আমার অগ্রণী অঙ্কন দক্ষতা নিয়ে আমার এই চ্যালেঞ্জটি খসড়া করার চিত্র।

পটভূমি

স্টিকম্যান যুদ্ধগুলি বহু আগে ঘটেছিল, যখন পৃথিবীর প্রভাবশালী প্রজাতি লাঠি ছাড়া কিছুই ছিল না। Thenতিহাসিকরা আফসোস করেছিলেন যে এর আগে কোনও চিত্রশিল্পী বা ক্যামেরা ছিল না, আমরা আজকের ইতিহাসের বইগুলিতে সেই যুদ্ধের কয়েকটি ছবি ব্যবহার করতে পারি। আপনার কোডিং শক্তিগুলি সেখানে কার্যকর হয়। স্টিকম্যান খুব সহজেই টানা হয় এবং stickতিহাসিকরা যুদ্ধে কতটা স্টাইকম্যান লড়াই করেছিলেন সে সম্পর্কে কিছু তথ্য সন্ধান করতে সক্ষম হন ¹ যুদ্ধ শুরু হওয়ার ঠিক মুহুর্তের একটি চিত্র আবার তৈরি করা আপনার পক্ষে!

যুদ্ধের সাথে জড়িত সাহসী স্টিকম্যান এখানে রয়েছে:

  ও /
| / | \ /
| |
 / \ তরোয়ালদল

 ল্যাম্প
/ | \ |
 | |
/ \ | বল্লমধারী

   । 
 । ' *।
 'ও *  
'। | /।
। | *
'./ \ *। পুরোনো যাদুকর

 হে
/ | \
 |
/ \ গ্রামবাসী

 হে
/ | \
/ \ শিশু

ইনপুট

স্ট্যাডিনের মাধ্যমে গ্রহণ করুন বা যুদ্ধক্ষেত্রের প্রতিটি পাশে উপস্থিত প্রতিটি স্টিকারম্যানের সমতুল্য একটি উপস্থাপনা পান। উদাহরণস্বরূপ, যদি দুটি তরোয়ালদেন ডানদিকে এবং বাম দিকে দুটি বর্শাবাদী লড়াই করে, তবে আপনার ইনপুট হতে পারে {Sword: 2}, {Spear: 2}, [2,0,0,0,0], [0,2,0,0,0]বা একটি"WW", "SS"

আউটপুট

নীচের নিয়ম অনুসারে যুদ্ধের মাঠে প্রতিটি সাহসী স্টিকম্যানের উপস্থাপনা। এটি স্টডআউটে প্রদর্শিত হতে পারে বা কোনও ফাইলে সেভ করা যেতে পারে, যাই হোক না কেন আপনার নৌকাকে দুলিয়ে তোলে।

বিধি

  1. বাম পাশে আপনার প্রোগ্রামটি প্রাপ্ত প্রথম অ্যারে / স্ট্রিং / অবজেক্টের প্রতিটি স্টাইকম্যান থাকবে।
  2. এই স্টিকম্যান অবশ্যই এই প্রশ্নের আগে দেখানো মত দেখতে হবে।
  3. বাম দিকের সেনাবাহিনীর ক্রম অবশ্যই হবে Infants Villagers Mages Swordsmen Spearmen
  4. ডান দিকের সেনাবাহিনী ঠিক একই আচরণ করবে, তবে অক্ষর এবং অর্ডার মিরর দিয়ে।
  5. প্রতিটি স্টিকম্যান 1 স্পেস দ্বারা পৃথক করা হবে।
  6. প্রতিটি শ্রেণি 3 টি স্পেস দ্বারা পৃথক করা হবে।
  7. সেনাবাহিনী 8 স্পেস দ্বারা পৃথক করা হবে।
  8. স্টিকম্যান যেহেতু উড়ে যায় না তাই হাইফেন-বিয়োগ ব্যবহার করে আপনাকে অবশ্যই স্থলটি আঁকতে হবে -
  9. স্থলটি একই কলামে সমাপ্ত হতে হবে ডান সেনাবাহিনীর শেষ স্টিকম্যান শেষ হবে।

উদাহরণ

আসুন ধরে নিই আমার প্রোগ্রামটি দৈর্ঘ্য 5 সহ দুটি অ্যারে প্রত্যাশা করে এবং অ্যারের প্রতিটি মান ক্রমানুসারে প্রতিনিধিত্ব করে Infants Villagers Mages Swordsmen Spearmen

ইনপুট: [1,1,2,3,1] [0,0,1,1,1]

               । । ।
             । ' *। । ' *। । * '।
       ও 'ও' 'ও * ও / ও / ও / ওএএও \ ও * ও' 
 ও / | \ '\ | /। '। | /। | / | \ / | / | \ / | / | \ / / | \ | | | / | \ \ / | \ | | । \ | / '
/ | \ | । | *। | * | | | | | | | | | | | | * | ।
/ \ / \ './ \ *। './ \ *। / \ / \ / \ / \ | | / \ / \। * / \ '।
-------------------------------------------------- -------------------------------------

চূড়ান্ত বিবেচনা

দয়া করে নোট করুন যে স্ট্যান্ডার্ড লুফোলগুলি প্রযোজ্য এবং কেবলমাত্র ম্যাজ সম্পূর্ণ অসম্পৃক্ত।

সর্বাধিক উত্সাহিত উত্তরের ফলাফল হবে এই চ্যালেঞ্জের "কভার চিত্র"। মাসের শেষে সংক্ষিপ্ত উত্তরটি (08/31/2014) বিজয়ী হিসাবে নির্বাচিত হবে।

এটি , তাই সংক্ষিপ্ততম কোড, বাইটে, জিতে।


Itationউক্তির প্রয়োজন


7
"ম্যাজ পুরোপুরি অসম্পূর্ণ মাত্র কারণ" ... টুইচ ... আপনার শুধু ছিল , তাই না? : পি
ডুরকনব

4
@ ডুরকনব ¯ \ _ (ツ) _ / ¯
উইলিয়াম বারবোসা

ঠিক আছে 2 টি অ্যারে আর্গুমেন্ট সহ কোনও ফাংশন বা আপনার কোনও স্ট্রিং থেকে ইনপুট পার্সিংয়ের প্রয়োজন?
edc65

ওভারস্কোর সম্পর্কে টিআইএল। ইউনিকোড-চ্যালেঞ্জযুক্ত ভাষাগুলি পরিবর্তে ড্যাশগুলি ব্যবহার করতে পারে, দয়া করে?
জন ডিভোরাক

1
গ্রামবাসী এবং দাতাদের মধ্যে একটি কলাম নেই। এছাড়াও একটি উপস্থাপনা যেমন IVMMWWWS SWM"আপনাকে সহায়তা করে এমন কিছু" এর সীমাতে থাকবে?
মার্টিন ইন্ডার

উত্তর:


7

জাভাস্ক্রিপ্ট (E6) 336 344 356 369 424 478 522 570

সম্পাদনা 6 সর্বশেষ সম্পাদনাটি ছিল বগি। বাগ ফিক্স এবং সংক্ষিপ্ত। আমি আশা করি এটাই।

5 সম্পাদনা করুন অবশেষে 23 দ্বারা গুণিত থেকে মুক্তি পাওয়ার উপায় খুঁজে পেয়েছে - আমাকে শুরু থেকে বিরক্ত করেছে। প্লাস ইনপুটটিতে অন্য একটি পরিবর্তন (@ উইলিয়াম যখন খুব বেশি হয় তখন চিৎকার করে)। এখন ফাংশনটি একটি অ্যারের প্যারামিটার প্রত্যাশা করে, এতে 2 টি সাববারে রয়েছে। এই পরিবর্তন ব্যতীত এটি 349 - এখনও একটি উন্নতি

4 সম্পাদনা করুন আরও কিছু বাইট এবং ইনপুট ফর্ম্যাটে কিছুটা শেভ করা হয়েছে। নতুন ইনপুট বিন্যাসের সাথে একটি অনুপস্থিত শ্রেণি একটি খালি অ্যারে উপাদান হিসাবে উপস্থাপিত হয়। D([1,,2,3,1],[,3,1,1,2])পরিবর্তে তাই D([1,0,2,3,1],[0,3,1,1,2])। আমি মনে করি এটি এখনও নিয়ম মান্য করে।

আরও 3 গল্ফ সম্পাদনা করুন । অ্যালগরিদমে কোনও পরিবর্তন হয়নি, তবে লুপগুলি এড়াতে প্রচুর অ্যারে.ম্যাপ এবং স্থানীয় ফাংশন ব্যবহার করছেন।

2 টি স্ট্রিং সংক্ষেপণ সম্পাদন করুন , সঠিক উপায়ে ...

যুক্ত স্ট্রিং সংক্ষেপণ সম্পাদনা করুন , প্রচুর পরিশ্রম এবং খুব বেশি লাভ হয়নি। এখন মিরর স্টিকম্যান কোনও টেম্পলেট থেকে উত্পন্ন হয়, সঞ্চয় করা হয় না।

কয়েকটি চেষ্টা করেছেন, প্রথমে দৌড়াচ্ছেন। গল্ফ করা। এনবি কলমোগোরো-ব্যবসায় এখনও মোকাবেলা করতে হবে।

টেস্ট ফায়ারফক্স কনসোল। আউটপুট স্টেটমেন্ট পেতে অ্যাড 'সতর্কতা (...) ' দিয়ে 'রিটার্ন' পরিবর্তন করুন (তবে এটি মোটেই কার্যকর নয়)

console.log(D([[1,,2,3,1],[,3,1,1,2]]))

আউটপুট

         .       .                                                                 .                 
       .' *.   .' *.                                                             .* '.               
       ' O *   ' O *      O  /   O  /   O  /    O A        A O  A O    \  O      * O '     O   O   O 
 O    ' \|/ . ' \|/ .   |/|\/  |/|\/  |/|\/    /|\|        |/|\ |/|\    \/|\|   . \|/ '   /|\ /|\ /|\
/|\   .  |  * .  |  *   | |    | |    | |       | |        | |  | |       | |   *  |  .    |   |   | 
/ \   './ \*. './ \*.    / \    / \    / \     / \|        |/ \ |/ \     / \    .*/ \.'   / \ / \ / \
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯

গল্ফ কোড

D=a=>
  (J=v=>v.join(''))((l=[r=n=' ',3,6,13,19,23]).map(_=>f=(F=f=>J(a[f].map((c,q)=>
  ("9.299.' *.87O2' O *3O21 O A O 1|0' 0|1 .|1|01 1|0|1|0 | .2|2*| |4| |1 01 0'.1 0*. 1 021 0|"[R='replace'](/[2-9]/g,x=>n.repeat(x))
   .slice(l[q]-r,l[q+1]-r)[R](/\d/g,x=>'\\/'[x^f])+n).repeat(c)+n+n
  ))+n)(0)+J([...F(1)].reverse(r-=23))+'\n'))+f[R](/./g,'¯')

কোড (2 সম্পাদনা করুন)

D=(a,b)=>{
  F=(s,f)=>(s=s[R](/\d/g,x=>'/\\'[x^f]),f?s:[...s].reverse().join('')),
  v="9.299.' *.87O2' O *3O21 O A O 1|0' 0|1 .|1|01 1|0|1|0 | .2|2*| |4| |1 01 0'.1 0*. 1 021 0|"
    [R='replace'](/\d/g,x=>x>1?' '.repeat(x):x),
  l=[0,3,6,13,19,23];
  for(o='',r=0;v[r];r+=23,f=F(z,1)+'  '+F(w,0),o+=f+'\n',f=f[R](/./g,'¯'))
    for(z=w=p='';p<10;++p)
      if(c=(p<5?a:b)[q=p%5])x=(v.slice(r+l[q],r+l[q+1])+' ').repeat(c)+'  ',p<5?z+=x:w+=x
  return o+f
}

অবহেলিত কোড (প্রথম সংস্করণ)

D=(a,b)=>{
  v="         .                .                    .' *.            .* '.               O  ' O *   O  / O A * O ' \\  O  A O  O /|\\' \\|/ .|/|\\/ /|\\|. \\|/ ' \\/|\\||/|\\/|\\ | .  |  *| |    | |*  |  .   | || | / \\/ \\'./ \\*. / \\  / \\|.*/ \\'.  / \\ |/ \\"
  l=[0,3,6,13,19,23,30,36,40]
  o=''
  for(r=0;r<6;++r)
  {
    z=w=''
    for(p=0;p<10;p++)
    {
      c=a[p]||b[p-5];
      if (c)
      {
        q = p<7 ? p%5 : p-2
        x = (v.slice(r*40+l[q],r*40+l[q+1])+' ').repeat(c)
        if (p<5) 
          z+=x+'  ';
        else 
          w=x+'  '+w
      }
    }
    f = z + '     ' + w
    o += f + '\n'
    f = '¯'.repeat(f.length-3)
  }
  return o+f
}

4

পাইথন 362 353

সম্পাদনা করুন: লুপের জন্য একটি অপসারণ এবং এক্সিকিউট স্টেটমেন্টটি ব্যবহার করে 9 টি বাইট সংরক্ষণ করা হয়েছে

z,x,t,j=" ",input(),str.replace,0
w=0,3,6,13,19,23
a=9*z+"."+20*z+".' *."+15*z+"o  ' o *   o  a o A o a|b' b|a .|a|ba a|b|a|b | .  |  *| |    | |a ba b'.a b*. a b  a b|"
exec"b=''\nfor c in 0,1:b+=z*8*c+t(t('   '.join([z.join([a[w[k]+j:w[k+1]+j]]*v)for k,v in enumerate(x[c])if v])[::1-2*c],'a','\/'[c<1]),'b','\/'[c])\nprint b;j+=23;"*6
print'-'*len(b)

ইনপুট:

[0,0,2,1,1],[1,0,2,1,2]

আউটপুট:

   .       .                                                   .       .         
 .' *.   .' *.                                               .* '.   .* '.       
 ' o *   ' o *      o  /    o A        A o  A o    \  o      * o '   * o '       
' \|/ . ' \|/ .   |/|\/    /|\|        |/|\ |/|\    \/|\|   . \|/ ' . \|/ '    o 
.  |  * .  |  *   | |       | |        | |  | |       | |   *  |  . *  |  .   /|\
'./ \*. './ \*.    / \     / \|        |/ \ |/ \     / \    .*/ \.' .*/ \.'   / \
---------------------------------------------------------------------------------

আপনি ছোট হাতের ওএস ব্যবহার লক্ষ্য করেছেন।
ফোর্ড

3

সি, 418 414

উদাহরণ ইনপুট:

stickwar.exe IVMMWWWS SWM

উদাহরণ আউটপুট:

               । । ।   
             । ' *। । ' *। । * '।
       ও 'ও' 'ও * ও / ও / ও / ওএএও \ ও * ও' 
 ও / | \ '\ | /। '। | /। | / | \ / | / | \ / | / | \ / / | \ | | | / | \ \ / | \ | | । \ | / '
/ | \ | । | *। | * | | | | | | | | | | | | * | ।
/ \ / \ './ \ *। './ \ *। / \ / \ / \ / \ | | / \ / \। * / \ '।
-------------------------------------------------- --------------------------------------

গল্ফযুক্ত কোড (লাইন ব্রেকগুলি কেবল পঠনযোগ্যতার জন্য; এটি কোডের একটি দীর্ঘ লাইন হওয়া উচিত):

char d[8][999],*s,*a;p,f,t,x,y,c,l;main(o,g)char**g;{for(memset(d,32,6993);o-=
2,a=*++g;p+=3)for(;f=*a;f^*++a?p+=2:0){t=f%27%5;l=t*3%12%5+4;p+=l&o;y=6;for(s=
"(A(21;\0(A2:B(212;F\08A*B*0210KP\0-70A47/RT-A20G=CD?5D7_\0(A:(21;"+"V3'? "[t]
-32;c=*s++;)c&8?x=0*--y:0,x+=c/16-2,c^=o-1&&!(c&6),d[y][p+o*x]="/\\|O*'A."[c&7
];t^3|~o||(s=d[5]+p,*s--=46,*s=39);p+=l&-o;}memset(d[6],45,p-=4);for(y=0;*(s=d
[y++]);s[p]=0,puts(s));}

যুদ্ধক্ষেত্রের সর্বাধিক প্রস্থ 999 (আমি এটি 99 এর মধ্যে সীমাবদ্ধ রেখে 2 টি অক্ষর সংরক্ষণ করতে পারি)। আমি প্রতি আউটপুট চরিত্রের 1 বাইটের একটি নিয়ন্ত্রণ কাঠামো ব্যবহার করেছি (স্থান নেই), নীচে থেকে চিত্রগুলি অঙ্কন করছি।

  • Y- স্থানাঙ্কের জন্য 1 বিট (হয় "থাকুন" বা "উপরে যান")
  • এক্স-সমন্বিত স্থানচ্যুতি জন্য 3 বিট (0 ... 4)
  • আউটপুট চরের জন্য 3 বিট (সৌভাগ্যক্রমে, কেবলমাত্র 8 টি আলাদা অক্ষর রয়েছে)

নিয়ন্ত্রণ কাঠামোতে 5 টি অফসেট রয়েছে।

কিছু অন্যান্য অস্পষ্ট বিট:

  • কোডটি f%27%5অক্ষরগুলিকে VWSMIসংখ্যায় অনুবাদ করে0, 1, 2, 3, 4
  • কোড t*3%12%5+4টাইপ স্টিকম্যানের প্রস্থের গণনা করেt
  • কোডটি t^3|~o||(s=d[5]+p,*s--=46,*s=39)বাম / ডান অসমানের জন্য অ্যাকাউন্ট করে
  • আমি আসলে ব্যবহার argc=3দিক পতাকা অঙ্কন জেনারেট করতে 1এবং-1

অবহেলিত কোড:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char k[] = "(A(21;\0(A2:B(212;F\08A*B*0210KP\0-70A47/RT-A20G=CD?5D7_\0(A:(21;";

char d[8][999], // data of the battlefield
*s, // control string
*a; // cmdline argument
p, // position in the battlefield
f, // figure (char)
t, // type of the figure (0...4)
x,y, // coordinates while drawing the stickman
c; // control char, specifying what to draw

main(o, g) char**g; // o means "orientation" (+1, then -1)
{
    freopen("out.txt", "w", stdout);
    memset(d, ' ', 6993);

    for (; o -= 2, a=*++g;)
    {
        for (; f=*a;)
        {
            t = f%27%5;

            if (o<0)
                p += t*3%12%5+4; // go to the next stickman

            y = 6;
            for (s=k+"V3'? "[t]-32; c = *s++;) // loop over the control
            {
                if (c & 8) // bit 3: next line; set x to 0
                    --y, x = 0;
                x += c / 16 - 2; // bits 6...4: x coordinate
                if (o == -1 && !(c & 6)) // mirror \ <-> /
                    c ^= 1;
                d[y][p + o * x] = "/\\|O*'A."[c & 7];
            }
            if (t == 3 && o<0) // fix the asymmetrical mage
            {
                s=d[5]+p;
                *s--='.';
                *s='\'';
            }

            if (o>0)
                p += t*3%12%5+4; // go to the next stickman
            if (f != *++a) // is next stickman of different type?
                p += 2;
        }
        p += 3; // separate the armies
    }

    p -= 4;
    memset(d[6], '-', p); // draw the ground

    for (y = 0; *(s=d[y++]); ) // print the battle field
    {
        s[p] = 0;
        puts(s);
    }
}

আপনি কেন গল্ফযুক্ত সংস্করণে অন্তর্ভুক্ত না করতে সক্ষম? এছাড়াও কেন *aকমাতে আধা কোলন পরিবর্তন করবেন না ? এটি একটি সতর্কতা থেকে মুক্তি পায় এবং একই সংখ্যক বাইট রয়েছে।
এফএসএমভি

1
সি এর "অন্তর্নিহিত ঘোষণা" বিধি রয়েছে ; এটির উপর নির্ভর করা অনিরাপদ তবে এটি অনুশীলনে কাজ করে তাই এটি গল্ফিংয়ের ক্ষেত্রে বেশ মানক। আধা-কোলনের ক্ষেত্রে: আমি অভিব্যক্তিটি f=*aথামার শর্ত হিসাবে ব্যবহার করি ; সংকলক অভিযোগ করতে পারে তবে আমি এটি বোঝাতে চাইছি। আমি এটিকে সরাতে পারছি না কারণ for-লুপ সিনট্যাক্সে দুটি সেমিকোলন থাকা উচিত ।
অ্যানাটলিগ

2

হাস্কেল, 556

ছক পূরণ করা

([1,1,2,3,1],[0,1,1,0,1])

অর্ডার: [শিশু, গ্রামবাসী, দাদাগিরি, তরোয়ালদারি, স্পিয়ারম্যান], [স্পিয়ারম্যান, তরোয়ালদাসী, দাস, গ্রামবাসী, শিশু]

নমুনা আউটপুট

               .        .                                                       .      
             .' *.    .' *.                                                   .* '.    
       O     ' O *    ' O *       O  /   O  /   O  /    O A        \  O       * O '    
 O    /|\   ' \|/ .  ' \|/ .    |/|\/  |/|\/  |/|\/    /|\|         \/|\|    . \|/ '    O
/|\    |    .  |  *  .  |  *    | |    | |    | |       | |           | |    *  |  .   /|\
/ \   / \   './ \*.  './ \*.     / \    / \    / \     / \|          / \     .*/ \.'   / \
------------------------------------------------------------------------------------------

কোড

(?)=replicate
v=reverse
g=map
e=length
s=foldr1
p=zip[3,3,8,6,4]$g lines[" O\n/|\\\n/ \\"," O\n/|\\\n |\n/ \\","   . \n .' *.\n ' O *  \n' \\|/ .\n.  |  *\n'./ \\*.","  O  /\n|/|\\/\n| |\n / \\"," O A\n/|\\|\n | |\n/ \\|"]
r n x a=a++(n-e a)?x
x '\\'='/';x '/'='\\';x c=c
y(w,p)=(w,g(v.dropWhile(==' ').g x.r w ' ')p)
m n(a,p)(b,q)=(a+b+n,[r(a+n)' ' c++d|(c,d)<-zip(h p)(h q)])where h=v.r(max(e p)(e q))[].v
p%c|sum c==0=(0,[])|1<2=s(m 3)[s(m 1)$d?(p!!i)|(i,d)<-zip[0..]c,d>0]
f(w,p)=p++[w?'-']
main=interact((\(a,b)->unlines.f$m 8(p%a)((g y.v$p)%b)).read)

Ungolfed

type Pic = (Int, [String])

pics :: [Pic]
pics = zip[3,3,8,6,4]$map lines[" O\n/|\\\n/ \\"," O\n/|\\\n |\n/ \\","   . \n .' *.\n ' O *  \n' \\|/ .\n.  |  *\n'./ \\*.","  O  /\n|/|\\/\n| |\n / \\"," O A\n/|\\|\n | |\n/ \\|"]

mirrorChar '\\' = '/'
mirrorChar '/' = '\\'
mirrorChar c = c

padL, padR :: Int -> a -> [a] -> [a]
padL n x a = replicate (n - length a) x ++ a
padR n x a = a ++ replicate (n - length a) x

mirrorPic :: Pic -> Pic
mirrorPic (w, pic) = (w, map (reverse . dropWhile (==' ') . map mirrorChar . padR w ' ') pic)

merge n (w1, pic1) (w2, pic2) =
  let h = max (length pic1) (length pic2)
  in (w1 + n + w2, [padR (w1 + n) ' ' line1 ++ line2 | (line1, line2) <- zip (padL h [] pic1) (padL h [] pic2)])

makeArmy :: [Pic] -> [Int] -> Pic
makeArmy pics counts | sum counts == 0 = (0, []) | otherwise = foldr1 (merge 3) [ foldr1 (merge 1) . replicate count $ pics !! i | (i, count) <- zip [0..] counts, count > 0]

addField :: Pic -> [String]
addField (w, pic) = pic ++ [replicate w '-']

main = do
  (counts1, counts2)<- return . read =<< getLine
  putStr . unlines . addField $ merge 8 (makeArmy pics counts1) (makeArmy (map mirrorPic . reverse $ pics) counts2)

1
আমি পরীক্ষা করিনি, তবে আপনার নমুনা আউটপুট অনুসারে আপনি ডান পাশের অক্ষরগুলি মিরর করতে ভুলে গেছেন
উইলিয়াম বারবোসা

@ উইলিয়ামবার্বোসা সম্পূর্ণ ভিন্ন সমাধানের সাথে স্থির।
রায়

1

হাস্কেল ( 736 733 720 বাইট)

import System.Environment
import Data.List
a=1<2
h="   "
n="      "
o="    "
b (x:y)|x<0=[]|a=x:(b y)
c (x:y)|x>=0=c y|a=y
d [] _=[]
d (x:y)z|z/=x=[-5,x]++(d y x)|a=[x]++(d y x)
e x y|x< -5="        "|x<0=h|a=(([[h,h,"   .   ",n,o],[h,h," .' *. ",n,o],[h," o "," ' O * ","  O  /"," O A"],[" o ","/|\\", "' \\|/ .","|/|\\/ ","/|\\|"],["/|\\"," | ",".  |  *","| |   "," | |"],["/ \\","/ \\","'./ \\*."," / \\  ","/ \\|"]]!!(div z 5))!!(mod z 5))++" "where z=5*y+x
(§)=map
g=putStrLn
m=concat
main=do
    z<-getArgs
    let y=read§z::[Int]
    let w=sort(b y)
    let v=reverse(sort(c y))
    let u=(\(t,i)->(\s->e s i)§t)§(zip(take 6(cycle[((d w (w!!0))++[-9]++(d v (v!!0)))]))[0..5])
    mapM(\x->g(m x))u
    g(replicate(length(m(u!!0)))'-')

এর মাধ্যমে কল করুন ./stickmanwars 2 3 1 3 4 -1 3 2 4 1 0 4 2 1 । -1 দুটি অ্যারের জন্য সীমানা চিহ্নিত করে। আমি আশা করি ঠিক আছে।

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

এটি থেকে গল্ফ:

import System.Environment
import Data.List

layers = [
    ["   ", "   ",  "   .   ",  "      ",  "    "],
    ["   ", "   ",  " .' *. ",  "      ",  "    "],
    ["   ", " o ",  " ' O * ",  "  O  /",  " O A"],
    [" o ", "/|\\", "' \\|/ .", "|/|\\/ ", "/|\\|"],
    ["/|\\"," | ",  ".  |  *",  "| |   "," | |"],
    ["/ \\","/ \\", "'./ \\*.", " / \\  ","/ \\|"],
    ["¯¯¯", "¯¯¯",  "¯¯¯¯¯¯¯",  "¯¯¯¯¯¯", "¯¯¯¯"]]

getLeftSide :: [Int] -> [Int]
getLeftSide (x:xs) | x < 0 = []
                   | otherwise = x : (getLeftSide xs)

getRightSide :: [Int] -> [Int]
getRightSide (x:xs) | x >= 0 = getRightSide xs 
                    | otherwise = xs

addSpacing :: [Int] -> Int -> [Int]
addSpacing [] _ = []
addSpacing (x:xs) old | old /= x = [(-50),x] ++ (addSpacing xs x)
                      | otherwise = [x] ++ (addSpacing xs x)

getLayerStr :: Int -> Int -> String
getLayerStr item dimension | item < (-50) = "        "
getLayerStr item dimension | item < 0  = "   "
                           | otherwise = ((layers !! i) !! j) ++ " "
    where
        value = (item + (5 * dimension))
        i = div value 5
        j = mod value 5

main = do
    -- Read Arguments from command line
    a <- getArgs
    -- Convert command line arguments to Int array
    let args = map read a :: [Int]
    -- Get left side of the array and sort it
    let frstArray = sort $ getLeftSide args 
    -- Get right side of the array and sort it mirrored
    let scndArray = reverse $ sort $ getRightSide args
    -- Concat the two sides and put a delimiter in between them
    let finalArray = (addSpacing frstArray (frstArray !! 0)) ++ [-99] ++ (addSpacing scndArray (scndArray !! 0))
    -- Create the matrix by 
    -- 1. Duplicating the final array 6 times (one for each level)
    -- 2. Pair each of those 6 arrays with its level (= index)
    -- 3. Create a matrix like below:
    --
    -- 1  1  2  2  3  4  4  5 -  1  1  2  2  2  4
    -- 6  6  7  7  8  9  9 10 -  6  6  7  7  7  9
    -- 11 11 12 12 13 14 14 15 - 11 11 12 12 12 14
    -- 16 16 17 17 18 19 19 20 - 16 16 17 17 17 19
    -- 21 21 22 22 23 24 24 25 - 21 21 22 22 22 24
    -- 26 26 27 27 28 29 29 20 - 26 26 27 27 27 29
    --
    -- 4. Convert the newly calculated indices to their respective strings
    let matrix = map (\(list,i) -> map (\item -> getLayerStr item i) list) (zip (take 6 $ cycle [finalArray]) [0..5])
    -- Finaly output the matrix by concating the elements ...
    mapM (\x -> putStrLn (concat x)) matrix
    -- ... and print the ground level.
    putStrLn (replicate (length $ concat $ matrix !! 0) '¯')
    -- Exit with a new line
    putStrLn ""

বন্ধনীগুলির চারপাশের স্পেসগুলি প্রয়োজনীয় নয়। এটি আপনাকে অনেক বেশি সাশ্রয় করবে বলে মনে হচ্ছে।
রায়

আহ ঠিক আছে, আমাকে 3 বাইট বাঁচিয়েছে, থ্যাঙ্কস :)
কে ভি

না, আরও অনেক কিছু।
রায়

আপনি ঠিক বলেছেন, আমি এখনই অনেক কিছু পেয়েছি।
কে ভিন

0

হাস্কেল, 450

import Data.List
s=["      -"]
c=["    //-":"   O| -":"    \\\\-":s,"   / /-":"  O|| -":"   \\ \\-":s,"   '.'-":" .'  .-":" ' \\ /-":". O|| -":" * / \\-":" .*  *-":"   .*.-":s,"   || -":"   / /-":"  O|| -":"   \\ \\-":"   /  -":"  /   -":s,"   / /-":"  O|| -":"   \\ \\-":"  A|||-":s]
m '\\'='/'
m '/'='\\'
m x=x
u[]=[]
u x=x++[s,s]
f x=zipWith replicate x c>>=concat.u
k(a,b)=unlines.transpose$f a++s++s++map(map$m)(reverse$f b)
main=interact$k.read

কুল চ্যালেঞ্জ! আমি সম্ভবত এটি আরও কিছুটা গল্ফ করতে সক্ষম হতে পারি। মূলত আমি পরিসংখ্যান কলামটি ওয়াইজ করে রাখছি যাতে আমি এগুলিকে সহজেই একে অপরের সাথে যুক্ত করতে পারি, এবং তারপরে Stringহাস্কেলগুলি ব্যবহার করে পুরো আর এর পুরো অ্যারেটি ফ্লিপ করতে পারি transpose

ইনপুট ফর্ম্যাটটি ([Infants,Villagers,Mages,Swordsmen,Spearmen],[Infants,Villagers,Mages,Swordsmen,Spearmen])

এখানে ওপি থেকে উদাহরণ দেওয়া হল:

>>>echo ([1,1,2,3,1],[0,0,1,1,1]) | cg2
               .       .                                                            .
             .' *.   .' *.                                                        .* '.
       O     ' O *   ' O *      O  /   O  /   O  /    O A        A O    \  O      * O '
 O    /|\   ' \|/ . ' \|/ .   |/|\/  |/|\/  |/|\/    /|\|        |/|\    \/|\|   . \|/ '
/|\    |    .  |  * .  |  *   | |    | |    | |       | |        | |       | |   *  |  .
/ \   / \   './ \*. './ \*.    / \    / \    / \     / \|        |/ \     / \    .*/ \.'
----------------------------------------------------------------------------------------

এবং এখানে দ্বিতীয় যুগের সময় আমার কুখ্যাত আচার শিশু হত্যার প্রিয় চিত্রণ!

>>>echo ([0,0,0,1,0],[5,0,0,0,0]) | cg2


  O  /
|/|\/          O   O   O   O   O
| |           /|\ /|\ /|\ /|\ /|\
 / \          / \ / \ / \ / \ / \
---------------------------------

0

পাইথন ( 612 , 522 , 460 , 440)

  • Rev1: মূল সংকোচনের এবং বেস 64-এনকোডিং
  • Rev2: সরানো সংক্ষেপণ / এনকোডিং; আরও ছোট হয়েছে
  • রেভ 3: ইনলাইন করে আরও বাইট গণনা হ্রাস
  • Rev4: ২ য় সেনাবাহিনীতে অপরিবর্তিত ইনপুট রিভার্সাল সরানো হয়েছে; স্পেক মিলের জন্য সোয়াপডম্যান এবং স্পিয়ারম্যান অদলবদল করে

প্রতিটি "লাইন" ডান-প্যাডিং ছাঁটাই করা হয়, এবং এটি পুনর্গঠনের সময় আবার যুক্ত করা হয়।

আমি আমার অভ্যন্তরীণ এনকোডিংগুলিতে স্টিকম্যানগুলিকে প্রাক-বিপরীত করেছি কারণ কোডে রেন্ডার করার সময় এটি আমাকে স্বতন্ত্রভাবে বিপরীত করতে পেরেছিল।

নমুনা রান:

$ echo "[1,1,2,3,1],[0,0,1,1,1]"|python /tmp/g2.py 
               .       .                                                            .   
             .' *.   .' *.                                                        .* '. 
       O     ' O *   ' O *      O  /   O  /   O  /    O A        A O    \  O      * O ' 
 O    /|\   ' \|/ . ' \|/ .   |/|\/  |/|\/  |/|\/    /|\|        |/|\    \/|\|   . \|/ '
/|\    |    .  |  * .  |  *   | |    | |    | |       | |        | |       | |   *  |  .
/ \   / \   './ \*. './ \*.    / \    / \    / \     / \|        |/ \     / \    .*/ \.'
----------------------------------------------------------------------------------------

কোড:

c=",,A O,|/|\\,| |,|/ \\,,,\\  O, \\/|\\|,   | |,  / \\,   .  , .* '., * O ',. \\|/ ',*  |  .,.*/ \\.',,, O,/|\\, |,/ \\,,,, O,/|\\,/ \\".split(',')
r=['']*6
for b in input():
    for e,f in '/$ \\/ $\\'.split():r=[x.replace(e,f)[::-1] for x in r]
    if r[0]:r=[x+'  ' for x in r]
    for n,a in enumerate(b[::-1]):
        m=c[n*6:n*6+6]
        if a:r=[x+'   '+(' '.join([y.ljust(max(map(len,m)))]*a)) for x,y in zip(r,m)] 
print '\n'.join(r+['-'*len(r[0])])

0

পাইথন (476)

আমার আগেরটির থেকে আলাদা সমাধানকারী; দীর্ঘ, তবে আরও কার্যকর।

$ echo "[1,1,2,3,1],[0,0,1,1,1]"|python g3.py
               .       .                                                            .   
             .' *.   .' *.                                                        .* '. 
       O     ' O *   ' O *      O  /   O  /   O  /    O A        A O    \  O      * O ' 
 O    /|\   ' \|/ . ' \|/ .   |/|\/  |/|\/  |/|\/    /|\|        |/|\    \/|\|   . \|/ '
/|\    |    .  |  * .  |  *   | |    | |    | |       | |        | |       | |   *  |  .
/ \   / \   './ \*. './ \*.    / \    / \    / \     / \|        |/ \     / \    .*/ \.'
----------------------------------------------------------------------------------------

কোড:

c=",,A O,|L|R,| |,|L R,,,R  O, RL|R|,   | |,  L R,   .  , .* '., * O ',. R|L ',*  |  .,.*L R.',,, O,L|R, |,L R,,,, O,L|R,L R".split(',')+['']*12
s=[sum([[4-n,5]*a+[6] for n,a in enumerate(b) if a]+[[5]],[])[::-1] for b in input()]
t=[[''.join([c[a*6+n].ljust([4,6,7,3,3,1,2][a]) for a in x]) for x in s] for n in range(0,6)]
for d,e,f in 'RL/ LR\\'.split():t=[[x[0].replace(d,f),x[1].replace(e,f)] for x in t]
t=[x[0][::-1]+x[1] for x in t]
print '\n'.join(t+['-'*len(t[0])])
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.