সাপ বানানোর জন্য বিরতি নিন!


23

আমাদের ক্লাসিক সাপটি গ্রোথ হরমোনের ভারসাম্যহীনতা তৈরি করেছে । বিষয়টিকে আরও খারাপ করার জন্য, তাঁর লেজটি স্থির হয়ে আছে! নির্দিষ্ট হিসাবে নির্দেশিত ইনপুট দেওয়া হয়েছে Figure 1, কোথায় সে বৃদ্ধি পাবে তা নির্ধারণের জন্য একটি প্রোগ্রাম লিখুন।

WASD

চিত্র 1. নির্দেশমূলক ইনপুট।

প্রোগ্রাম স্পেসিফিকেশন

  • অক্ষর অনুসারে ইনপুট চরিত্রটি পড়ুন STDIN
  • একটি চরিত্র পড়ার পরে, সাপটিকে আউটপুট করুন STDOUT। আপনি প্রতিবার সাপ ছাপানোর সময় একটি ফাঁকা রেখা অন্তর্ভুক্ত করুন।
  • সাপ <>v^এবং একটি মাথা গঠিত । সাপের মাথা আপনার পছন্দের যেকোনো বৃত্তাকার চরিত্র, যেমন হতে পারে o, 0, O, অথবা
  • যে কোনও সমন্বয় wasdইনপুট জন্য বৈধ valid
  • আপনার প্রোগ্রামটি অনুমান করা উচিত নয় যে ইনপুটটি নির্দিষ্ট দৈর্ঘ্যের মধ্যে রয়েছে।
  • ওপরে রাইটিং করে সাপটি নিজের উপরে গাদা করতে পারে <>v^। সাপ বৃদ্ধির যান্ত্রিকগুলির উদাহরণ দেখুন।
  • শ্বেত স্পেস অনুসরণ করা ঠিক আছে, তবে আপনার সাপটি অবশ্যই সঠিক দেখতে হবে।

স্কোরিং

এটি । আপনার স্কোরটি আপনার প্রোগ্রামের অক্ষরের সংখ্যা। সর্বনিম্ন স্কোর জয়!

উদাহরণস্বরূপ সাপ:

ইনপুট: ddddssaassdddddww

আউটপুট:

>>>>v
    v
  v<<  ☺
  v    ^
  >>>>>^

ইনপুট: dddsssaaawww

আউটপুট:

☺>>v
^  v
^  v
^<<<

ইনপুট: dddsssdddddasddddwww

আউটপুট:

>>>v
   v       ☺
   v       ^
   >>>>v<  ^
       >>>>^

ইনপুট: dddwwdddssssaaaaaaaaawww

আউটপুট:

      >>>v
☺     ^  v
^  >>>^  v
^        v
^<<<<<<<<<

ইনপুট: ddddssssaawwddddd

আউটপুট:

>>>>v
    v
  >>>>>☺
  ^ v
  ^<<

ইনপুট: dddddssaawwwwddddd

আউটপুট:

   >>>>>☺
   ^
>>>^>v
   ^ v
   ^<<

ইনপুট:

ddddaaaasssssdddddddddddwwwwwaaaasssssdddddddddddwwwwwwwwwwsssssaaaasssssdddddddwwwwwddddssaaaasssddddaaaassssssssssdddwwwwwwwddddswaaaassssddaasssaaaaaaaaaawwwwddddssssaaaaaaaaaaawwwwddddsssssssssaaaa

আউটপুট:

                  v
                  v
                  v
                  v
                  v
v<<<<  v<<<<  v<<<<  >>>>v
v      v   ^  v   ^  ^   v
v      v   ^  v   ^  v<<<<
v      v   ^  v   ^  v
v      v   ^  v   ^  v
>>>>>>>>>>>>>>>>>>>>>v<<<<
                     v
                     v
                     v  v<<<<
                     v  v   ^
                     v  v
       >>>>v  >>>>v  v  v
       ^   v  ^   v  v  v<<
       ^   v  ^   v  v  v
       ^   v  ^   v  v  v
       ^<<<v<<<<<<<<<<<<<
           v
           v
           v
           v
       O<<<<

8
খুব সুন্দর. তবে ... ডাব্লুএইচটিএইচ একটি "কোড গফ্ল"?
জন ডিভোরাক

2
আমি বোনাস থেকে মুক্তি পাব কারণ এটি নিজের সাপ এবং ইনপুট স্ট্রিং তৈরি করা খুব সহজ।
বিটা ক্ষয়

1
পছন্দ করুন
hmatt1

1
@ বেটাডেকে প্লেনের স্কেলগুলি। কোড গল্ফ উদাহরণে এটি সি এর উপরের বামে শুরু হয়েছিল, তবে যেহেতু ডিটি লম্বা হয় এটি নীচে চলে যায়।
hmatt1

2
@ চিলিমাজিক ধন্যবাদ! যদি উভয়ই গ্রহণযোগ্য হয় তবে আপনার সম্ভবত এটি প্রশ্নের মধ্যে পরিষ্কার করা উচিত।
ইনগো বার্ক

উত্তর:


5

রুবি, 207 টি অক্ষর

b=[];x=y=0;gets.chars{|c|b[y]||=[];b[y][x]={?\n=>->{?0},?w=>->{y>0?y-=1:b=[[]]+b;?^},?a=>->{x>0?x-=1:b.map!{|r|[' ']+r};b[y][1]=?<},?s=>->{y+=1;?v},?d=>->{x+=1;?>}}[c][]};puts b.map{|r|r.map{|c|c||' '}.join}

Ungolfed:

b=[]  #board
x=y=0 #position
gets.each_char{|c|
  b[y] ||= []
  b[y][x] = {
    "\n" => lambda{0},
    "w"  => lambda{if y>0 then y-=1 else b=[[]]+b; "^"},
    "a"  => lambda{if x>0 then x-=1 else b.map!{|r|[' ']+r}; b[y][1]="<"},
    "s"  => lambda{y+=1; "v"},
    "d"  => lambda{x+=1; ">"}
  }[c].call}
puts b.map{|r|r.map{|c|c||' '}.join}

(লাম্বদা aফিরে লেখার জন্য কারণ উপরের কাজটি যে সারিতে লিখেছেন তা আর বোর্ডে নেই)


11

ECMAScript 6 জাভাস্ক্রিপ্ট (399 401 431 )

তীর ফাংশনগুলির কারণে ECMAScript 6 সমর্থনকারী একটি ব্রাউজারে চালিত করতে হবে।

এখানে ফিডলগুলি রয়েছে যা তীর ফাংশন ব্যবহার না করে কোনও (সাধারণ) ব্রাউজারে চালনার জন্য পরিবর্তন করা হয়েছে। textareaপরিবর্তে এগুলি মুদ্রণ করুন:

গল্ফ সংস্করণ

i=prompt(),v=[],c=0,x=[0],y=[0],s='unshift',k='slice',t='sort',h=[0,-1,0,1,0]
while(c<i.length){m='wasd'.indexOf(i[c++]);v[s]('^<v>'[m]);x[s](x[0]+h[m]);y[s](y[0]+h[m+1])}f=(a,b)=>a-b
q=x[k]()[t](f)[0],e=x[k]()[t]((a,b)=>b-a)[0],w=y[k]()[t](f)[0],o=[]
while((i=y.pop())!=null){i-=w;j=x.pop()-q;t=(o[i]||Array(e+1-q).join(" ")).split("");t.splice(j,1,v.pop()||"@");o[i]=t.join("")}alert(o.join("\n"))

অ্যানিমেটেড জিআইএফ:

ওপির একটি উদাহরণ:

এখানে চিত্র বর্ণনা লিখুন

স্ট্রেচ পাগলের উদাহরণ :

এখানে চিত্র বর্ণনা লিখুন

Ungolfed

আমি সত্যিই এটি গল্ফ করা শুরু করার কিছু আগে থেকে একটি (সামান্য) অদম্য সংস্করণ রয়েছে :

var input = prompt(),
    values = [],
    c = 0,
    x = [0],
    y = [0],
    s = 'unshift';
while (c < input.length) {
    var mapped = 'wasd'.indexOf(input[c++]);
    values[s]('^<v>'[mapped]);
    x[s](x[0]+[0, -1, 0, 1][mapped]);
    y[s](y[0]+[-1, 0, 1, 0][mapped]);
}

var minX = x.slice().sort(function (a,b){return a-b})[0];
var maxX = x.slice().sort(function (a,b){return b-a})[0];
var minY = y.slice().sort(function (a,b){return a-b})[0];

var output = [];
while((i=y.pop())!=null) {
    i-=minY;
    j=x.pop()-minX;
    t=(output[i]||Array(maxX+1-minX).join(" ")).split("");
    t.splice(j,1,values.pop()||"@");
    output[i]=t.join("");    
}

console.log(output.join("\n"));

জিআইএফগুলি খুব দুর্দান্ত। আপনার লিখিত কোনও স্ক্রিপ্টের মাধ্যমে সেগুলি কি স্বয়ংক্রিয়ভাবে তৈরি হয়?
AndoDaan

1
ধন্যবাদ! গুগলের শক্তি দিয়ে আমি কেবল উবুন্টুতে স্ক্রিন রেকর্ডিং থেকে কীভাবে উপহার দিতে পারি তা সন্ধান করলাম। এটি কেবল একটি স্ক্রিন রেকর্ডার এবং ব্যবহার করে convert। খুব সহজ :)
ইনগো বার্ক

3
(জিআইএফ, উপহার নয়)
ইনগো বার্ক

8

সেড, 71

s/w/\^\x1B[D\x1B[A/g
s/a/<\x1B[2D/g
s/s/v\x1B[B\x1B[D/g
s/d/>/g
s/$/@/

গল্ফস্ক্রিপ্ট, 165 126

' '*"\33[":e{e'D'}:-{[e'C'+'<'--]]}:a{[-+'>']]}:d{[e'B'+'^'-e'A']]}:w{[e'A'+'v'-e'B']]}:s{][\[}:+7{;}*''\~[e'H'e'J']\'@'e'20H'

আমার পূর্ববর্তী উত্তর হিসাবে একই পন্থা, তবে কার্সারটি সঠিকভাবে পূর্বে এবং পরে অবস্থান করা। আমি কার্সার পজিশনিংয়ের পদ্ধতির জন্য বেশ গর্বিত - মূলত, এটি অক্ষর না ছাপিয়ে প্রথমে বিপরীতে সাপ চালায়।


1
আপনি একটি উদাহরণ কল যোগ করতে পারেন? echo "dddddssaawwwwddddd" | sed -e 's/w/\^\x1B[D\x1B[A/g' -e 's/a/<\x1B[2D/g' -e 's/s/v\x1B[S\x1B[D/g' -e 's/d/>/g' -e 's/$/@/'আমার জন্য সঠিক আউটপুট দেয় না।
ইনগো বার্ক

মৃত্যুদন্ড কার্যকর করার পরে আপনার প্রম্পটটি সম্ভবত সাপের অংশটি ওভাররাইট করছে। পাইপিংয়ের পরিবর্তে সাপটিকে সরাসরি স্টিডিনে আটকান, বা আপনার প্রম্পট অন্য কোথাও চলে \nযাওয়ার পরে কয়েকটা যুক্ত করুন @
স্নেফটেল

1
এটি সাপ বোর্ডের উপরে বা বামে যেতে পারে যদি ব্যর্থ হতে পারে।
12:30 এ টমসডিং

@ টমসমিডিং হ্যাঁ, আমি এটি মোকাবেলা করতে এটিকে প্রসারিত করতে পারি। ভাষা একপাশে রেখে, যদিও, আমি সত্যিই মনে করি এএনএসআই নিয়ন্ত্রণ ক্রমগুলি ছোট কোডের জন্য যাওয়ার উপায় go
স্নেফটেল

3

জাভা - 646

প্রথম হতে পারে!

আমি বাজি ধরছি আপনারা সবাই এটাকে পরাতে পারেন

আন (সাজানো) গল্ফড

import java.util.*;
public class Snake{
    public static void main(String[]a) {
        int x,y,minX,minY,maxX,maxY;
        x=y=minX=maxX=minY=maxY=0;
        List<Integer>xs,ys=new ArrayList<Integer>();
        xs=new ArrayList<Integer>();
        List<Character>p=new ArrayList<Character>();
        for(int b=0;b<a[0].length();b++){
            int newX=x,newY=y;
            switch(a[0].charAt(b)){
            case'a':newX--;p.add('<');break;
            case's':newY++;p.add('v');break;
            case'd':newX++;p.add('>');break;
            case'w':newY--;p.add('^');break;
            }
            xs.add(x);ys.add(y);
            x=newX;y=newY;
            if(x<minX){minX=x;}
            if(x>maxX){maxX=x;}
            if(y<minY){minY=y;}
            if(y>maxY){maxY=y;}
        }
        char[][]c=new char[maxY-minY+1][maxX-minX+1];
        for(int i=0;i<xs.size();i++)c[ys.get(i)-minY][xs.get(i)-minX]=p.get(i);
        c[y-minY][x-minX]='@';
        for(char[]k:c){for(char l:k){System.out.print(l);}System.out.println();}
    }
}

ছোট -

import java.util.*;class S{public static void main(String[]a){int x,y,o,z,s,u;x=y=o=s=z=u=0;List<Integer>j,t=new ArrayList<Integer>();j=new ArrayList<Integer>();List<Character>p=new ArrayList<Character>();for(int b=0;b<a[0].length();b++){int e=x,r=y;switch(a[0].charAt(b)){case'a':e--;p.add('<');break;case's':r++;p.add('v');break;case'd':e++;p.add('>');break;case'w':r--;p.add('^');break;}j.add(x);t.add(y);x=e;y=r;if(x<o)o=x;if(x>s)s=x;if(y<z)z=y;if(y>u)u=y;}char[][]c=new char[u-z+1][s-o+1];for(int i=0;i<j.size();i++)c[t.get(i)-z][j.get(i)-o]=p.get(i);c[y-z][x-o]='@';for(char[]k:c){for(char l:k){System.out.print(l);}System.out.println();}}}

ইনপুট - dddsssdddwwwwaaaaaaaassssssssssddddddddddddddddddd

v<<<<<<<<         
v >>>v  ^         
v    v  ^         
v    v  ^         
v    >>>^         
v                 
v                 
v                 
v                 
v                 
>>>>>>>>>>>>>>>>>@

ইনপুট - dddsssddddasdddddww

>>>v        
   v       @
   v       ^
   >>>>v<  ^
       >>>>^

আমার ব্যক্তিগত প্রিয় - dwdwdwddaasassdddddwdwdwddsdswawaasassdddddddwdwdwddsdswawaasassddddwwwwwwwssssssdsdddwwwwddaassddaassddddsssdddwdwdwddaasasassddddwwwwssssssssasasaaawdwwdwddwwdddddddwdwdwddsdswawaasassddddddddddwwdwwwwaasssassdsdddddddwdwdwwwwasasssssssssssdwwwwwwwddd

                    v                                          
                    v                                          
                    v                                          
                    v   v<<                                    
   v<<   v<<     v<<v   v                                      
  v<    v< ^<   v< ^v   v<<                        v<<     v<  
 >v    >v   ^  >v   >v  v                          v ^    v<^  
>^>>>>>^>>>>>>>^>>>>^>>>>>>>v    v<v               v ^    v ^  
                            v   v< v       v<<    v< ^    v ^  
                            v  v<  v      v< ^<   v >^    v>^  
                            >>>v   v     >v   ^   >v^     v>>>@
                               >>>>>>>>>>^>>>>>>>>>>>>>>>>v^   
                                  ^v                      v^   
                                >>^v                      v^   
                               >^  v                      v^   
                               ^  v<                      v^   
                              >^ v<                       v^   
                              ^<<<                        >^  

2

সি # 607

namespace System{using B=Text.StringBuilder;class P{static void Main(){var f=new Collections.Generic.List<B>(){new B("O")};int w=1,r=0,c=0;for(Action R=()=>f[r].Append(' ',w-f[r].Length+1);1>0;){var key=Console.ReadKey(1>0).KeyChar;if(key=='w'){f[r][c]='^';if(--r<0)f.Insert(r=0,new B());R();f[r][c]='O';}if(key=='a'){f[r][c]='<';if(--c<0){foreach(var s in f)s.Insert(c=0,' ');w++;}R();f[r][c]='O';}if(key=='s'){f[r][c]='v';if(++r>f.Count-1)f.Add(new B());R();f[r][c]='O';}if(key=='d'){f[r][c]='>';if(++c>w++)foreach(var s in f)s.Append(' ');R();f[r][c]='O';}Console.WriteLine(string.Join("\n",f)+"\n");}}}}

হোয়াইটস্পেসের সাথে "অবহেলিত" (এটি গল্ফযুক্ত সংস্করণের সাথে সামঞ্জস্য করা হবে না):

namespace System
{
    using B = Text.StringBuilder;
    class P
    {
        static void Main()
        {
            var f = new Collections.Generic.List<B>() { new B("O") };
            int w = 1, r = 0, c = 0;
            Action R = () => f[r].Append(' ', w - f[r].Length + 1);
            while (true)
            {
                char key = Console.ReadKey(1>0).KeyChar;
                if (key == 'w')
                {
                    f[r][c] = '^';
                    if (--r < 0) { f.Insert(0, new B()); r = 0; }
                    R();
                    f[r][c] = 'O';
                }
                if (key == 'a')
                {
                    f[r][c] = '<';
                    if (--c < 0)
                    {
                        foreach (var s in f)
                            s.Insert(0, ' ');
                        w++;
                        c = 0;
                    }
                    R();
                    f[r][c] = 'O';
                }
                if (key == 's')
                {
                    f[r][c] = 'v';
                    if (++r > f.Count - 1) f.Add(new B());
                    R();
                    f[r][c] = 'O';
                }
                if (key == 'd')
                {
                    f[r][c] = '>';
                    if (++c > w++)
                    {
                        foreach (var s in f)
                            s.Append(' ');
                    }
                    R();
                    f[r][c] = 'O';
                }

                Console.WriteLine(string.Join("\n", f) + "\n");
            }
        }
    }
}

2

পাইথন 3: 259 বাইট

x=y=0
b,p,r={},(0,-1,0,1),range
while 1:
 d='wasd'.index(input());b[(x,y)]='^<v>'[d];x+=p[d];y-=p[~d];b[(x,y)]='☺';l,m=([k[i]for k in b]for i in(0,1))
 for j in r(min(m),max(m)+1):print(''.join(b[(i,j)]if(i,j)in b else' 'for i in r(min(l),max(l)+1)))
 print()

আমি চাবিগুলির স্থানাঙ্ক সহ সাপটিকে একটি ডিকের মধ্যে রাখার সিদ্ধান্ত নিয়েছি। তারপরে ফাঁকা জায়গাগুলি প্রতিস্থাপন করে আউটপুট সীমাটি আবিষ্কার করুন এবং পুনরাবৃত্তি করুন।

x = y = 0
board = {}
while 1:
    d = 'wasd'.index(input())
    board[(x, y)] = '^<v>'[d] # body
    x += (0, -1, 0, 1)[d]
    y -= list(reversed((0, -1, 0, 1)))[d]
    board[(x,y)] = '☺' # head

    xs, ys= ([coord[dim] for coord in board] for dim in(0, 1))
    for j in range(min(ys), max(ys)+1):
        print(''.join(board[(i,j)] if (i,j) in board else ' '
                      for i in range(min(xs), max(xs)+1)))
    print()

গীত। আমার প্রথম গল্ফ :) আমার উত্তর অনুপযুক্ত কিনা তা আমাকে জানান


Oপরিবর্তে ব্যবহার করা আপনাকে 2 বাইট সংরক্ষণ করে। একটি লাল হেরিং হয়।
এরিক দি আউটগল্ফার

@ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ আসলে 3 বাইট হিসাবে গণনা করা হয়নি।
মার্টিন ইন্ডার

@ মার্টিনএেন্ডার এটি অবশ্যই হবে , ডিফল্ট এনকোডিংটি ইউটিএফ -8। আমার মনে হয়েছিল এটি গণনা করা হয়নি। আমার মনে হচ্ছে এটি দুর্ঘটনাজনক ছিল এবং অবশ্যই গিলি দ্বারা এটি স্থির করা উচিত।
এরিক দি আউটগল্ফার

@ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ প্রযুক্তিগতভাবে, উত্তরদাতারা তাদের দোভাষী দ্বারা সমর্থিত যে কোনও এনকোডিং ব্যবহার করতে পারবেন (এবং আমি নিশ্চিত যে কিছু ASCII- সামঞ্জস্যপূর্ণ কোড পৃষ্ঠাতে এই চরিত্রটি রয়েছে) তবে এটি বিন্দুর পাশে রয়েছে। আমি বলছি বাইট গণনাটি ইতিমধ্যে ব্যবহারের মতো O, তাই আমি এটি নিয়ে চিন্তা করব না। কোড থেকে এটি স্পষ্ট যে এটি এখনও অন্য কোনও চরিত্রের জন্য কাজ করবে তবে ব্যবহারের মাধ্যমে আপনি কোনও পরিবর্তন ছাড়াই চ্যালেঞ্জ থেকে স্বাচ্ছন্দ্যে পরীক্ষার কেসগুলি চালাতে পারবেন।
মার্টিন ইন্ডার

@ মার্টিনএেন্ডার পাইথন ইউটিএফ -8 ব্যবহার করে, ইউনিকোড স্ট্রিং সমর্থন করার ক্ষমতা দ্বারা প্রমাণিত। এই কার্যকারিতা সক্ষম করতে, প্রথম বা দ্বিতীয় লাইনটি অবশ্যই হওয়া আবশ্যক #coding=utf-8। নোট যে #coding=utf-16কাজ করে না। অতএব অবশ্যই 3 হিসাবে গণনা করতে হবে
এরিক আউটগলফার

2

পাইথন 2.7 - 274 বাইট

x,y,m,d,r=0,0,{},(0,-1,0,1),range
for c in raw_input():b='wasd'.index(c);m[(x,y)]='^<v>'[b];x+=d[b];y-=d[~b];m[(x,y)]='@';l,n=([k[h] for k in m] for h in (0, 1))
for j in range(min(n),max(n)+1):print(''.join(m[(i,j)] if (i,j) in m else ' 'for i in range(min(l),max(l)+1)))

উদার সংস্করণ

x,y,matrix,delta = 0,0,{},(0, -1, 0, 1)    
for c in raw_input('Command: '):
    d = 'wasd'.index(c)
    matrix[(x, y)] = '^<v>'[d]
    x += delta[d]
    y -= list(reversed(delta))[d]
    matrix[(x, y)] = '@'    
xs, ys = ([xy[i] for xy in matrix] for i in (0, 1))
for j in range(min(ys), max(ys)+1):
    print(''.join(matrix[(i, j)] if (i, j) in matrix else ' '
                  for i in range(min(xs), max(xs)+1)))

2
প্রোগ্রামিং ধাঁধা এবং কোড গল্ফ স্বাগতম! আমাদের সহায়তা কেন্দ্রে বর্ণিত নিয়ম অনুসারে , চ্যালেঞ্জগুলির সমস্ত সমাধান ব্যবহারে বিজয়ী মানদণ্ডের গুরুতর প্রতিযোগী হওয়া উচিত। উদাহরণস্বরূপ, একটি কোড গল্ফ প্রতিযোগিতায় একটি এন্ট্রি গল্ফ করা প্রয়োজন।
ডেনিস

1
আমি আপনার জন্য বাইট গণনা যুক্ত করেছি, তবে সেখানে অপ্রয়োজনীয় অনেকগুলি জায়গা রয়েছে যা আপনি মুছে ফেলতে চাইতে পারেন।
মার্টিন ইন্ডার

ধন্যবাদ ছেলেরা, আমি আমার প্রথম প্রবেশে প্রয়োজনীয় পরিবর্তন করেছি। কোনও অতিরিক্ত পরামর্শ ব্যাপকভাবে প্রশংসা করা হবে।
অ্যাড্রিয়ান ইরাসমাস


@ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ এটি কেবল প্রিন্ট করে SyntaxError: invalid syntax
ডেনিস

2

05 এ বি 1 ই , 35 34 30 28 বাইট

.•₃º•"<>v^"©‡0ªÐUĀ>sŽO^®XkèΛ

0সাপের মাথা হিসাবে ব্যবহার করে ।

-4 বাইটস @ গ্রিমিকে ধন্যবাদ ।

এটি অনলাইনে চেষ্টা করে দেখুন (একবারে সব পরীক্ষার ক্ষেত্রে কোনও পরীক্ষার স্যুট নয়, কারণ ক্যানভাস পুনরায় সেট করার কোনও উপায় নেই, সুতরাং ফলাফলগুলি ওভারল্যাপ হয়ে যাবে)।

ব্যাখ্যা:

.•₃º•          # Push compressed string "adsw"
     "<>v^"    # Push string "<>v^"
           ©   # Save it in variable `r` (without popping)
              # Transliterate the (implicit) input-string,
               # replacing all "adsw" with "<>v^" respectively
               #  i.e. "ddddssaassdddddww" → ">>>>vv<<vv>>>>>^^"
0ª             # Convert the string to a list of characters, and append a 0 (for the head)
               #  → [">",">",">",">","v","v","<","<","v","v",">",">",">",">",">","^","^","0"]
  Ð            # Triplicate this list of characters
   U           # Pop and store one of the three lists in variable `X`
   Ā           # Trutify each character ("0" remains 0; everything else becomes 1)
    >          # And then increase each integer by 1
               #  → [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1]
  s            # Swap the two lists on the stack
      ®Xk      # Get the index of each character of variable `X` in variable `r` ("<>v^")
               #  i.e. [">",">",">",">","v","v","<","<","v","v",">",">",">",">",">","^","^","0"]
               #   → [1,1,1,1,2,2,0,0,2,2,1,1,1,1,1,3,3,-1]
   ŽO^   è     # And use those to index into the compressed number 6240
               #  → [2,2,2,2,4,4,6,6,4,4,2,2,2,2,2,0,0,0]
Λ              # Use the Canvas builtin with these three lists

আমার এই 05AB1E ডগা দেখুন (বিভাগে কিভাবে কম্প্রেস স্ট্রিং অভিধান অংশ নয়? করতে এবং কিভাবে বড় পূর্ণসংখ্যার কম্প্রেস কিভাবে? ) কেন বুঝতে .•₃º•হয় "adsw"এবং ŽO^হয় 6240

ক্যানভাস বিল্টিন Λএবং এর তিনটি যুক্তির সংক্ষিপ্ত বিবরণ হিসাবে :

প্রথম যুক্তি: দৈর্ঘ্য (গুলি): আমরা আঁকতে চাইছি এমন লাইনগুলির আকার। যেহেতু আমাদের ওভারল্যাপিংয়ের বিষয়টি মাথায় রাখতে হবে, তাই আমরা প্রতিটি চরিত্রের জন্য আকার 2 এবং সাপের মাথার জন্য অতিরিক্ত 1 ব্যবহার করি।
দ্বিতীয় যুক্তি: স্ট্রিং (গুলি): আমরা যে অক্ষরগুলি প্রদর্শন করতে চাই। এই ক্ষেত্রে চরিত্রগুলি যা সাপের প্রধান চরিত্রের সাথে যুক্ত।
তৃতীয় যুক্তি: দিক (গুলি): প্রদত্ত দৈর্ঘ্যের এই অক্ষর-রেখাগুলিটি দিকনির্দেশিত করা উচিত। সাধারণভাবে আমাদের কাছে এই দিকনির্দেশগুলিতে [0,7]কোন দিকনির্দেশ থাকে:

7   0   1
    
6  X  2
    
5   4   3

6240[,,,]

ক্যানভাস বিল্টিন সম্পর্কে আরও বিশদ ব্যাখ্যার জন্য আমার এই 05AB1E টিপটি দেখুন Λ


1
আমি হয়ত কিছু মিস করেছি, তবে আমি মনে করি না যে γএকেবারেই প্রয়োজন। এটি ঠিক কাজ করে বলে মনে হচ্ছে।
গ্রিমি

@ গ্রিমি থ্যাঙ্কস, এটি সত্যই করেছে; মাথার জন্য 2s এবং 1 এর তালিকা সহ দুর্দান্ত বিকল্প পন্থা! এবং আমি আপনার প্রোগ্রামের ভিত্তিতে আরও 2 টি বাইট সংরক্ষণ করতে সক্ষম হয়েছি।
কেভিন ক্রুইজসেন

ধন্যবাদ! আমি বর্তমানে ২৩- এ আছি , যদিও এটি একটি উল্লেখযোগ্যভাবে ভিন্ন দৃষ্টিভঙ্গি, সুতরাং আপনার যদি এটি ঠিক থাকে তবে আমি এটির নিজস্ব উত্তরও বানাতে পারি।
গ্রিমি

@ গ্রিমি এটি সত্যই আমার থেকে একেবারেই ভিন্ন দৃষ্টিভঙ্গি, তাই নির্দ্বিধায় এটি পোস্ট করুন। আমি আসলে কিছুটা ইউনিকোড রূপান্তর প্রত্যাশা করেছিলাম এবং মডুলো এটিকে অনূদিতের তুলনায় আরও সংক্ষিপ্ত করে তুলতে পারে তবে আমি এই ধরণের ম্যাজিক ইন্টিজার / স্ট্রিং রূপান্তরগুলির সাথে যথেষ্ট সত্যই খারাপ। :)
কেভিন ক্রুইজসেন

1

পার্ল - 394

সংক্ষিপ্ততম নয়, তবে এটি জাভাস্ক্রিপ্ট, সি # এবং জাভা কমপক্ষে পরাজিত করে।

use List::Util qw(min max);sub c{()=$_[0]=~/$_[1]/g}%l=(a,['<',-1,0],d,['>',1,0],w,['^',0,-1],s=>['v',0,1]);($s,$x,$y,$w,$h)=($ARGV[0],0,0,max(c($s,a),c($s,d)),max(c($s,w),c($s,'s')));@s=split'',$s;map$x=min($x,$i+=$l{$_}[1]),@s;$i=0;map$y=min($y,$i+=$l{$_}[2]),@s;$x=abs $x;$y=abs $y;map{$m[$y][$x]=$l{$_}[0];$x+=$l{$_}[1];$y+=$l{$_}[2]}@s;$m[$y][$x]='o';map{map{print$_||' '}@$_;print"\n"}@m 

কিছু কৌশল:

  • সতর্কতা এবং কঠোরভাবে অনাবৃত ব্যবহারের অনুমতি দেওয়ার জন্য এবং ভেরিয়েবলগুলি ব্যবহারের আগে ডিক্লেয়ার না করার জন্য চালু করা হয়নি
  • কয়েকটি অক্ষর সংরক্ষণ করার জন্য ফ্যাট কমাগুলির পরিবর্তে পাতলা কমা
  • যখন প্রয়োজন হয় না তখন ভেরিয়েবলের জন্য প্রাথমিক মান নির্ধারণ না করা
  • সম্ভব হলে আধা-কলোন ফেলে রাখা
  • অ্যারে এবং হ্যাশগুলি সংজ্ঞায়িত করে -> ব্যবহার না করা এড়াতে উল্লেখ হিসাবে নয়
  • যথাযথভাবে গণনা করা এড়াতে প্রস্থ, উচ্চতা প্রয়োজনের চেয়ে বড় হতে দেওয়া (যা অতিরিক্ত কোড লাগবে)

যে জিনিসগুলি আঘাত করে:

  • স্ট্রিংয়ে অক্ষরের সংখ্যা গণনা করার জন্য অন্তর্নির্মিত উপায় নেই (যাইহোক দীর্ঘায়িত হতে পারে)
  • কোনও অন্তর্নির্মিত ন্যূনতম / সর্বাধিক ক্রিয়াকলাপ নেই, সুতরাং এটির পাঠাগারটি আমদানি করতে 27 টি অক্ষর নষ্ট করতে হবে না (আমাদের নিজস্ব সংজ্ঞায়িত করার চেয়ে কম)

1

সি - 273 বাইট - ইন্টারেক্টিভ ইনপুট সহ!

#define F for(i=w*w
*g,*G,x,i,j,w,W,u;main(w){putch(1);F;j=-~getch();g=G){if(!(x%w&&~-~x%w&&x/w&&x/w^~-w)){W=w+6;G=calloc(W*W,4);F-1;u=i%w+i/w*W-~W*3,i==x?x=u:8,i;)G[u]=g[i--];free(g);w=W;}G[x]="<^X>v"[j%=7];G[x+=1-G[x]%3+W*(!!j-j/2)]=1;F;i;)putch(i--%W?G[i]?G[i]:32:10);}}

সাপের মাথাটি প্রান্তটি নিকটে গেলে প্রতিটি সময় কোনও অক্ষর প্রবেশ করানো হয় এবং ক্ষেত্রটি মুদ্রিত হয়। আমি জানি না এটি কতটা পোর্টেবল - ইন্টারনেটে কেউ বলেছে যে গেচ () নন-উইন্ডোজ প্ল্যাটফর্মগুলিতে কাজ করে না। এএসসিআইআই ১ টি হাসির মুখের মতো দেখবে কিনা তা বলা শক্ত।

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

তথাকথিত "অবহেলিত":

#define SMILEYFACE 1
int main()
{
    int o;
    int w = 1;
    int *g = 0, *g2;
    int c, n;
    int x = 0;
    for( putch(SMILEYFACE);c = getch(); ) {
        if(c!='w'&&c!='a'&&c!='s'&&c!='d')
            return 1;
        if(!(x%w) | !(~-~x%w) | !(x/w)  | !(x/w-~-w) ) {
            int wnew = w + 4;
            int off = 2;
            g2 = calloc(wnew*wnew,sizeof(int));
            for(n = w*w; --n; )
                g2[ n%w+off + (n/w+off)*wnew ] = g[n];
            free(g);
            g = g2;
            x = (x/w+off)*wnew + x%w + off;
            w = wnew;
        }
        int i = -~c%7;
        g[x] = "<^X>v"[i];
        int dx = 1-g[x]%3 + w * (!!i-i/2);
        x += dx;
        g[x] = SMILEYFACE;
        for(o = w*w; o; )
            putch(o--%w?g[o]?g[o]:32:10);


    }
    return 0;
}

1

05 এ বি 1 ই , 23 বাইট

Ç7%DÉ+D"^>>v"ºsè0ªDĀ>rΛ

এটি অনলাইন চেষ্টা করুন!

ব্যাখ্যা:

                      # implicit input (eg: "wasd")
Ç                     # codepoints (eg: [119, 97, 115, 100])
 7%                   # modulo 7 (eg: [0, 6, 3, 2])
   DÉ+                # plus itself modulo 2 (eg: [0, 6, 4, 2])
# This is the list of directions that will be passed to 05AB1E's canvas function, Λ.
# 0 means up, 6 left, 4 right, 2 down.

 "^>>v"º              # "^>>v", horizontally mirrored (namely "^>>vv<<^")
D       sè            # index into this with a copy of the list of directions
          0ª          # append "0"
# This is the list of strings that will be drawn.

D                     # duplicate the list of strings
 Ā                    # truthify (maps letters to 1, 0 stays 0)
  >                   # increment each
# This is the list of lengths to draw.

r                     # reverse the stack because Λ takes arguments in the opposite order
 Λ                    # draw!

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