একটি এএসসিআইআই ডাবল হেলিক্স আঁকুন


55

একটি প্রোগ্রাম লিখুন যা স্টিডিন বা কমান্ড লাইনের মাধ্যমে একটি পূর্ণসংখ্যার এন গ্রহণ করে।

যদি N 0 হয় তবে একক বর্ণ Oঅবশ্যই প্রসারিত হবে।


যদি এন ইতিবাচক হয় তবে এই অনুভূমিক ASCII আর্ট ডাবল হেলিক্স , অঙ্কিত এন বিভাগগুলি প্রশস্ত, অবশ্যই মুদ্রিত করা উচিত।

যদি এন 1 হয়, আউটপুটটি হ'ল:

 /\
O  O
 \/

যদি এন 2 হয় তবে আউটপুটটি হ'ল:

 /\ /\
O  /  O
 \/ \/

যদি এন 3 হয় তবে আউটপুটটি হ'ল:

 /\ /\ /\
O  /  /  O
 \/ \/ \/

যদি এন 4 হয়, আউটপুটটি হ'ল:

 /\ /\ /\ /\
O  /  /  /  O
 \/ \/ \/ \/

প্যাটার্নটি বৃহত্তর এন এর জন্য ঠিক একই পথে অব্যাহত রয়েছে Note দ্রষ্টব্য যে ফরোয়ার্ড স্ল্যাশ ( /) Oপ্রান্তগুলি বাদে হেলিক্স ক্রস করে সমস্ত স্থানে অবশ্যই ব্যবহার করা উচিত ।


যদি এন নেতিবাচক হয় তবে এই উল্লম্ব ASCII আর্ট ডাবল হেলিক্স, টানা -N বিভাগগুলি লম্বা, প্রিন্ট করা আবশ্যক।

যদি এন -1 হয় তবে আউটপুটটি হয়:

 O
/ \
\ /
 O

যদি N -2 হয় তবে আউটপুটটি হয়:

 O
/ \
\ /
 \
/ \
\ /
 O

যদি N -3 হয় তবে আউটপুটটি হয়:

 O
/ \
\ /
 \
/ \
\ /
 \
/ \
\ /
 O

যদি N -4 হয় তবে আউটপুটটি হয়:

 O
/ \
\ /
 \
/ \
\ /
 \
/ \
\ /
 \
/ \
\ /
 O

প্যাটার্নটি ছোট এন এর জন্য ঠিক একই পথে অব্যাহত রয়েছে Note দ্রষ্টব্য যে পিছনের স্ল্যাশগুলি ( \) অবশ্যই Oশেষগুলি ব্যতীত হেলিক্স ক্রস সমস্ত স্থানে ব্যবহার করতে হবে ।

বিস্তারিত

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

9
উজ্জ্বল প্রশ্ন!
জোশপবারন

এটি আমার কাছে মনে হয় যে এন = 0 এর জন্য এটি মুদ্রণ করা সুবিধাজনক হতে পারে <spc>O<spc> বা \nO\n। আনসেসারি লিডিং হোয়াইটস্পেস অনুমোদিত?
স্তর নদী

1
print "."হেলিক্স দেখতে জুম করুন। * নোডনড *
ডেভিড রিচার্বি

@ স্টিভেরিলিল এটি সহায়ক হতে পারে তবে এখন অনেক উত্তর আছে আমি নিয়মটি পরিবর্তন করতে চাই না। আমি স্পষ্ট করে দিয়েছি যে প্যাটার্নের অংশ নয় এমন নেতৃস্থানীয় স্থানগুলি অনুমোদিত নয়।
ক্যালভিনের

উত্তর:


16

সিজেম, 56 55 53 52 50 বাইট

S'O:Ori:X0>"\/"=" / \\\ / "+Xz*1>O]s3/X"z"<~N*X\O?

Size আকার দেখুন! মূল অপরাধীরা হ'ল উল্লম্ব হেলিক্সের পরিবর্তে N = 0বিশেষ মামলা এবং তার \পরিবর্তে /

এটা যেভাবে কাজ করে:

S'O:O                                  e# Put a space on stack. Now put char O on stack
                                       e# and assign it to variable O. This is not really
                                       e# helping in golfing as using 'O everywhere is
                                       e# same number of bytes
     ri:X                              e# Read input as in integer and store it in X
         0>"\/"=                       e# If X is greater than 0, choose /, otherwise \
                " / \\\ / "            e# Put this string on stack
                           +           e# Append to chosen \ or /
                            Xz*        e# Repeat it abs(X) times
1>                                     e# Remove the first character from repeated string
  O]                                   e# Put char O on stack, wrap everything in an array
                                       e# and convert it to string.
    3/                                 e# Split the string into parts of length 3
      X"z"<~                           e# If X is positive, transpose the array to get a
                                       e# horizontal helix, otherwise it would be vertical
            N*                         e# Join the parts with newline
              X\O?                     e# If X was 0, then pick char O instead of this
                                       e# final joined string.

কোডটি তিন ভাগে বিভক্ত:

  • অংশ X0>"\/"=" / \\\ / "+পারেন দেয় "/ / \\\ / "বা "\ / \\\ / "যা অত্যন্ত গুরুত্বপূর্ণ হিসাবে হেলিক্স কেবল বিকল্প গঠিত "/ \"এবং "\ /"পারেন যোগ " / "বা " \ "। উদাহরণস্বরূপ, আপনি যদি ইনপুটটিকে বিবেচনা করেন 2, তবে আপনার চূড়ান্ত পুনরাবৃত্তি স্ট্রিংটি হবে "/ / \\ / / / \\ / "(নিস্তার ছাড়াই)। স্পষ্টতই এটির /শুরুতে অতিরিক্ত এবং শেষের দিকে অতিরিক্ত স্থান রয়েছে।
  • দ্বিতীয় অংশটি অতিরিক্ত জিনিস এবং বিভাজন সহ উপরের স্ট্রিংটি সংশোধন করা। একটি ইনপুট জন্য 2, নতুন লাইন ছাড়া কাঙ্ক্ষিত চূড়ান্ত স্ট্রিং হবে " O / \\\ / / / \\\ / O", কিন্তু উপরের পয়েন্ট পরে, আমরা কেবল আছে "/ / \\\ / / / \\\ / "। সুতরাং আমরা প্রথম অক্ষরটি সরিয়ে ফেলি, একটি স্পেস যোগ করি এবং 'Oশুরুতে এবং অন্যটি 'Oশেষে। তারপরে আমরা শেষ পর্যন্ত এটি 3 এর অংশে বিভক্ত করেছি
  • অবশেষে, আমরা স্থির হিলিক্সের জন্য এই বিভক্ত স্ট্রিংটি স্থানান্তর করব কিনা তা আমরা স্থির করি; অংশগুলি নিউলাইন দ্বারা যোগদান করুন; এবং এটি এবং একটি একক অক্ষরের মধ্যে চয়ন 'Oকরুন (ইনপুট 0 কেসের জন্য)

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


10

জাভাস্ক্রিপ্ট (ES6), 126 132 133

A=n=>(F=(f,j='')=>f+(j+f).repeat(n-1),n>0?F(' /\\')+`
o${F('  ','/')}o
`+F(' \\/'):(n=-n)?` o${F(`
/ \\
\\ /
`,' \\')} o`:'o') 

// Test
for(i=0;i<10;i++)
  P.innerHTML = P.innerHTML + A(i)+'\n\n\n',
  N.innerHTML = N.innerHTML + A(-i)+'\n\n\n'
pre { 
  font-size: 10px;
  line-height: 9px;
}
<table>
<tr><th>Positive</th><th>Negative</th></tr>
<tr><td valign=top><pre id=P></pre></td><td><pre id=N></pre></td></tr>
</table>

টেম্পলেটেড স্ট্রিং ব্যবহার করে, নতুন লাইনের গণনা।

আরও পঠনযোগ্য

A=n=>(
  F=(f,j='')=>f+(j+f).repeat(n-1),
  n > 0 ? F(' /\\') + '\no' + F('  ','/') + 'o\n'+F(' \\/')
  : (n=-n) ? ' o' + F('\n/ \\\n\\ /\n',' \\')'+' o':'o'
)  

1
এবং আমি ভেবেছিলাম আমি জেএসের সাথে ভাল আছি ... কি n=>(করছে? আমি আগে কখনও অপারেটর দেখিনি বা ব্যবহার করি নি।
কোন কাজ

@ ইউনওয়ার্ক এটি একটি ফাংশন তৈরির জন্য একটি ES6 বৈশিষ্ট্য, এটি এখনও কেবল ফায়ারফক্সে উপলব্ধ। দেখুন developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/...
edc65

এটি কিছু দুর্দান্ত জিনিস, খুব শীঘ্রই ES6 সন্ধান করা উচিত। স্পষ্ট করার জন্য ধন্যবাদ!
কোন কাজ

8

পাইথ, 52 বাইট

M[Jj"/\\"*hGdjP*G+*2dH*2\O_J)?jb?gQ\/>Q0msdCg_Q\\Q\O

প্রদর্শন.

ব্যাখ্যা:

প্রথম বিভাগ, M[Jj"/\\"*hGdjP*G+*2dH*2\O_J)একটি ফাংশন সংজ্ঞায়িত করে g, যা দুটি ইনপুট নেয়। প্রথম ইনপুট,, Gব্যবহারের পুনরাবৃত্তির সংখ্যা is এটি ইনপুটটির পরম মান। দ্বিতীয় ইনপুট,, Hসর্পিলগুলির কেন্দ্রস্থলে রাখার চরিত্র।

ফাংশনটি 3 টি উপাদান তালিকা প্রদান করে, যা ইতিবাচক সর্পিলের 3 টি লাইন এবং negativeণাত্মক সর্পিলের 3 টি কলাম রয়েছে।

প্রথম উপাদান দ্বারা সংজ্ঞায়িত করা হয় Jj"/\\"*hGd। স্পেসের *hGdস্ট্রিং G+1j"/\\"*hGdএই স্ট্রিংটিকে "/\"ডিলিমেটার হিসাবে যুক্ত করে। Jশুরুতে ভবিষ্যতে ব্যবহারের জন্য পরিসমাপ্তি মান সংরক্ষণ করে।

দ্বিতীয় উপাদানটি হ'ল jP*G+*2dH*2\O। আমরা দিয়ে শুরু +*2dH। এটি ইনপুট চরিত্রের পরে দুটি স্পেস রয়েছে। তারপরে, আমরা সেই স্ট্রিংয়ের Gসাথে পুনরাবৃত্তি করি *G। তারপরে, আমরা এর সাথে এর চূড়ান্ত চরিত্রটি সরিয়ে ফেলি P। অবশেষে, আমরা দুটি Oঅক্ষর দিয়ে এই স্ট্রিংটিকে ঘিরে j ... *2\O

তৃতীয় উপাদানটি উত্পন্ন হয় _J। এটি কেবল প্রথম লাইনের বিপরীত।

পরের অংশটি, ?jb?gQ\/>Q0msdCg_Q\\Q\Oধনাত্মক, নেতিবাচক এবং শূন্য তিনটি পৃথক সম্ভাবনার মধ্যে নির্বাচন করে। প্রথম যদি-তারপর শর্তাবলীর উপর Q, ইনপুট। >Q0ইনপুটটি ইতিবাচক কিনা তা দ্বিতীয় শর্ত ।

যদি Qশূন্য হয় তবে, \Oঅক্ষরটি Oমুদ্রিত হয়।

যদি Qননজারো হয় তবে আমরা নতুন লাইনে দ্বিতীয় তৃতীয় ফলাফলের সাথে যোগদান করি এবং এটি মুদ্রণ করি jb। যদি Qইতিবাচক হয়, তালিকা যোগদান এবং মুদ্রিত হয় gQ\/, g(Q,"/")

যদি Qনেতিবাচক হয় তবে তালিকাটি যুক্ত হয়ে মুদ্রিত হয় msdCg_Q\\। আমরা g_Q\\যা দিয়ে শুরু করি g(-Q,"\")। তারপরে আমরা সারি এবং কলামগুলি এর সাথে স্থানান্তর করি Cmsdঅক্ষরের ফলস্বরূপ টিউপসগুলিকে স্ট্রিংগুলিতে পরিণত করে, নতুন লাইনে যোগদানের জন্য প্রস্তুত এবং মুদ্রিত।


6

পাইথন 2, 118

n=input()
a=[' O '[n==0:]]+['/ \\','\\ /','  /\\ '[n<0::2]]*abs(n)
a[-1]=a[0]
for x in[a,zip(*a)][n>0]:print''.join(x)

স্ট্রিংয়ের তালিকা থেকে উল্লম্ব ডাবল হেলিক্স তৈরি করে এবং অনুভূমিকটি পেতে এটি স্থানান্তর করে। আমি নিশ্চিত এটির উন্নতি হতে পারে।


1
চমৎকার কাজ. একটি জিনিস: এটি 0 নম্বরের চেয়ে মূল চিঠি "O" হওয়া উচিত
অ্যালেক্স এ।

@AlexA। ধন্যবাদ - আমি এটি পুরোপুরি মিস করেছি।
জিআরসি

5

জাভা, 500 488 বাইট

আমার প্রথম চেষ্টা, এবং দুর্ভাগ্যক্রমে এটি বর্তমান নেতার চেয়ে 10 * বেশি দীর্ঘ :( কারও কি কোনও টিপস আছে (আলাদা ভাষা ব্যবহার ব্যতীত)?

import java.util.*;class t{public static void main(String[] args){Scanner sc=new Scanner(System.in);int n=Integer.parseInt(sc.nextLine());if(n>0){for(int i=0;i<n;i++)System.out.print(" /\\");o("");System.out.print('o');for(int i=0;i<n-1;i++)System.out.print("  /");o("  o");for(int i=0;i<n;i++)System.out.print(" \\/");}else if(n<0){o(" o ");for(int i=0;i<-n-1;i++){o("/ \\");o("\\ /");o(" \\ ");}o("/ \\");o("\\ /");o(" o ");}else o("o");}static void o(String s){System.out.println(s);}}

5
পিপিসিজিতে আপনাকে স্বাগতম! এটি জাভা সহ সিজেএমের মতো গল্ফিং ভাষা বন্ধ করার জন্য আপনি দশটি গুণক হিসাবে গুরুত্বপূর্ণ। ;) আনন্দটি একই ভাষায় উত্তরগুলি, বা অনুরূপ শব্দভাণ্ডারের ভাষাগুলিতে এবং আপনার ভাষার নতুন শিখর শিখার চেষ্টা করে। আমি জাভাতে গল্ফ করার সাথে তেমন পরিচিত নই তবে আপনি অবশ্যই একটি ছোট বর্গের নাম এবং ধারাবাহিকভাবে 1-বর্ণের পরিবর্তনশীল নাম সহ কিছু বাইট সংরক্ষণ করতে পারেন। এছাড়াও, আপনি প্রতিবার import System.*লেখার জন্য কেবল বা কিছু সংরক্ষণ করতে পারবেন না System?
মার্টিন ইন্ডার

প্রকৃতপক্ষে তিনি পারেন, import static java.lang.System.*;বা তিনি স্ট্যান্ডার্ড আউটপুট স্ট্রিমটিকে একটি পরিবর্তনশীল হিসাবে সংরক্ষণ করতে পারেন (যদিও, আমি জানি না যে এটি এই ক্ষেত্রে সংরক্ষণ বা বাধা দিত কিনা, যাচাই না করে)।
ব্লো 12'15

জাভা জন্য +1। আপনি scপরিবর্তনশীল থেকে মুক্তি পেতে পারেন যেহেতু এটি কেবল একবার ডাকা হয়। 14 বাইট অফ শেভ।
শীর্ষে

আমি জানি এটি প্রায় তিন বছর হয়েছে, তবে বেশ কয়েকটি জিনিস গল্ফ করা যেতে পারে: class M{public static void main(String[]a){int n=new Integer(new java.util.Scanner(System.in).next()),i=n;if(n>0){for(;i-->0;)o(" /\\");o("\no");for(i=n;i-->1;)o(" /");o(" o\n");for(i=0;i++<n;)o(" \\/");}else if(n<0){o(" o \n");for(i=0;i++<~n;)o("/ \\\n\\ /\n \\ \n");o("/ \\\n\\ /\n o \n");}else o("o\n");}static<T>void o(T s){System.out.print(s);}}( 352 বাইট ) এটি অনলাইনে চেষ্টা করে দেখুন।
কেভিন ক্রুইজসেন

1
এছাড়াও, এই চ্যালেঞ্জের জন্য একটি ফাংশন অনুমোদিত, তাই জাভা 8+ ল্যাম্বদা ব্যবহার করার সময় এটি 251 বাইট হতে পারে : n->{int i=n;if(n>0){for(;i-->0;)o(" /\\");o("\no");for(i=n;i-->1;)o(" /");o(" o\n");for(i=0;i++<n;)o(" \\/");}else if(n<0){o(" o \n");for(i=0;i++<~n;)o("/ \\\n\\ /\n \\ \n");o("/ \\\n\\ /\n o \n");}else o("o\n");};<T>void o(T s){System.out.print(s);} অনলাইনে চেষ্টা করে দেখুন।
কেভিন ক্রুইজসেন

5

হাস্কেল, 156 বাইট

h 0="O"
h n|n>0=' ':c n "/\\ "++"\nO"++c(n-1)"  /"++"  O\n "++c n "\\/ "
   |0<1=" O\n/ \\\n"++c(-n-1)"\\ /\n \\\n/ \\\n"++"\\ /\n O"
c x=concat.replicate x

তারপরে আপনি এটি লিখতে পারেন:

*Main> putStrLn $ h 1
 /\ 
O  O
 \/ 
*Main> putStrLn $ h 0
O
*Main> putStrLn $ h (-1)
 O
/ \
\ /
 O
*Main> putStrLn $ h 3
 /\ /\ /\ 
O  /  /  O
 \/ \/ \/ 
*Main> putStrLn $ h (-3)
 O
/ \
\ /
 \
/ \
\ /
 \
/ \
\ /
 O
*Main>

2
আপনি এর 1<2পরিবর্তে কিছু লিখতে পারেন Trueএবং বাইট সংরক্ষণ করতে পারেন ।
মেরিনাস

@ মারিনাস: আপডেট হয়েছে, অনেক ধন্যবাদ।
উইলেম ভ্যান অনসেম

4

সি #, 242 241 238 230 222 219 বাইট

মার্টিনের মন্তব্যে উত্সাহিত , এখানে এরকম কিছুতে আমার প্রথম প্রচেষ্টা:

string h(int n){int x=0;string p="",r=n==0?"O":p;if(n>0){for(;x++<n;){r+=" /\\";p+=" \\/";}r+="\nO  ";for(;x-->2;)r+="/  ";r+="O\n"+p;}else if(n<0){r+=@" O
/ \
";for(--x;x-->n;)r+=@"\ /
 \
/ \
";r+=@"\ /
 O";}return r;}

আরও পঠনযোগ্য:

string h(int n)
{
    int x = 0;
    string p = "",
            r = n==0 ? "O" : p;
    if (n > 0) {
        for (; x++ < n;) {
            r += " /\\";
            p += " \\/";
        }
        r += "\nO  ";
        for (; x-- > 2;) r += "/  ";
        r += "O\n" + p;
    }
    else if(n<0) {
        r += @" O
/ \
";
        for (--x; x-- > n;) r += @"\ /
 \
/ \
";
        r += @"\ /
 O";
    }
    return r;
}

3

সি # 199 197 196 বাইট

string f(int n){var u=n<0;int m=u?-n:n;string a="",b=" O ";for(;m-->0;)b+="\n/ \\\n\\ /\n "+(m==0?"O ":u?"\\ ":"/ ");for(;++m<3;)a+=string.Concat(b.Split('\n').Select(s=>s[m]))+"\n";return u?b:a;}

অবরুদ্ধ সংস্করণ:

    string f(int n)
    {
        var u = n < 0;
        int m = u ? -n : n;
        string a = "", b = " O ";
        for (; m-- > 0; ) b += "\n/ \\\n\\ /\n " + (m == 0 ? "O " : u ? "\\ " : "/ ");
        for (; ++m < 3;) a += string.Concat(b.Split('\n').Select(s => s[m])) + "\n"; 
        return u ? b : a;
    }

চরিত্রের ট্রান্সপোজড ম্যাট্রিক্স রেন্ডার করে উল্লম্ব প্রদর্শন থেকে অনুভূমিক প্রদর্শন তৈরির ধারণা।


সুন্দর - আমার কাছে এখনও সি # তে স্থানান্তর উত্তর চেষ্টা করার সুযোগ ছিল না। উল্লেখ্য "\" এবং "/" কুপথ সমন্নয়ের জন্য বৃত্তাকার আছে, এবং আপনি পরিবর্তন করে কয়েক বাইট সংরক্ষণ করতে পারবেন for(;m>0;--m)করার for(;m-->0;)উভয় লুপ মধ্যে
জেমস থর্প

এই স্ট্রিংটি: "\n/ \\\n\\ /\n "আমার উত্তরের পদ্ধতি অনুসারে সংক্ষিপ্তও করা যেতে পারে - যেমন ব্যবহার @"...", যেখানে প্রতিটি "\\" "\" হয়ে যায় এবং প্রতিটি "\ n" একটি আসল নিউলাইন হয়ে যায়
জেমস থর্প

ডান, সমাধানটি সংক্ষিপ্ত করতে আমি ভেরিয়েবলটি প্রবর্তন করেছি, তবে ক্রসওভারগুলির পরীক্ষাটি উল্টাতে ভুলে গিয়েছি। লুপের শর্তটি ছোট করার ধারণার জন্য ধন্যবাদ (যদিও আমি দ্বিতীয় লুপটি সংক্ষিপ্ত করতে পারি না কারণ এম এর পরে 0 এর সমান হয় এবং আমি এটি সূচক হিসাবে ব্যবহার করি)। নিউলাইন ট্রিকের জন্য, এটি উইন্ডোগুলির নীচে কাজ করে না কারণ বি.স্প্লিট ('\ n') কে বি.স্প্লিট ('\ n', '\ r') এ পরিবর্তন করা উচিত যার জন্য 5 টি অক্ষর ব্যয় হয় এবং কেবল 3 টি সংরক্ষণ করে।
ভিনসেন্ট রিপল

আহ মোটামুটি - আমার ধারণা আমি খেয়াল করি নি কারণ আমি কোনও কিছু বিভক্ত করছি না। আমিও শুধু আপনার সুইচ করতে পারে বিক্ষোভ bool uজন্য var uঅন্য পুরো বাইট জন্য :)
জেমস থর্প

যেহেতু আপনার সংস্করণটি কোনও ভের ব্যবহার করেনি, তাই আমি কোনও অনুপযুক্ত সুবিধা পেতে চাই না। :)
ভিনসেন্ট রিপল

3

পাইথন 3, 118 বাইট

x=int(input())
print("O"if x==0else" /\\"*x+"\nO "+" / "*(x-1)+" O\n"+" \\/"*x if x>0else(" O"+"\n/ \\\n\\ /\n \\"*-x)[:-1]+"O")

আমার প্রথম কোড গল্ফ জমা, যাতে এটি মোটেও চিত্তাকর্ষক নাও হতে পারে।

তিনটি দৃশ্য পৃথক করতে কেবল পাইথনের ... যদি ... অন্যথায় ... টের্নারি অপারেটর ব্যবহার করুন। এটি মুদ্রণের জন্য কয়েকটি নির্দিষ্ট স্ট্রিংকে একটি নির্দিষ্ট সংখ্যক বার বার করার একটি স্ট্রিং দেয়।


2

জুলিয়া, 229 বাইট

ওহ, এই উপায়, উপায় খুব বড়। এটি এখন পর্যন্ত দীর্ঘতম উত্তরটি বড় ব্যবধানে। আমি সম্ভবত স্ট্রিংটি মুদ্রণের পরিবর্তে ফিরিয়ে বা ম্যাট্রিক্স পদ্ধতির পুরোপুরি এড়িয়ে গিয়ে অনেক কিছু সঞ্চয় করতে পারি। আমি পরে এটি পরীক্ষা করব।

n->(if n==0 println("O")else m=abs(n);A=B=reshape(split(" / "*(n>0?"/":"\\")*" \\\\ /",""),(3,3));E=[" ";"O";" "];if m>1for i=2:m B=hcat(B,A)end end;B[:,1]=E;B=hcat(B,E);C=n>0?B:B';for i=1:size(C,1) println(join(C[i,:]))end end)

এটি একটি ল্যাম্বডা ফাংশন তৈরি করে যা একটি একক পূর্ণসংখ্যা নেয় এবং যথাযথভাবে ফর্ম্যাট করা ডাবল হেলিক্স মুদ্রণ করে। এটি কল করার জন্য, এটির একটি নাম দিন f=n->(...)

অবহেলিত + ব্যাখ্যা:

function f(n)
    if n == 0
        println("O")
    else
        m = abs(n)

        # Split the string into a 3x3 matrix with a slash on the left,
        # or a backslash for n < 0
        A = B = reshape(split(" / " * (n > 0 ? "/" : "\\") * " \\\\ /", ""), (3, 3))

        # We can get the O lines where needed by appending this
        E = [" "; "O"; " "]

        # Grow the helix by abs(n)
        if m > 1
            for i = 2:m
                B = hcat(B, A)
            end
        end

        # Exchange the first column for E
        B[:,1] = E

        # Add E onto the right
        B = hcat(B, E)

        # If n is negative, we actually want the transpose
        C = n > 0 ? B : B'

        # Print the rows of C
        for i = 1:size(C, 1)
            println(join(C[i,:]))
        end
    end
end

কয়েকটি উদাহরণ:

julia> f(1)
 /\
O  O
 \/

julia> f(-2)
 O 
/ \
\ /
 \
/ \
\ /
 O


2

পার্ল, 91 97

ট্রান্সপোসিং শেষ পর্যন্ত ব্যয়বহুল হিসাবে প্রমাণিত।

#!perl -n
print/-/?"\0\23"^" \\
/ \\
\\ /
"x-$_." O":-$_?" /\\"x$_.("*`"^" / "x$_." O
"." \\/"x$_):O

পূর্ববর্তী সমাধান:

#!perl -n
$".="`"^"/ 
\\ /
/ \\
 "x abs.O;print/-/?$"=~y!/\\!\\/!r:/^0/?O:map{($"=~/^.{$_}(.)/mg,$/)}2,1,0

আমাকে পরীক্ষা করুন


এটা সত্যিই মিষ্টি। আপনি প্রতিস্থাপন আরো দুটি বাইট সংরক্ষণ করতে পারবেন /^0/?O:etcসঙ্গে$_?etc:O
আলেকজান্ডার-ব্রেট

@ আলেকজান্দার-ব্রেট এর জন্য ইনপুটটিতে কোনও ইওএল লাগবে না, কারণ "0 \ n" সত্য হিসাবে মূল্যায়ন করে।
নটকি

আপনি সম্ভবত স্টিডিনে কোনও ইওএল প্রয়োজনের সাথে পালাতে পারবেন :) এছাড়াও, আপনি 4 দিয়ে সংরক্ষণ করতে পারবেন$".="\23"^"\\ / \\ \\ / "x abs."O ";print/-/?$":/^0/?O:map{reverse$/,$"=~/(.).{$_}$/mg}0..2
আলেকজান্দার-ব্রেট

@ আলেকজান্দার-ব্রেট, এটি ইতিবাচক সংখ্যার জন্য কেন্দ্রের লাইনে ব্যাকস্ল্যাশ তৈরি করে, যা ভুল, সঠিক?
নটকি

ওহে মানুষ, এটাই আমি দ্রুত এবং আলগা খেলি। আপনি একদম ঠিক বলছেন. এছাড়াও, আমি কি উল্লেখ করেছি যে আমি সত্যিই এই অ্যারে-ট্রান্সপোজ ধারণাটি পছন্দ করি।
আলেকজান্ডার-ব্রেট

2

স্কিম, 379 বাইট

কোড গল্ফ এবং দুর্ভাগ্যক্রমে, আমার মধ্যে দীর্ঘতম প্রচেষ্টাগুলির মধ্যে আমার প্রথম প্রচেষ্টা। :(

(define (h i) (define a string-append) (define (k n p q s e) (cond ((= i n) (p s (k (q n 1) p q s e))) ((= 0 n) e) (else (p `("\\ /" ,(if (> i 0) " / " " \\") "/ \\") (k (q n 1) p q s e))))) (if (= i 0) "O\n" (apply a (map (lambda (s) (a s "\n")) (if (> i 0) (k i (lambda (x y) (map a x y)) - '(" /" "O " " \\") '("\\" " O" "/")) (k i append + '(" O" "/ \\") '("\\ /" " O")))))))

Ungolfified:

(define (h i)
  (define a string-append)

  (define (k n p q s e)
    (cond ((= i n) (p s (k (q n 1) p q s e)))
          ((= 0 n) e)
          (else (p `("\\ /" ,(if (> i 0) " / " " \\") "/ \\")
                   (k (q n 1) p q s e)))))

  (if (= i 0) "O\n"
      (apply a (map (lambda (s) (a s "\n"))
                    (if (> i 0)
                        (k i (lambda (x y) (map a x y)) -
                           '(" /" "O " " \\")
                           '("\\" " O" "/"))
                        (k i append +
                           '(" O" "/ \\")
                           '("\\ /" " O")))))))

2

জাভা, 282

বিশেষ করে চমৎকার পরিবর্তনশীল নাম সহ আমার প্রথম পদ্ধতির:

class H{public static void main(String[]_){int N=Integer.parseInt(_[0]),í=N;String ì="/ \\\n\\ /\n",I=" o \n",i="",l=I;for(;í-->0;)i+=" /\\";i+="\no";for(í=N;í-->1;)i+="  /";i+="  o\n";for(í=N;í-->0;)i+=" \\/";for(í=1;í++<-N;)l+=ì+" \\ \n";System.out.println(N<0?l+ì+I:N>0?i:"o");}}

আমি কেন এটি করছি তা আমার কোনও ধারণা নেই। কিছু বিনোদনমূলক জিনিস হতে হবে।


2

জাভা, 317

আমার প্রথম কোড গল্ফ চেষ্টা।

public class t{public static void main(String[]e){int n=Integer.parseInt(e[0]);String s=new String(new char[n==0?0:(n>0?n:-n)-1]),u="\0";System.out.print(n==0?"O":n>0?s.replace(u," /\\")+" /\\\nO"+s.replace(u,"  /")+"  O\n"+s.replace(u," \\/")+" \\/":" O \n/ \\\n"+s.replace(u,"\\ /\n \\ \n/ \\\n")+"\\ /\n O \n");}}

1

পাইথন 3, 165 বাইট

x,a,b,c,d=int(input())-1,'\ /',' / ','/ \\','\ /\n \\\n/ \\\n'
print([[' O\n/ \\\n'+d*abs(x+2)+'\ /\n O',' /'+a*x+'\\\nO '+b*x+' O\n \\'+c*x+'/'],'OO'][x==-1][x>-1])

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


1

পার্ল, 193 197 187 180 166 163 বি

-N কমান্ডলাইন স্যুইচের জন্য 1 বাইট জরিমানা। সাথে চালান echo 1|perl -M5.10.0 -n scratch.pl:

$_*=3;$s=($m=abs)==$_;$_?map{say if$_=join'',map{(map[/./g]," O ",(('/ \\', '\\ /',$s?' / ':' \\ ')x$m)[0..$m-2]," O")[$s?$_:$j][$s?$j:$_]}0..$m;$j++}0..$m:say'O'

সাদা স্থান সহ:

$_ *= 3;
$s = ($m = abs) == $_;
$_ ? map{
      say if $_=join '', map {
       ( map[/./g],
          " O ",
          (('/ \\', '\\ /',$s?' / ':' \\ ') x $m)[0..$m-2],
          " O"
        )[$s ? $_ : $j][$s ? $j : $_]
       }0..$m;
      $j++
    } 0..$m
  : say 'O'

এটি কি প্রচলিত যা -M5.10.0আপনার বাইট গণনায় অবদান রাখে না? say হয় কোড গলফ জন্য কুশলী ...
xebtl

@ দ্যসইটিআইস ব্ল্যাকনট বলেছেন যে এটি ছিল (শীর্ষ মন্তব্য কোডগল্ফ.স্ট্যাকেক্সেক্সঞ্জ . com/a/49762/19039 অন) - আমি ধরে নিয়েছি এটি একটি ভাষার সংস্করণ কারণ।
আলেকজান্ডার-ব্রেট

1

পিএইচপি, 341

$s='';$n=$argv[1];$l=PHP_EOL;if($n>0){for($i=0;$i<$n;$i++)$s.=" /\\";$s.=$l;for($i=0;$i<$n;$i++){if($i==0)$s.='o';if($i<$n-1)$s.='  /';if($i==$n-1)$s.='  o';}$s.=$l;for($i=0;$i<$n;$i++)$s.=" \\/";}else{$n=abs($n);for($i=0;$i<$n;$i++){if($i== 0)$s.=' o '.$l;$s.="/ \\".$l."\\ /".$l;if($i < $n-1)$s.=' \\ '.$l;if($i==$n-1)$s.=' o '.$l;}}echo $s;

অবারিত সংস্করণ

$s = '';
$n = $argv[1];
echo PHP_EOL;
if($n > 0)
{
    for($i=0;$i<$n;$i++)
    {
        $s.=" /\\";
    }
    $s.=PHP_EOL;

    for($i=0;$i<$n;$i++)
    {
        if($i==0) { 
            $s.='o';
        }
        if($i < $n-1) {
            $s.='  /';
        }    
        if( $i == $n-1)
        {
            $s.='  o';
        }
    }
    $s.=PHP_EOL;

    for($i=0;$i<$n;$i++)
    {
        $s.=" \\/";
    }
} else
{
    $n = abs($n);
    for($i=0;$i<$n;$i++)
    {
        if($i == 0) {
            $s.=' o '.PHP_EOL;    
        }    
        $s.="/ \\".PHP_EOL."\\ /".PHP_EOL;
        if($i < $n-1) {
            $s.=' \\ '.PHP_EOL;
        }    
        if( $i == $n-1) {
            $s.=' o '.PHP_EOL;
        }    
    }    
}

echo $s;

1

জাভা 377 384 বাইট

class F{public static void main(String[] a){int n=Integer.parseInt(a[0]);if(n>0){for(int i=0;i<n;i++)p(" /\\");p("\n");for(int i=0;i<n;i++){if(i==0)if(n>1)p("O  ");else p("O  O");else if(i==n-1)p("/  O");else p("/  ");}p("\n");for(int i=0;i<n;i++){p(" \\/");}}else{p(" O\n");for(int i=0;i<Math.abs(n);i++){p("/ \\\n\\ /\n O\n");}}}static void p(String s){System.out.print(s);}}

1

সি ++ 269 262 258

#include <string>
#include <iostream>
int main(){int i,j;std::cin>>i;std::string s,u,t;if(i>0){for(j=i;j;j--){s+=" /\\";t+="/  ";u+=" \\/";}t[0]='O';t+="O";s=s+'\n'+t+'\n'+u;}else{for(j=i;j;j++)s+=" \\\n/ \\\n\\ /\n";s[1]='O';s+=" O";}std::cout<<(i==0?"O":s);}

1

আর, 228 201

n=scan();z=cat;f=`for`;if(!n)z("O");if(n>0){f(i,1:n,z(" /\\"));z("\nO  ");if(n>1)f(i,2:n,z("/  "));z("O\n");f(i,1:n,z(" \\/"))};if(n<0){z(" O\n");f(i,-n:1,{z("/ \\\n\\ /\n ");if(i>1)z("\\\n")});z("O")}

কোড গল্ফে আমার প্রথম প্রচেষ্টা। আমি মনে করি এটি কাজ করে তবে এটি সূক্ষ্ম নয়।

n=scan(); # enter number here
z=cat;
if(!n) z("O\n");
if(n>0){
  z(" ");
  for(i in 1:n) z("/\\ ");
  z("\nO");
  if(n>1){
    for(i in 2:n) z("  /")
  };
  z("  O\n ");
  for(i in 1:n) z("\\/ ")
};
if(n<0){
  z(" O \n");
  for(i in -n:1){
    z("/ \\\n\\ /");
    if(i>1) z("\n \\\n")
  };
z("\n O ")
}

1

গ্রোভী, 142 134 129 125 120 118

a=args[0]as int;b="\n/ \\\n\\ /\n ";print!a?"O":a>0?" /\\"*a+"\nO  ${"/  "*(a-1)}O\n"+" \\/"*a:" O$b${"\\$b"*(1-a)}O"

অবশেষে বেঁধে অজগর 2!


1

কাঠকয়লা , 28 24 22 বাইট

↙OF↔θ/¶\¶ \¶↗‖BO¿›N⁰⟲T

এটি অনলাইন চেষ্টা করুন! লিঙ্কটি কোডটির ভার্জোজ সংস্করণ। ব্যাখ্যা:

↙O

উপরের অংশটি মুদ্রণ করুন Oএবং কার্সারটিকে এক স্থান নীচে এবং বামে রেখে দিন।

F↔θ/¶\¶ \¶

স্ট্রিং মুদ্রণ করুন /, \এবং  \এবং ইনপুট পরম সংখ্যা মান পুনরাবৃত্তি করুন।

শেষের দিকে ফিরে যান \

‖B

হেলিক্সের ডানদিকে তৈরি করতে প্রতিফলিত করুন। আমি এখানে এটি করছি কারণ অন্যথায় এটি দ্ব্যর্থহীনভাবে বিশ্লেষণ করবে না।

O

\একটি দিয়ে শেষ লিখুন O

¿›N⁰⟲T

যদি ইনপুটটি ইতিবাচক হয় তবে ক্যানভাসটি ঘোরান।


1

ক্যানভাস , 33 32 30 বাইট

 /¶O:╴⤢╷\ /¶ \×+;↔+──╴0<?↷}╴‽O

এখানে চেষ্টা করুন!

ব্যাখ্যা:

 /¶O:                           push " /\¶O" twice
     ╴⤢╷                        push the absolute value of the input, -1
        \ /¶ /×                 repeat "\ /¶ /" horizontally that many times
               +                append that horizontally to one of the first strings
                ;               and get the other, reverse it
                 ↔+             and then append it to the result of above. Now the top part of the helix is done
                   ──           vertically palindromize with no mirroring (works because of a misake - it just doesn't overlap smartly)
                     ╴0<? }     if the input is less than 0
                         ↷        rotate clockwise the whole thing
                           ╴‽   if the input is falsy (aka 0)
                             O    push O; implicitly output the top of stack

0

সি ++, 352

সংক্ষিপ্ত উত্তরটি মোটেই নয়, তবে এখন পর্যন্ত সি ++ তে প্রথম :)

#include <iostream>
int main(int argc, char* argv[]){int a=argv[0][0]-'0';if(a==0){printf("o");}else if(a>0){for(int i =0; i < a;i++){printf(" /\\");}printf("\no");for(int i=0;i<a-1;i++){printf("  /");}printf("  o\n");for(int i=0;i<a;i++){printf(" \\/");}}else{printf(" o\n/ \\\n\\ /\n");for(int i=0;i>a+1;i--){printf("/ \\\n\\ /\n");}printf(" o");};}

এখানে এটি পরীক্ষার জন্য সাদা স্থান সহ সি ++ শেলের মধ্যে রয়েছে in


0

পার্ল 156

$==pop;print$=>0?' /\\'x$=.$/:'',$=>0?'O'.'  /'x$=."\bO
":'',$=>0?' \\/'x$=:'';print$=<0?" O":'';print"
/ \\
\\ /
 \\" for$=..-1;print$=<0?"\bO":!$=?"O":''

খুব সোজা এগিয়ে চেষ্টা, আমার দ্বিতীয় গল্ফ। আমার মনে হয় নিউলাইনগুলিকে 1 বাইট হিসাবে গণনা করা ঠিক?

এই সমস্ত অঞ্চলগুলিকে কীভাবে একসাথে যোগদান করবেন তা এখনই নির্ণয় করার জন্য :'';everywhere সমস্ত জায়গার সাথে আমার উন্নতির জন্য অনেক জায়গা আছে ।


0

সি, 189 বাইট

char*h="6Er66 e66Ee 6rE66",*v="6e6 E6r r6E 6r6 6e6",*z="e",*u;b,m,w,c,p;f(n){b=n<0;u=b?v:n?h:z;for(m=b?4:1,w=n*(b?-3:3);u[p];p+=++c%((w+2)*m)==w*m?m:p%(6*m)==m*4?-m*3:0)putchar(u[p++]-22);}

সাদা স্থান এবং নতুন লাইনের সাথে:

char *h="6Er66 e66Ee 6rE66",
     *v="6e6 E6r r6E 6r6 6e6",
     *z="e",
     *u;
b, m, w, c, p;
f(n) {
    b = n < 0;
    u = b ? v : n ? h : z;
    for (m = b ? 4 : 1, w = n * (b ? - 3 : 3);
         u[p];
         p += ++c % ((w + 2) * m) == w * m ? m : p % (6 * m ) == m * 4 ? - m * 3 : 0)
        putchar(u[p++] - 22);
 }

পদ্ধতির সম্পর্কে কিছু নোট:

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

0

পার্ল, 184 বাইট

$n=pop;$p=$n>0;$_=' \ /'x(1+abs$n*3);$n=$p?$n*4+1:3;$_=join'
',/.{$n}/g;$r=$p?'.':'.*
';s/($r$r)$r($r)/$1$2/g;$p and s/^\S|\S$/O/gm or s/^ \S $|(?<=^ )\S|\S $/O/g;y~\\/~/\\~if$p;print;

আমি ভেবেছিলাম এটি খুব খাটো হতে চলেছে! কয়েকটি বাইট সংরক্ষণ করার জন্য আমি কিছু সাধারণ জিনিস করতে পারি। পার্লে আমি সিরিয়াসভাবে প্রোগ্রাম করে ফেলেছি পাঁচ বছর হয়ে গেছে!


0

পিএইচপি, 155

$n=$argv[1];$r='str_repeat';$k="/ \\\n\\ /\n";echo$n>0?" /{$r('\ /',$n-1)}\\\nO{$r('  /',$n-1)}  O\n \\{$r('/ \\',$n-1)}/":" O\n{$r("$k \\\n",-$n-1)}$k O";

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