এন স্ল্যাব স্ল্যাশড স্ল্যাশ কেক


23

একটি প্রোগ্রাম বা ফাংশন লিখুন যা ইতিবাচক পূর্ণসংখ্যক এন।

যখন এন 1 হয়, আউটপুট

/\
\/

যখন এন 2 হয়, আউটপুট

/\/\
\/ /
/ /
\/

যখন এন 3 হয়, আউটপুট

/\/\/\
\/ / /
/ / /
\/ /
/ /
\/

যখন এন 4 হয়, আউটপুট

/\/\/\/\
\/ / / /
/ / / /
\/ / /
/ / /
\/ /
/ /
\/

বৃহত্তর এন এর জন্য প্যাটার্নটি চলতে থাকে, প্রতিবার এন বাড়ানো হলে একটি নতুন স্তর যুক্ত করা হয়।

  • "আউটপুট" এর অর্থ স্ল্যাশ প্যাটার্নটি মুদ্রণ করুন বা স্ট্রিং হিসাবে ফিরিয়ে দিন।
  • আউটপুটে একটি একক পেছনের নতুন লাইন অনুমোদিত।
  • আউটপুটে ট্রেলিং স্পেসগুলি অনুমোদিত তবে নেতৃস্থানীয় স্পেসগুলি নেই।

বাইটের মধ্যে সংক্ষিপ্ততম কোডটি জয়ী।

উত্তর:


10

পাইথ, 25 বাইট

j_+t.iJ*R"/ "SQ+L\\J*Q"/\

এটি অনলাইনে ব্যবহার করে দেখুন: বিক্ষোভ বা পরীক্ষার স্যুট

ব্যাখ্যা:

j_+t.iJ*R"/ "SQ+L\\J*Q"/\   implicit: Q = input number
             SQ             create the list [1, 2, ..., Q]
       *R"/ "               repeat "/ " accordingly to this numbers
      J                     assign this list of strings to J
               +L\\J        create a 2nd list, which contains the same strings
                            as in J, just with a "\" prepended
    .i                      interleave these two lists
   t                        remove the first element
                    *Q"/\   repeat the string "/\" Q times
  +                         append it to the list
 _                          reverse it
j                           print each string on a separate line

10

সিজেম, 32 30 29 28 বাইট

ri_"/\ /"2/f*)@,\f>+_z..e>N*

এটি এখানে পরীক্ষা করুন।

আমি রেটোকে তার সিজেএম উত্তরটি গল্ফটি সাহায্য করার চেষ্টা করছিলাম তবে এমন একটি সমাধান দিয়ে শেষ হয়েছিল যার সাথে তার কোনও সম্পর্ক নেই, তাই আমি বুঝতে পেরেছিলাম যে আমি নিজেই এটি পোস্ট করতে পারি।

ব্যাখ্যা

এটি আউটপুটের প্রতিসাম্য ব্যবহার করে। বিশেষত, আউটপুট তার ট্রান্সপোজের মতো একই।

প্রথমত, আমরা প্রথম N+1লাইনগুলি তৈরি করি , তবে বাম প্রান্ত ছাড়াই:

ri       e# Read input and convert to integer N.
_        e# Duplicate.
"/\ /"2/ e# Push an array with two strings: ["/\" " /"]
f*       e# Repeat each of the two strings N times. That gives the first two rows.
)        e# Detach the second row.
@,       e# Pull up the other copy of N and turn into range [0 1 ... N-1].
\f>      e# For each element i in that range, discard the first i characters of
         e# the second row.
+        e# Add all those lines back to the first row.

এখন আমরা নীচের গ্রিড প্রতিনিধিত্ব করে স্ট্রিংয়ের একটি অ্যারে পেয়েছি:

/\/\/\/\
 / / / /
/ / / /
 / / /
/ / /

এর ট্রান্সপোজ দেখে মনে হচ্ছে:

/ / /
\/ / 
/ / /
\/ / 
/ / /
\/ /
/ /
\/

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

_z   e# Duplicate the grid and transpose it.
..e> e# For each pair of characters in corresponding positions, pick the maximum.
N*   e# Join the lines by linefeed characters.

7

জাপট , 46 44 41 40 বাইট

Uo-U £Y?"\\/"sYv)+" /"pU-Y/2 :"/\\"pU} ·

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

অবহেলিত এবং ব্যাখ্যা

Uo-U mXYZ{Y?"\\/"sYv)+" /"pU-Y/2 :"/\\"pU} qR

প্রোগ্রামটির মূল U * 2আইটেমগুলির একটি তালিকা তৈরি করে , প্রতিটি প্যাটার্নের এক সারি ম্যাপ করে, তারপরে নতুন লাইনের সাথে যুক্ত হয়:

Uo-U    // Build an array of all integers in the range [-U, U).
mXYZ{   // Map each item X and index Y in this array with the following function.
 ...
} qR    // Join the resulting array with newlines.

যেমন প্যাটার্ন নিজেই, আমি এখানে এটি কীভাবে ভেঙেছি:

/\/\/\/\

\/   / / /
/    / / /
\/   / /
/    / /
\/   /
/    /
\/

আপনি এখানে দেখতে পাচ্ছেন, এটি এখন তিনটি সাধারণ প্যাটার্নে বিভক্ত। এই কোডটি দিয়ে তৈরি প্রথমটি হ'ল সবচেয়ে সহজ:

Y? ... :  // If Y, the current index, is 0,
"/\\"pU   // return the pattern "/\" repeated U*2 times.

এখন বাম অর্ধেক জন্য। বিজোড় সূচকগুলিতে মানচিত্র করা উচিত \/এবং এমনকি এতেও /, সুতরাং আমরা এই কোডটি ব্যবহার করি:

"\\/"s  // Otherwise, slice the pattern "\/" at 
Yv)     //  if Y is even, 1; otherwise, 0.

এটি সঠিক অর্ধেক পথ সহজ করে তোলে; আমাদের যা করতে হবে তা হ'ল  /কয়েকবার পুনরাবৃত্তি করা:

" /"p  // Repeat the pattern " /"
U-Y/2  //  floor(U - (Y/2)) times.

পরামর্শ স্বাগত!



4

সিজেম, 36 35 34 বাইট

ri_"/\\"*N@,W%{'\'/@" /"*+_N\N}/;;

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

অতিরিক্তটি নির্দেশ করার জন্য @ নিনজাবিয়ারমনিকে ধন্যবাদ ;

যদিও এটি তুলনামূলকভাবে অপ্রয়োজনীয় দেখায়, আমি বেশ কয়েকটি অন্যান্য বিকল্প চেষ্টা করেছিলাম এবং এগুলি কোনও সংক্ষিপ্ত আকারে শেষ হয়নি।

ব্যাখ্যা:

ri_     Get input, convert to integer, and copy.
"/\\"   Pattern for first line.
*N      Repeat N times, and add a newline.
@,      Rotate N to top, and create [0 .. N-1] sequence.
W%      Invert sequence to [N-1 .. 0].
{       Loop over counts, creating two lines for each.
  '\      Leading character for first in pair of lines. Rest will be the same
          for both lines.
  '/      First character for repeated part.
  @       Rotate count to top.
  " /"    Repetitive pattern.
  *       Replicate it by count.
  +       Concatenate with '/.
  _       Copy whole thing for use as second in pair of lines.
  N\      Put a newline between the pair of lines.
  N       Add a newline after second line.
}/      End of loop over counts.
;;      Created an extra line, get rid of it.

1
এখন আপনি শেষের একটি সরাতে পারবেন ;
নিনজাবিয়ারমোনকি

বা প্রতিস্থাপন করুন ;;; সাথে +;
গ্যামারকম্পস

3

পাইথন 2, 80 বাইট

n=input()
print"/\\"*n
for i in range(n*2,1,-1):print"\\"*(1-i%2)+"/ "*(i/2+i%2)


2

জাভা - 141 বাইট

সংক্ষিপ্ততম নয়, তবে জাভা সমাধানটি পেয়ে খুব ভাল:

String a(int a){String s="";int b=-1,c,e;for(a*=2;++b<a;){for(c=-1;++c<a;)s+=(e=b+c)>a?" ":e%2==0?"/":b==0||c==0?"\\":" ";s+="\n";}return s;}

Ungolfed

String a(int a){
    String s ="";
    int b=-1,c,e;
    for (a*=2;++b < a;){
        for (c = -1 ; ++c < a ;)
            s+= (e=b+c)>a?" ": e%2==0? "/" : b==0||c==0? "\\" : " ";
        s+="\n";
    }
    return s;
}

ইনপুট

System.out.println(a(5));

আউটপুট

/\/\/\/\/\
\/ / / / /
/ / / / / 
\/ / / /  
/ / / /   
\/ / /    
/ / /     
\/ /      
/ /       
\/    


1

জাভাস্ক্রিপ্ট, 128 125 123 114 বাইট

n=>{r='';for(i=0;i<n;i++)r+='/\\';for(j=0;j<2*n-1;j++){r+='\n'+(j%2?'':'\\');for(i=n-j/2;i>0;i--)r+='/ '}return r}

ডি-গল্ফ (ইএস 5 তে রূপান্তরিত) + ডেমো:

function c(n) {
    r = '';
    for (i = 0; i < n; i++) r += '/\\';
    for (j = 0; j < 2 * n - 1; j++) {
        r += '\n' + (j % 2 ? '' : '\\');
        for (i = n - j / 2; i > 0; i--) r += '/ '
    }
    return r
}

alert(c(prompt()));


1

রুবি, 50 বাইট

->n{s='/\\'*n
n.times{|i|puts s,?\\+s='/ '*(n-i)}}

পরীক্ষার প্রোগ্রামে:

f=->n{s='/\\'*n
n.times{|i|puts s,?\\+s='/ '*(n-i)}}
f[gets.to_i]

লুপটি i = 0 থেকে i = n-1 পর্যন্ত প্রতিটি পুনরাবৃত্তির জন্য 2 টি সারি মুদ্রণ করে।

দ্বিতীয় সারিতে সর্বদা এর জাতীয় '\'ঘটনা অনুসরণ করা হয় '/ '

প্রথম সারিটি পূর্ববর্তী পুনরাবৃত্তির দ্বিতীয় সারির সমান, তবে '\'অনুপস্থিত সহ (সুতরাং আমরা sপূর্ববর্তী পুনরাবৃত্তির দ্বিতীয় সারিটি প্রিন্ট করার সময় এই মানটি সংরক্ষণ করি))

একমাত্র ব্যতিক্রম পুনরাবৃত্তির শূন্য, যা আরম্ভের দ্বারা পরিচালিত হয় sকরতে '/\'*n


1

জাভাস্ক্রিপ্ট (ES6), 107 104 100 98 97 91 90 বাইট

p=>{s=`/\\`.repeat(p++)+`
`;for(i=p;i>2;s+='\\'+o+o)o=`/ `.repeat(--i)+`
`;return s+'\\/'}

এখানে প্রথম পোস্ট!

ব্যবহার করতে ব্যবহৃত তবে এখন ব্যবহার , রুবির মতো ।Array(len).join(str) String.repeat(len)operator*(str,len)

Ungolfed:

len => {
    var str = `/\\`.repeat(len++) + '\n';

    for (var i = len, mid; i > 2; str += '\\' + mid + mid) {
        mid = `/ `.repeat(--i) + '\n';
    }

    return str + '\\/';
}


আপনাকে ধন্যবাদ:
107 => 104 বাইট: @ সন্নিবেশকারী নাম
97 => 90 বাইট: @ ব্যবহারকারী 81655


1
আপনি সংরক্ষণ করতে পারবেন 3 বাইট : p=>{s=Array(++p).join('/\\')+'\n';for(i=p;i>2;i--,s+='\\'+o+o)o=Array(i).join('/ ')+'\n';return s+'\\/'}
সন্নিবেশকারী নাম এখানে

আমি আমার উত্তরটি মুছলাম কারণ এটি অনুরূপ ছিল তবে আপনার পরে পোস্ট করা হয়েছিল।
ব্যবহারকারী 81655

@ ব্যবহারকারী 81655 আহ, সে সম্পর্কে দুঃখিত। আমাকে repeatপদ্ধতিটি দেখানোর জন্য আপনাকে ধন্যবাদ ।
ইউএসফ্রেন্ডস

1

পাইথন 2, 66 বাইট

n=input();b=1
print'/\\'*n
while~-n+b:print'\\'*b+'/ '*n;b^=1;n-=b

অনেকটাই অকপট. মানটি লাইনের nসংখ্যা /এবং bলাইনটি শুরু হয় কিনা তা বলে \b0 এবং 1 এর মধ্যে বিকল্পের মান এবং nপ্রতি দ্বিতীয় ধাপে হ্রাস পায়। কুরুচিপূর্ণ সমাপ্তির অবস্থা যখন থামে n=1, b=0। একটি execলুপের বিকল্পের জন্য প্রচুর পালানোর দরকার হবে "'\\\\'"

আমি একা সংখ্যা ব্যবহার করার চেয়ে এই পদ্ধতিকে আরও ছোট বলে অবাক হয়েছি k=2*n+b। এটি 68 বাইট:

k=2*input()+1
print k/2*"/\\"
while k>2:print k%2*'\\'+k/2*'/ ';k-=1

একটি বিকল্প কৌশল printশীর্ষ লাইনের জন্য পৃথক এড়াতে পারে , তবে আমি একটি সংক্ষিপ্ত উপায় দেখিনি।


1

মিনকোলাং 0.14 , 46 বাইট

আমি নিশ্চিত যে এটি গল্ফ করা যেতে পারে তবে এটি এখানে সকাল 4 টা এবং আমার বিছানায় যেতে হবে।

n$z"/\"z$D$OlOz[" /"zi-$Dlr$d"\"zi1+-3&5$X$O].

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

ব্যাখ্যা

n$z               Take number from input (n) and store it in the register (z)
   "/\"           Push these characters (in reverse)
       z$D        Push register value and duplicate the whole stack that many times
          $O      Output whole stack as characters
            lO    Output newline

z                                   Push n from register
 [                                  Open for loop that repeats n times
  " /"                              Push these characters (in reverse)
      zi-                           n - loop counter
         $D                         Pop k and duplicate whole stack k times
           l                        Push 10 (for newline)
            r                       Reverse stack
             $d                     Duplicate whole stack
               "\"                  Push this character
                  zi1+-             0 if n = loop counter + 1, truthy otherwise
                       3&           Do the next three characters if top of stack is 0
                         5$X        Dump the bottom-most five items of the stack
                            $O      Output whole stack as characters
                              ].    Close for loop and stop

1

ব্যাচ, 121 বাইট

@echo off
set/an=%1-1
if %1==1 (echo /\%2) else call %0 %n% /\%2
set a=/\%2
echo \%a:\= %
if not \%2==\ echo %a:\= %

বা যদি অ্যানারি গ্রহণযোগ্য হয় তবে 107 বাইট:

@echo off
set a=%1
echo %a:1=/\%
:a
echo \%a:1=/ %
set a=%a:~1%
if not %a%1==1 echo / %a:1=/ %&goto a

উপযুক্ত সংখ্যার 1 টি দিয়ে দাওয়াত করুন।


0

মতলব, 122 বাইট

M=2*input('');
z=zeros(M);[y,x]=ndgrid(1:M);
z(~mod(x+y,2)&x+y<M+3)=1;v=2-mod(1:M,2);
z(1,:)=v;z(:,1)=v;disp([15*z.^2+32,''])

0

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

সমান দৈর্ঘ্যের দুটি সমাধান।

কল করুন f

f n=mapM_ putStrLn$[[x?y|x<-[0..2*n-y-0^y]]|y<-[0..2*n-1]]
x?y|mod(x+y)2==0='/'|x*y==0='\\'|0<1=' '

এবং

f n=mapM_ putStrLn$[[x?y|x<-[y..2*n-0^y]]|y<-[0..2*n-1]]
x?y|mod x 2==0='/'|mod y x==0='\\'|0<1=' '

0

হাস্কেল, 96

f=g.(*2)
g m=unlines$t m(c"/\\"):[t n l|(n,l)<-zip[m,m-1..2]$c['\\':p,p]]
p=c"/ "
c=cycle
t=take

এটি বিদ্যমান হাস্কেল সমাধানের বিরুদ্ধে আসলে প্রতিযোগিতামূলক নয় কারণ এটি স্ট্রিং মুদ্রণের পরিবর্তে ফিরে 5 অক্ষর সংরক্ষণ করে। আমি কেবল এটি দেখানোর জন্য পোস্ট করছি যে কীভাবে অসীম প্যাটার্নের পদ্ধতির তুলনা-ভিত্তিক পদ্ধতির সাথে তুলনা করা হয়। নোট:

  • p দৈর্ঘ্যের কোনও পরিবর্তনের জন্য ইনলাইন করা যায়।
  • [t n l|(n,l)<-...]2 উপর সংরক্ষণ (map(uncurry t)$...)

0

সিলোন, 100

String s(Integer n)=>"\n".join{"/\\".repeat(n),for(i in 2*n+1..3)"\\".repeat(i%2)+"/ ".repeat(i/2)};

এটির জন্য "নামযুক্ত আর্গুমেন্ট তালিকা" বৈশিষ্ট্যযুক্ত join(কোনও নামযুক্ত আর্গুমেন্ট ছাড়াই, তবে পরিবর্তে একটি পুনরাবৃত্তিযোগ্য বোঝা) এবং বেশ কয়েকটি ব্যবহার String.repeat(যার মধ্যে একটির অর্থ আসলে "কেবলমাত্র বিজোড়ের জন্য অন্তর্ভুক্ত করা হয়"i "))

বিন্যাসকৃত:

String s(Integer n) =>
        "\n".join{
            "/\\".repeat(n),
            for (i in 2*n + 1 .. 3)
                "\\".repeat(i % 2)
                        + "/ ".repeat(i / 2)
        };

0

পিএইচপি, 117 বাইট

<?$n=$argv[1];$r=str_repeat;echo$r("/\\",$n);for(;$i++<$n*2-1;)echo"\n".($i%2?"\\":'').$r("/ ",$n-floor(($i-1)/2));?>

ধরে নিন নোটিশ বন্ধ করা আছে এবং কমান্ড লাইন থেকে ইনপুট নেওয়া হবে।

Ungolfed:

<?php
error_reporting(E_ALL & ~E_NOTICE);

$n = $argv[1];
$r='str_repeat';
echo $r("/\\",$n);
for(;$i++<$n*2-1;){
    echo"\n".(($i%2)?"\\":'') . $r("/ ",$n-floor(($i-1)/2));
}
?>

মন্তব্য স্বাগত :)

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