ASCII कला तीरंदाजी तीर


16

एक प्रोग्राम या फ़ंक्शन लिखें जो एक सकारात्मक पूर्णांक और प्रिंट में लेता है या एक तीरंदाजी तीर के ASCII कला चित्रण को इनपुट के अनुसार बढ़ाया जाता है।

यदि इनपुट 1आउटपुट है

  /\
 /  \
 \__/
  ||
  ||
  ||
  ||
  ||
  ||
  ||
  ||
 /||\
/ || \
/ || \
//  \\
/    \

यदि इनपुट 2आउटपुट है

     /\
    /  \
   /    \
  /      \
  \      /
   \____/
    |  |
    |  |
    |  |
    |  |
    |  |
    |  |
    |  |
    |  |
    |  |
    |  |
    |  |
    |  |
    |  |
    |  |
    |  |
    |  |
   /|  |\
  / |  | \
 /  |  |  \
/   |  |   \
/   |  |   \
/   |__|   \
/  /    \  \
/ /      \ \
//        \\
/          \

यदि इनपुट 3आउटपुट है

        /\
       /  \
      /    \
     /      \
    /        \
   /          \
   \          /
    \        /
     \______/
      |    |
      |    |
      |    |
      |    |
      |    |
      |    |
      |    |
      |    |
      |    |
      |    |
      |    |
      |    |
      |    |
      |    |
      |    |
      |    |
      |    |
      |    |
      |    |
      |    |
      |    |
      |    |
      |    |
      |    |
     /|    |\
    / |    | \
   /  |    |  \
  /   |    |   \
 /    |    |    \
/     |    |     \
/     |    |     \
/     |    |     \
/     |____|     \
/    /      \    \
/   /        \   \
/  /          \  \
/ /            \ \
//              \\
/                \

यदि इनपुट 4आउटपुट है

           /\
          /  \
         /    \
        /      \
       /        \
      /          \
     /            \
    /              \
    \              /
     \            /
      \          /
       \________/
        |      |
        |      |
        |      |
        |      |
        |      |
        |      |
        |      |
        |      |
        |      |
        |      |
        |      |
        |      |
        |      |
        |      |
        |      |
        |      |
        |      |
        |      |
        |      |
        |      |
        |      |
        |      |
        |      |
        |      |
        |      |
        |      |
        |      |
        |      |
        |      |
        |      |
        |      |
        |      |
       /|      |\
      / |      | \
     /  |      |  \
    /   |      |   \
   /    |      |    \
  /     |      |     \
 /      |      |      \
/       |      |       \
/       |      |       \
/       |      |       \
/       |      |       \
/       |______|       \
/      /        \      \
/     /          \     \
/    /            \    \
/   /              \   \
/  /                \  \
/ /                  \ \
//                    \\
/                      \

पैटर्न बड़े इनपुट नंबरों के लिए जारी है - तीर को तदनुसार बढ़ाया जाता है।

ध्यान दें कि किसी भी इनपुट एन के लिए:

  • एरोहेड बेस पर 2 × N अंडरस्कोर के साथ एक पेंटागन है, बेस से फैले प्रत्येक पक्ष पर एन स्लैश, और एरो टिप बनाने वाले दो पक्षों पर 2 × एन स्लैश।
  • शाफ्ट (फलेचिंग के भीतर का भाग सहित) 2 × (N-1) रिक्त स्थान द्वारा अलग किए गए दो ऊर्ध्वाधर सलाखों की 11 × N रेखाएं होती हैं। बहुत अंतिम पंक्ति में रिक्त स्थान के बजाय अंडरस्कोर है।
  • शाफ्ट की निचली 3 × N रेखाएं चारों ओर फैली हुई हैं। 2 × N स्लैश की दो लाइनें शाफ्ट के दोनों ओर से तिरछे नीचे की ओर बढ़ती हैं और स्लैश के ऊर्ध्वाधर स्तंभों के साथ जुड़ जाती हैं।
  • पूर्ण तीर 16 × N रेखाएँ ऊँची और 6 × N वर्ण चौड़ी हैं।

आपके आउटपुट में एरो टिप से पहले कोई खाली लाइनें नहीं होनी चाहिए और केवल एक अनुगामी न्यूलाइन तक होनी चाहिए।

आउटपुट लाइनों में से किसी में अनावश्यक अग्रणी स्थान नहीं होना चाहिए (फ्लेचिंग के बाएं किनारे को जितना संभव हो उतना बाईं ओर होना चाहिए) लेकिन किसी भी पंक्ति में अनुगामी रिक्त स्थान की कोई संख्या हो सकती है।

बाइट्स में सबसे कम सबमिशन जीतता है।


क्या अधिकतम इनपुट आकार है?
डाउनगोट

1
@vihan नंबर, हालांकि आप मान सकते हैं कि आपकी मेमोरी / पूर्णांकों को ओवरफ्लो नहीं किया जाएगा।
केल्विन के शौक

क्या हमें टेक्स्ट रैपिंग की चिंता करनी चाहिए? N> = 14 के लिए, मेरे टर्मिनल पर डिफ़ॉल्ट विंडो का आकार मेरे तीर को तीर की तरह नहीं दिखता है।
kevinsa5

@ kevinsa5 नहीं चिंता मत करो।
केल्विन के शौक

जवाबों:


2

पायथ, 149 147 146 144 146

2015-9-23 को संपादित करें: एक बग था, जिसे 2 बाइट्स के लिए तय किया गया था। कम करने के लिए संभव हो सकता है, मेरे पास अब समय नहीं है।

अभी भी एक पाइथ उत्तर के लिए बहुत लंबा लगता है।

M*tGHK*11Q=Y*3QA" /"jbC+R*yQG+_Js[ms[*dGHgt-YdG\_gKG\_)tQs[gQGHgyQG\_*K\|)ms[*+QdGH*y-tQdG\\*+*8QydGHgYGH)Qms[*++KQdGHgYGH)tQ+g*13QG*hYH)mXd"\/")J

स्पष्टीकरण (लगभग अप टू डेट)

मैं मूल रूप से तीर के संक्रमण को उत्पन्न करता हूं, क्योंकि इसका लाइन प्रारूप बहुत सरल है। इसके अलावा, मैं केवल एक आधा उत्पन्न करता हूं और फिर बहुत सारे बाइट्स को बचाने के लिए इसे उल्टा करता हूं।

M*tGH                                                       g(a,b) = (a - 1) * b
A" /"                                                       G = " ", H = "/"
              ms[...)tQ                                     N-1 lines inside body
                       s[...)                               1 line of edge of body
                             ms[...)Q                       N lines of tip + fin
                                     m...Q                  N-1 lines of fin
                                          +...              1 line of edge of fin
            s[                                )             flatten the maps to it
           J                                                save to J
          _                                                 reverse
                                                       J    another copy (unreversed)
                                               mXd"\/")     swap "\" and "/" on each line
         +                                                  add to other half
   +R*yQG                                                   add 2*N spaces to each line
  C                                                         transpose
jb                                                          join by newline

m                             tQ       map d over 0...N-2
 s[                          )         concatenate
   *dG                                 d spaces
      H                                "/"
          =Y*3Q                        save 3*N to Y
       gt-     dG                      3*N-d-2 spaces
                 \_                    "_"
                    K*11Q              save 11*N to K
                   g     G             11*N-1 spaces
                          \_           "_"

s[              )                      concatenate
  gQG                                  N-1 spaces
     H                                 "/"
      gyQG                             2*N-1 spaces
          \_                           "_"
            *K\|                       11*N pipes

m                               Q      map d over 0...N-1
 s[                            )       concatenate
   *+QdG                               N+d spaces
        H                              "/"
         *y-tQdG                       2*(N-d-1) spaces
                \\                     "\"
                  *+*8QydG             8*N+2*d spaces
                          H            "/"
                           gYG         3*N-1 spaces
                              H        "/"

m               tQ                     map d over 0...N-2
 +++                                   concatenate
    *++KQdG                            12*N+d spaces
           H                           "/"
            gYG                        3*N-1 spaces
               H                       "/"

+                                      concatenate
 g*13QG                                13*N-1 spaces
       *hYH                            3*N+1 slashes

3

पर्ल, 298 बाइट्स

for$y(0..($w=<>)*16-1){$r=$w*3;for$x(0..$w*6-1){$z=$x<$r?$x:$w*6-$x-1,$_.=$z==$r-$y-1&&$y<$w*2||!$z&&$y>=$w*13-1||($z==$w*16-1-$y||$z==$w*13-1-$y)&&$z<$w*2?$x<$r?'/':'\\':$z==$y-$w&&$y>=$w*2&&$y<$r?$x<$r?'\\':'/':$z==$r-$w&&$y>=$r&&$y<$w*14?'|':$z>=$r-$w&&($y==$r-1||$y==$w*14-1)?_:$"}$_.=$/}print

बहु-रेखा:

for$y(0..($w=<>)*16-1){$r=$w*3;  # read input and loop over rows
    for$x(0..$w*6-1){  # loop over columns

        # flip x on right side of arrow:
        $z=$x<$r?$x:$w*6-$x-1;

        # slashes on fletching and tip of arrowhead:
        $_.=$z==$r-$y-1&&$y<$w*2||!$z&&$y>=$w*13-1||($z==$w*16-1-$y||$z==$w*13-1-$y)&&$z<$w*2?$x<$r?'/':'\\':

        # slashes on underside of arrowhead:
        $z==$y-$w&&$y>=$w*2&&$y<$r?$x<$r?'\\':'/':

        # vertical bars on side of shaft:
        $z==$r-$w&&$y>=$r&&$y<$w*14?'|':

        # underscores on base of arrowhead and shaft:
        $z>=$r-$w&&($y==$r-1||$y==$w*14-1)?_:$"
   }
   $_.=$/  # add newline at end of each row
}
print  # print out string

आउटपुट:

2
     /\     
    /  \    
   /    \   
  /      \  
  \      /  
   \____/   
    |  |    
    |  |    
    |  |    
    |  |    
    |  |    
    |  |    
    |  |    
    |  |    
    |  |    
    |  |    
    |  |    
    |  |    
    |  |    
    |  |    
    |  |    
    |  |    
   /|  |\   
  / |  | \  
 /  |  |  \ 
/   |  |   \
/   |  |   \
/   |__|   \
/  /    \  \
/ /      \ \
//        \\
/          \

डोम हेस्टिंग्स के लिए धन्यवाद मुझे 5 (और गिनती) बाइट्स बचाने में मदद करने के लिए


1
हे समगक, आप $w=<>पहली बार आपके द्वारा उपयोग किए जाने वाले घोषणापत्र को स्थानांतरित करके कुछ बाइट्स बचा सकते हैं for$y(0..($w=<>)*16-1){और बहुत सारे कोष्ठक हटाए जा सकते हैं (कुछ आउटपुट को बदलते हैं, लेकिन मुझे लगता है कि आप वैसे भी जा रहे हैं!)। इसके अलावा अपने '_'बस एक शाब्दिक हो सकता है _। उम्मीद है की वो मदद करदे!
डोम हेस्टिंग्स

2

जूलिया, 452 बाइट्स

यह उत्तर बहुत प्रेरित नहीं है, और मैंने इसे स्पष्ट रूप से स्पष्ट नहीं किया है। मैं इसके लिए दूसरे लोगों को हराने के लिए एक अंक होना चाहता हूं।

function R(c,x,y,e,f,n)
for i=1:n
a[y,x]=c
x+=e
y+=f
end
end
function f(n::Int)
global a=fill(' ',16n,6n)
F='/'
B='\\'
q=3n+1
r=2n+1
R(F,3n,1,-1,1,2n)
R(B,q,1,1,1,2n)
R(B,n+1,r,1,1,n)
R(F,5n,r,-1,1,n)
R('_',r,3n,1,0,2n)
R('|',r,q,0,1,11n)
R('|',4n,q,0,1,11n)
R('_',r+1,14n,1,0,r-3)
R(F,2n,11n+1,-1,1,2n)
R(B,4n+1,11n+1,1,1,2n)
R(F,1,13n,0,1,3n)
R(B,6n,13n,0,1,3n)
R(F,2n,14n+1,-1,1,2n)
R(B,4n+1,14n+1,1,1,2n)
for b = 1:16n
println(join(a[b,:]))
end
end

कोशिश करके देखो:

julia> f(1)
  /\                          
 /  \                         
 \__/                         
  ||                          
  ||                          
  ||                          
  ||                          
  ||                          
  ||                          
  ||                          
  ||                          
 /||\                         
/ || \                        
/ || \                        
//  \\                        
/    \

ungolfed:

# Repeat a character through array a from (x,y) -> (x+n*dx,y+n*dy)
function R(a::Array{Char,2},c::Char, x::Int, y::Int, dx::Int, dy::Int, n::Int)
    for i = 1:n
        a[y,x] = c
        x += dx
        y += dy
    end
end

function arrow(n::Int)
    a = fill(' ',16n,6n)
    # upper left of head
    R(a,'/',3n,1,-1,1,2n)
    # upper right of head
    R(a,'\\',3n+1,1,1,1,2n)
    # lower left of head
    R(a,'\\',n+1,2n+1,1,1,n)
    # lower right of head
    R(a,'/',5n,2n+1,-1,1,n)
    # bottom of head
    R(a,'_',2n+1,3n,1,0,2n)
    # shaft
    R(a,'|',2n+1,3n+1,0,1,11n)
    R(a,'|',4n,3n+1,0,1,11n)
    R(a,'_',2n+2,14n,1,0,2n-2)
    # upper fletching edges
    R(a,'/',2n,11n + 1,-1,1,2n)
    R(a,'\\',4n+1,11n+1,1,1,2n)
    # fletching sides
    R(a,'/',1,13n,0,1,3n)
    R(a,'\\',6n,13n,0,1,3n)
    # lower fletching edges
    R(a,'/',2n,14n + 1,-1,1,2n)
    R(a,'\\',4n+1,14n+1,1,1,2n)
    for r = 1:16n
        println(join(a[r,:]))
    end
end

2

रूबी, 233

->n{(16*n).times{|i|j=i/n
m=n*3
e=' '*6*n
i%(11*n)==m-1&&e[2*n..4*n-1]=?_*2*n
j%14>2&&e[m+n-1]=e[m-n]=?|
k=(i-n)%m
k<n||j<11||(e[m+k]=?\\;e[m-1-k]=?/)
j>12&&(e[-1]=?\\;e[0]=?/)
j<3&&(e[n+l=(i-n*2)%(n*4)]=?\\;e[5*n-l-1]=?/)  
puts e}}

मैं विशेष रूप से उस रैपराउंड तकनीक से प्रसन्न हूं जो मैं सभी को आकर्षित करता था \ को एक ही अभिव्यक्ति के साथ सिर में (और इसी तरह /)

परीक्षण कार्यक्रम में अपराजित

f=->n{
  #loop line by line, 0..16*n-1
  (16*n).times{|i|

  #convenience variables
  j=i/n
  m=n*3

  #setup a string of spaces
  e=' '*6*n

  #draw the ___ at top and bottom of shaft
  i%(11*n)==m-1&&e[2*n..4*n-1]=?_*2*n
  #draw the |, overwriting the _ in the bottom corners
  j%14>2&&e[m+n-1]=e[m-n]=?|

  #draw the diagonal fletching
  k=(i-n)%m
  k<n||j<11||(e[m+k]=?\\;e[m-1-k]=?/)

  #draw the ends of the fletching (note index -1, meaning last character in string)
  j>12&&(e[-1]=?\\;e[0]=?/)

  #draw the arrow head, wrapping round with %(n*4)
  j<3&&(e[n+l=(i-n*2)%(n*4)]=?\\;e[5*n-l-1]=?/)

  #output the line  
  puts e}
}

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