साँप बनाने के लिए एक ब्रेक ले लो!


23

हमारे क्लासिक सांप ने विकास हार्मोन का एक असंतुलन विकसित किया है । मामले को बदतर बनाने के लिए, उसकी पूंछ जगह-जगह जमी हुई है! में निर्दिष्ट दिशात्मक इनपुट को देखते हुए Figure 1, यह निर्धारित करने के लिए एक कार्यक्रम लिखें कि वह कहाँ बढ़ेगा।

wasd

चित्रा 1. दिशात्मक इनपुट।

कार्यक्रम विनिर्देशों

  • चरित्र पर इनपुट चरित्र पढ़ें STDIN
  • एक चरित्र को पढ़ने के बाद, साँप को आउटपुट करें STDOUT। कृपया हर बार जब आप सांप प्रिंट करते हैं, तो बीच में एक खाली लाइन शामिल करें।
  • साँप में <>v^एक सिर होता है। साँप के सिर अपने चयन के किसी दौर चरित्र, इस तरह के रूप में हो सकता है o, 0, O, या
  • wasdइनपुट के लिए कोई भी संयोजन मान्य है।
  • आपके कार्यक्रम को यह नहीं मानना ​​चाहिए कि इनपुट एक निश्चित अवधि के भीतर है।
  • ओवरराइटिंग करने पर सांप अपने आप ढेर हो सकता है <>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
बहुत अच्छा। लेकिन ... WTH एक "कोड gofl" है?
जॉन ड्वोरक

2
मुझे बोनस से छुटकारा मिल जाएगा, क्योंकि यह बहुत आसान है ताकि आप अपना साँप और इनपुट स्ट्रिंग बना सकें।
बीटा डेके

1
@JDDvorak ने मेरी बुर को रौंदा।
hmatt1

1
@ BetaDecay विमान तराजू। कोड गोल्फ उदाहरण में यह सी के शीर्ष बाईं ओर शुरू हुआ, लेकिन चूंकि डी लंबा है इसलिए यह नीचे चला जाता है।
hmatt1

2
@chilemagic धन्यवाद! यदि दोनों स्वीकार्य हैं तो आपको इस प्रश्न में स्पष्ट करना चाहिए।
इंगो बुर्क

जवाबों:


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"))

एनिमेटेड GIF:

ओपी के उदाहरणों में से एक:

यहाँ छवि विवरण दर्ज करें

स्ट्रेच पागल से उदाहरण :

यहाँ छवि विवरण दर्ज करें

Ungolfed

इससे पहले कि मैं वास्तव में इसे नीचे गोल्फ शुरू कर रहा हूँ, कुछ समय पहले एक (थोड़ा) 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"));

जिफ बहुत शांत हैं। क्या वे आपके द्वारा लिखी गई स्क्रिप्ट द्वारा स्वचालित रूप से बने हैं?
एंडोडा

1
धन्यवाद! Google की शक्ति के साथ मैंने सिर्फ उबंटू में स्क्रीन रिकॉर्डिंग से एक उपहार बनाने का तरीका देखा। यह सिर्फ एक स्क्रीन रिकॉर्डर का उपयोग करता है और 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/$/@/

गोल्फस्क्रिप्ट, १६५ १२६

' '*"\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
यह विफल हो सकता है अगर सांप बोर्ड के ऊपर या बाएं चला जाए।
दोपहर

@tomsmeding हाँ, मैं इससे निपटने के लिए इसका विस्तार कर सकता हूं। एक तरफ भाषा, हालांकि, मुझे वास्तव में लगता है कि एएनएसआई नियंत्रण अनुक्रम छोटे कोड के लिए जाने का तरीका है।
स्नेफेल

3

जावा - 646

के रूप में अच्छी तरह से पहले एक हो सकता है!

मुझे यकीन है आप सभी इसे हरा सकते हैं।

un (सॉर्ट) गोल्फ की

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();}}}

इनपुट - dddsssdddwwwwaaaaaaaassssssssssddddddddddddddddd

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

इनपुट - dddsssdddddasddddwww

>>>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

C # 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 बाइट्स के रूप में नहीं गिना गया था।
मार्टिन एंडर

@MartinEnder यह होना चाहिए , डिफ़ॉल्ट एन्कोडिंग UTF-8 है। मुझे लग रहा था कि इसे गिना नहीं गया है। मुझे लगता है कि यह आकस्मिक था और इसे तुरंत गिल्ली द्वारा तय किया जाना चाहिए।
आउटगॉल्फ जूल

@ E @G free तकनीकी रूप से, उत्तरदाता अपने दुभाषिया द्वारा समर्थित किसी भी एन्कोडिंग का उपयोग करने के लिए स्वतंत्र है (और मुझे पूरा यकीन है कि कुछ ASCII- संगत कोड पृष्ठ में वह चरित्र है) लेकिन वह बिंदु के बगल में है। मैं कह रहा हूँ कि बाइट गिनती पहले से ही उपयोग करने के रूप में ही है O, इसलिए मैं इसके बारे में चिंता नहीं करेगा। यह कोड से स्पष्ट है कि यह अभी भी किसी भी अन्य वर्ण के लिए काम करेगा, लेकिन आपको परिवर्तन के बिना चुनौती से परीक्षण मामलों को आसानी से चलाने देता है।
मार्टिन एंडर

@MartinEnder पायथन यूटीएफ -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

05AB1E , 35 34 30 28 बाइट्स

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

0सांप के सिर के रूप में उपयोग करता है ।

-4 बाइट्स @Grimy के लिए धन्यवाद ।

इसे ऑनलाइन आज़माएं (सभी परीक्षण मामलों के लिए कोई भी परीक्षण सूट नहीं है, क्योंकि कैनवस को रीसेट करने का कोई तरीका नहीं है, इसलिए आउटपुट ओवरलैप हो जाएगा ..)।

स्पष्टीकरण:

.•₃º•          # 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।
दूसरा तर्क: स्ट्रिंग (एस): जिन वर्णों को हम प्रदर्शित करना चाहते हैं। इस मामले में कौन से पात्र हैं, सांप के सिर के चरित्र के साथ जोड़ा गया है।
तीसरा तर्क: दिशा (s): दिए गए लंबाई के इन वर्ण-रेखाओं को दिशाओं में खींचा जाना चाहिए। सामान्य तौर पर हमारे पास ऐसे दिशा-निर्देश होते हैं, [0,7]जो इन दिशाओं के लिए मैप करते हैं:

7   0   1
    
6  X  2
    
5   4   3

6240[,,,]

कैनवस बिलिन के बारे में अधिक विस्तृत विवरण के लिए मेरा यह 05AB1E टिप देखें Λ


1
मुझे कुछ याद हो सकता है, लेकिन मुझे नहीं लगता कि γइसकी आवश्यकता है। यह ठीक काम करने लगता है।
ग्रिम्मी

@Grimy धन्यवाद, यह वास्तव में करता है; सिर के लिए 2s और 1 की सूची के साथ अच्छा वैकल्पिक दृष्टिकोण! और मैं आपके प्रोग्राम के आधार पर 2 और बाइट्स को बचाने में सक्षम हूं।
केविन क्रूज़सेन

धन्यवाद! मैं वर्तमान में 23 पर हूं , हालांकि यह काफी अलग दृष्टिकोण है, इसलिए मैं इसे अपना जवाब दे सकता हूं यदि आपके द्वारा यह ठीक है।
ग्रैमी

@ ग्रेमी वास्तव में मेरी तुलना में काफी अलग दृष्टिकोण है, इसलिए इसे पोस्ट करने के लिए स्वतंत्र महसूस करें। मैं वास्तव में थोड़े यूनिकोड रूपांतरण की उम्मीद कर रहा था और मोडुलो इसे ट्रांसपेरेंट की तुलना में छोटा बना सकता है, लेकिन मैं उन तरह के जादू पूर्णांक / स्ट्रिंग रूपांतरणों के साथ ईमानदारी से बहुत बुरा हूं। :)
केविन क्रूज़सेन

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);}}

हर बार एक चरित्र में प्रवेश करने पर क्षेत्र मुद्रित होता है और बढ़ता है अगर साँप का सिर किनारे के पास होता है। मुझे नहीं पता कि यह कितना पोर्टेबल है - इंटरनेट पर किसी ने कहा कि गॉच () गैर-विंडोज प्लेटफार्मों पर काम नहीं करता है। यह कहना मुश्किल है कि क्या ASCII 1 एक स्माइली चेहरे की तरह दिखाई देगा।

गोल्फ संस्करण काफी कष्टप्रद है क्योंकि इस कार्यक्रम से बाहर निकलने का कोई रास्ता नहीं है। कंट्रोल-सी मेरे लिए काम नहीं करता है। दूसरी ओर, ungolfed संस्करण समाप्त हो जाता है यदि 'w', 'a', 's', या 'd' के अलावा कोई वर्ण प्रविष्ट किया जाता है।

तथाकथित "अनगुल्ड":

#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

05AB1E , 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!

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