একটি উল্টা-ডাউন তাঁবু আউটপুট


27

একটি পূর্ণসংখ্যা দেওয়া হয়েছে, একটি উল্টা-ডাউন তাঁবু আউটপুট করুন।

ইনপুটটি তাঁবুর আকার (পরম মান) এবং প্রবেশপথটি বাম দিকে (নেতিবাচক সংখ্যা) অথবা ডানদিকে (ধনাত্মক সংখ্যা) উভয়ই নির্ধারণ করে।

If input = -1:
____
\/_/

If input = -2:
________
\  /   /
 \/___/

If input = -3:
____________
\    /     /
 \  /     /
  \/_____/

If input = 1:
____
\_\/

If input = 2:
________
\   \  /
 \___\/

If input = 3:
____________
\     \    /
 \     \  /
  \_____\/

et cetera

নোট করুন যে তাঁবুটির উপরের অংশটি (অর্থাৎ শেষ লাইনটি) 2 * abs(input) - 1আন্ডারস্কোর করেছে।

থাকতে পারে কোন নেতৃস্থানীয় স্পেস, যেমন যে প্রথম লাইন সরাসরি একটি আন্ডারস্কোর দিয়ে শুরু হয়।

ধরুন ইনপুট কখনই হবে না 0

আপনার কোডটি যতটা সম্ভব সংক্ষিপ্ত হওয়া উচিত।

এই চ্যালেঞ্জটি হেল্কা হোম্বা দ্বারা আড্ডার মিনি চ্যালেঞ্জের উপর ভিত্তি করে তৈরি করা হয়েছে , যা ক্যালভিনের শখের পাবলিক লাইসেন্সের শর্তে বাস্তব চ্যালেঞ্জগুলিতে ব্যবহার করার অনুমতি দেওয়া হয়েছে


1
পিছনে স্থান ঠিক আছে? অর্থ, 3উদাহরণস্বরূপ আমরা কি ইনপুটটির জন্য 12 দৈর্ঘ্যের চারটি স্ট্রিং (একটি আয়তক্ষেত্র) আউটপুট দিতে পারি ?
অ্যাডমবর্কবার্ক

1
@TimmyD তারা করছে মঞ্জুরিপ্রাপ্ত।
ব্যবহারকারী48538

2
@ টিমডি নিশ্চিত, এটি সম্ভবত অন্য কোনও কিছুর দ্বিগুণ, আমি নিশ্চিত না যে শৃঙ্খলাটি কোথায় শুরু হয়। আমি কেবল মনে করি আমরা এতক্ষণে এগুলি যথেষ্ট পরিমাণে দেখেছি।
নাথানিয়েল

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

2
@ নাথানিয়েল দুটি চ্যালেঞ্জের সদৃশ হওয়ার জন্য আমাদের গৃহীত গাইডলাইনটি হ'ল একটির উত্তর থেকে অন্যটির সামান্য ব্যবহার বা পরিবর্তন না করে অন্যটির (প্রতিযোগিতামূলকভাবে) পুনরায় ব্যবহার করা যায় কিনা। চ্যালেঞ্জগুলি টেবিলে কিছু উপন্যাস নিয়ে আসে কিনা তা সেই গাইডলাইনটির অংশ নয়। আপনি নিরুৎসাহিত করতে চান এমন চ্যালেঞ্জগুলির জন্য ডাউনভোটগুলি ব্যবহার করুন বা তারা যদি এটিকে আকর্ষণীয় মনে করেন না এবং তাদের উপভোগ করেন তবে তাদের এড়িয়ে যান।
মার্টিন এন্ডার

উত্তর:


11

এমএটিএল , 55 53 52 51 বাইট

|95cy4*Y"DXytPEt0*yvG0>?P_]!'\/ 'w)95JG|G0<yEq:++&(

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

ব্যাখ্যা

যাক Nইনপুট বোঝান। কোডটি তিনটি ধাপে এগিয়ে যায়।

প্রথমত , 4*Nআন্ডারস্কোরগুলির প্রথম লাইনটি স্ট্রিং হিসাবে নির্মিত হয় এবং প্রদর্শিত হয় (যা এটি স্ট্যাক থেকে সরিয়ে দেয়)।

দ্বিতীয়ত , তাঁবুটির "ফ্রেম" দুটি ধরণের স্ল্যাশ ব্যবহার করে তৈরি করা হয়। এটি করার জন্য, একটি সংখ্যাসূচক 2D অ্যারে তৈরি করা হয় যা ধারণ করে 1এবং 2স্ল্যাশ দুই ধরনের সংশ্লিষ্ট, এবং 0স্থান জন্য।

এটি চারটি ম্যাট্রিকের সাথে সংযুক্ত করে করা হয়:

  1. আকারের একটি পরিচয় ম্যাট্রিক্স abs (N);
  2. 2অ্যান্টিডিয়োনাল সমেত একই আকারের একটি ম্যাট্রিক্স ;
  3. একই আকারের একটি নাল ম্যাট্রিক্স;
  4. ম্যাট্রিক্স 2 এর একটি অনুলিপি।

এই চারটি ম্যাট্রিক্সকে উল্লম্বভাবে প্রতিবিম্বিত করা N=3নিম্নোক্ত 4*N × Nম্যাট্রিক্সের উদাহরণ হিসাবে ব্যবহার করে :

1 0 0
0 1 0
0 0 1
0 0 2
0 2 0
2 0 0
0 0 0
0 0 0
0 0 0
0 0 2
0 2 0
2 0 0

(যা, স্থানান্তরিত হয়ে তাঁবুটির মতো দেখতে শুরু করে)।

আমরা এখন ইনপুটটির চিহ্নটির যত্ন নিই। যদি এটি ইতিবাচক হয় তবে আমরা উপরের ম্যাট্রিক্স এবং সূচকে স্ট্রিংয়ে স্থানান্তর করি '\/ '। ইন্ডেক্সিং 1-ভিত্তি করে এবং মডুলার, তাই 1হয়ে '\', 2হয়ে '/'এবং 0হয়ে ' ', 2D গৃহস্থালি অ্যারে উত্পাদক

\    /     /
 \  /     / 
  \/     /  

অন্যদিকে, যদি ইনপুটটি নেতিবাচক হয় তবে আমরা উল্লম্বভাবে উল্টাতে পারি এবং গাণিতিকভাবে 4*N × Nম্যাট্রিক্সকে উত্পাদিত করি

-2  0  0
 0 -2  0
 0  0 -2
 0  0  0
 0  0  0
 0  0  0
-2  0  0
 0 -2  0
 0  0 -2
 0  0 -1
 0 -1  0
-1  0  0

সূচক -1এখন বোঝায় '/'এবং -2করে '\'। এটি হ'ল, দুই প্রকারের স্ল্যাশই প্রয়োজনীয় হিসাবে পরিবর্তিত হয়েছে। আবার ট্রান্সপোজিং এবং স্ট্রিংয়ের '\/ 'সাথে সূচীকরণগুলি বিপরীত তাঁবু দেয়:

\     \    /
 \     \  / 
  \     \/  

তৃতীয়ত , আন্ডারস্কোরগুলি 2D চর অ্যারের শেষ সারিটির অংশে পূরণ করা দরকার। এই লাইনের অনুভূমিক অবস্থানটি ইনপুটটির চিহ্নের উপর নির্ভর করে এবং এর দৈর্ঘ্য abs(N)

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


শুরুতে এই আন্ডারস্কোরগুলি ফাঁকা হওয়া উচিত নয়?
ডিজেএমসিএমহেম

@ ডিজেএমসিএমহেম দুঃখিত, আপনার অর্থ কি?
লুইস মেন্ডো

আমি যখন আপনার কোডটি চালিত করি তখন প্রথম লাইনটি সমস্ত আন্ডারস্কোর হয়। জাইবিন যে আউটপুট দিয়েছে তাতে তা নেই।
ডিজেএমসিএমহেম

পুনঃটুইট করেছেন পরীক্ষার ক্ষেত্রে প্রথম লাইনটি আন্ডারস্কোর হয়, তাই না? এবং অন্যান্য উত্তর (আপনার নয়) তাও করে?
লুইস মেন্ডো

1
@ ডিজেএমসিএমহেম :-D সত্যিই অদ্ভুত। একটি ভিন্ন ব্রাউজার চেষ্টা করবেন?
লুইস মেন্ডো

9

জাভাস্ক্রিপ্ট (ES6), 139 বাইট

পুনরাবৃত্তিভাবে তাঁবু তৈরি করে:

f=(N,n=N>0?N:-N,i=0,r=(j,i)=>' _'[i||0].repeat(j),a=`\\${r(i)}/`,b=r(n*2+i-1,+!i))=>n--?f(N,n,i+2)+`
`+r(n)+(N<0?a+b+'/':'\\'+b+a):r(i*2,1)

অবহেলিত এবং মন্তব্য

f = (
  N,                                  // N is the original parameter (remains unchanged)
  n = N > 0 ? N : -N,                 // n is initialized to abs(N)
  i = 0,                              // i is the row counter (*2)
  r = (j, i) => ' _'[i||0].repeat(j), // helper function to repeat ' ' or '_' j times
  a = `\\${r(i)}/`,                   // a = '\ /' pattern
  b = r(n*2+i-1, +!i)                 // b = padding pattern filled with ' ' or '_'
) =>
  n-- ?                               // if we haven't made it yet to the top row:
    f(N, n, i+2) + `\n` +             //   - compute next row(s) / append line break
    r(n) +                            //   - append leading spaces
    (N < 0 ? a+b+'/' : '\\'+b+a)      //   - append a/b patterns according to N sign
  :                                   // else:
    r(i*2, 1)                         //   - return top row, made of '_' characters

উদাহরণ

var f=(N,n=N>0?N:-N,i=0,r=(j,i)=>' _'[i||0].repeat(j),a=`\\${r(i)}/`,b=r(n*2+i-1,+!i))=>n--?f(N,n,i+2)+`
`+r(n)+(N<0?a+b+'/':'\\'+b+a):r(i*2,1)

console.log(f(3));
console.log(f(-4));


6

পাইথন 2, 143 141 139 138 137 বাইট

-2 বাইট @ স্পাই 3000 (পাইথন 2 এ এক্সিকিউটিভ করার দরকার নেই)
-1 বাইট ধন্যবাদ @ স্প 3000 (ব্যবহার cmp)

def f(n):d=cmp(n,0);a,b='\/'[::-d];s=n*d;x=2*s-1;y=4*s;print'_'*y;i=0;exec"print' '*i+(b+' '*(y-3-x-i-i)+a+'_ '[s-i>1]*x+a)[::d];i+=1;"*s

এটি আদর্শে পরীক্ষা করুন

প্রথমে আমরা nনেতিবাচক কিনা তা দেখতে পাই এবং তা d +1যদি হয় এবং -1না হয় তা তৈরি করি।
তারপরে আমরা দুটি স্ল্যাশ নির্বাচন করি aএবং এটি bব্যবহার করে dযে a='\', b='/'কখন nইতিবাচক এবং a='/', b='\'কখন nনেতিবাচক।
পরবর্তী আমরা সেট করে s=abs(n)যা দ্বারা অর্জন করা যেতে পারে s=n*d
তারপরে আমরা _শীর্ষে (চিত্রের নীচে) সংখ্যা গণনা করি , যা তাঁবুটির পাশের সংখ্যার মতো x=2*s-1
তারপরে আমরা _তাঁবুর গোড়ায় (ছবির শীর্ষে) সংখ্যা গণনা করি এবং এটি সংরক্ষণ করি y=4*sযেহেতু এটি বাকি তাঁবুটি তৈরি করতে লুপে ব্যবহৃত হবে।
এখন আমরা ব্যবহার করে তাঁবুটির বেসটি মুদ্রণ করি print'_'*y
তারপরে আমরা বাকি তাঁবুটি sপ্রিন্ট স্টেটমেন্ট সম্পাদন করে একটি লুপিং ভেরিয়েবল দিয়ে iআরম্ভ করি 0যা 1প্রতিটি মুদ্রণ বিবৃতিতে বৃদ্ধি করে ।
তারপরের বাকী অংশের y-3-x-i-iশেষে দরজাতে xফাঁকা জায়গা থাকে এবং শীর্ষে না পৌঁছানো পর্যন্ত শরীরে ফাঁকা স্থান থাকে, যখন s-i>1ফলসকে মূল্যায়ন করে, _এখান থেকে বাছাই করে '_ '
ইতিবাচক, বাম-দরজার জন্য, শীর্ষস্থানটি বাদ দিয়ে পুরো তাঁবুটি পুরো তাঁবুতে আবদ্ধ করুন, সুতরাং এটি বিপরীত হয় যখন ধনাত্মক, 'ডান-দরজা', তাঁবুটি না থাকে [::d]


@ এসপি 3000 দুর্ভাগ্যক্রমে cmp(0,0)প্রত্যাবর্তন করেছে0
জোনাথন অ্যালান

5

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

def f(n):i=k=abs(n);print'_'*k*4;exec"print' '*(k-i)+r'\\\%%s%\*%c%%*sc/'[n<0::2]%(' _'[i<2]*(2*k-1))%(2*i-1,47);i-=1;"*k

স্ট্রিং ফর্ম্যাটিংয়ের মাত্র অনেক।


5

সি #, 215 214 বাইট

string t(int N){var n=N<0;N=n?-N:N;var t=new string('_',4*N);for(int i=0;i<N;){string f=new string(i<N-1?' ':'_',2*N-1),p=new string(' ',2*N-2*i-2);t+='\n'+new string(' ',i++)+'\\'+(n?p+'/'+f:f+'\\'+p)+'/';}return t;}

using s=string;আগে ব্যবহার করার সময় কয়েকটি বাইট সংরক্ষণ করার সম্ভাবনা রয়েছে ।

s t(int N){var n=N<0;N=n?-N:N;var t=new s('_',4*N);for(int i=0;i<N;){s f=new s(i<N-1?' ':'_',2*N-1),p=new s(' ',2*N-2*i-2);t+='\n'+new s(' ',i++)+'\\'+(n?p+'/'+f:f+'\\'+p)+'/';}return t;}

যা 15 (ব্যবহার) + 184 (পদ্ধতি) = 199 বাইট হবে।


5
পিপিসি, ব্যাকফ্রোম এক্সিলে স্বাগতম!
এরিক আউটগল্ফার

প্রকৃতপক্ষে, পিপিসিজিতে আপনাকে স্বাগতম! খুব সুন্দর প্রথম উত্তর +1। আমি গল্ফের জন্য কিছু সন্ধান করার চেষ্টা করেছি (সি # তে প্রোগ্রাম করার পর থেকে) এবং শেষ পর্যন্ত কেবল -1 বাইটের জন্য একটি জিনিস খুঁজে পেতে সক্ষম হয়েছিল: আপনি যদি লুপটির varভিতরে প্রথমটি পরিবর্তন করেন তবে stringআপনি এটি সরিয়ে ফেলতে পারবেন দ্বিতীয় var (বাইট সংরক্ষণ করার জন্য স্থান সহ) তাই var fহয়ে ওঠে string f, ;var p=হয়ে যায় ,p=
কেভিন ক্রুইজসেন

4

টিএসকিউএল, 195 বাইট

Golfed:

DECLARE @ INT=-2
DECLARE @b INT=ABS(@),@i INT=0PRINT REPLICATE('_',4*@b)z:SET @i+=1PRINT SPACE(@i-1)+'\'+STUFF(REPLICATE(IIF(@i<@b,' ','_'),4*@b-2*@i),@b*2-IIF(@<0,@i*2-1,0),1,IIF(@<0,'/','\'))+'/'IF @i<@b GOTO z

Ungolfed:

DECLARE @ INT=-2

DECLARE @b INT=ABS(@),@i INT=0

PRINT REPLICATE('_',4*@b)
z:
  SET @i+=1
  PRINT 
    SPACE(@i-1)+'\'
    +STUFF(REPLICATE(IIF(@i<@b,' ','_'),
      4*@b-2*@i),@b*2-IIF(@<0,@i*2-1,0),1,IIF(@<0,'/','\'))
    +'/'
IF @i<@b GOTO z

বেহালা


4

ভি , 66 বাইট

é /ä
"aDoÀñá_>ñ^hr\A\/ò^hÄX$2é_Ó_/ òÄÒ_ñ/-
ddÍܨ[ _]*©Ü¨ *©/ܲ¯±

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

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

0000000: e920 2fe4 0a22 6144 6f1b c0f1 e15f 3ef1  . /.."aDo...._>.
0000010: 5e68 725c 415c 2f1b f25e 68c4 5824 32e9  ^hr\A\/..^h.X$2.
0000020: 5fd3 5f2f 20f2 c4d2 5ff1 2f2d 0a64 64cd  _._/ ..._./-.dd.
0000030: dca8 5b20 5f5d 2aa9 dca8 202a a92f dcb2  ..[ _]*... *./..
0000040: afb1                                     ..

4

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

Ä©'_4®*×,FNð×'\®·<N>®Qi'_ëð}×®N>-·ð×®¹Qi'\ës'/}s'/J,

ব্যাখ্যা

                                                     # implicit input, call this A
Ä©                                                   # store abs(A) in register for later use
  '_4®*×,                                            # print 4*A underscores (tent floor)
         F                                           # for each non-floor section in range(N)
          Nð×'\                                      # push N spaces at the beginning of the 
                                                     # row followed by a backslash
                  N>®Qi'_ëð}                         # if we're on the last row push an
                                                     # underscore, else a space
               ®·<          ×                        # repeat that char abs(A)*2-1 times
                             ®N>-·ð×                 # push 2*(abs(A)-(N+1)) spaces
                                    ®¹Qi'\ës'/}      # if input is positive push backslash
                                                     # else push a slash
                                               s'/   # move that char between the 2 sections
                                                     # of spaces
                                                  J, # join the row and print

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


4

পাওয়ারশেল ভি 2 +, 217 205 190 187 184 বাইট

param($b)"_"*(($a=[math]::Abs($b))*4);$z,$y='/\'[($b=$b-lt0),!$b]
((($x=1..$a|%{($w=" "*($_-1))+$z+" "*(2*($a-$_))+$y+(' ','_')[$_-eq$a]*($a*2-1)+$y+$w})|%{-join$_[($a*4)..0]}),$x)[$b]

$bপূর্ণসংখ্যা হিসাবে ইনপুট নেয় । মনে রাখবেন যে যদি $bনেতিবাচক হয় তবে যথাযথভাবে কাস্ট করার জন্য আপনার স্পষ্টভাবে এটি পেরেনের সাথে ঘিরে রাখা দরকার (উদাহরণগুলি দেখুন), অন্যথায় পাওয়ারশেল মনে করবে এটি একটি স্ট্রিং।

তাঁবুটি কোন দিকে মুখ করেই নয়, প্রথম লাইনটি একই, আন্ডারস্কোরগুলির একগুচ্ছ; ঠিক 4*abs(input)তাদের অনেকেই আসলে। এই নম্বরটি $aপরে ব্যবহারের জন্যও সংরক্ষণ করা হয়। অধিকন্তু, এখন আমাদের $bসঞ্চিত হওয়ার পরম মান রয়েছে $a, আমরা $bএর সাইন এর জন্য একটি বুলিয়ান রূপান্তরিত করে $yএবং আমাদের স্ল্যাশগুলিকে এবং এর মধ্যে সঞ্চিত নির্বাচন করি $z

পরের লাইনটি আউটপুটটি তৈরি করছে এবং তৈরি করছে, এবং এটি একটি ঘোলাটে, সুতরাং আসুন এটি ভেঙে দিন।

আমরা মূলত দুটি উপাদানের একটি অ্যারেতে সূচি তৈরি করছি, (big long calculations saved into $x)বা এর $xউপর ভিত্তি করে $b

হিসাবগুলি হ'ল যেখানে তাঁবুর দেহটি নির্মিত। আমরা লুপ থেকে 1..$a|%{...}। প্রতিটি পুনরাবৃত্তি আমরা তাঁবু শরীরের একটি লাইন তৈরি করছি। আমরা যে লাইনে চলেছি তার সমান সংখ্যক স্পেস দিয়ে শুরু করি -1, যাতে এটি যথাযথভাবে বাম-প্রান্তরেখা থাকে। এটি $wপরে সংরক্ষণ করা হয়েছে এবং যথাযথ স্ল্যাশ (, z ভিত্তিক $b) এর সাথে জড়িত, তারপরে ফাঁকা স্থানের ডোর ফ্রেম সংখ্যা, তারপরে অন্য স্ল্যাশ $y, তারপরে হয় আন্ডারস্কোর বা স্পেসগুলি নির্ভর করে যদি আমরা নীচের লাইনে থাকি বা না, তারপরে আরেকটি স্ল্যাশ $yএবং অবশেষে $wএকটি আয়তক্ষেত্রাকার স্ট্রিং তৈরির জন্য যথাযথ স্থানের স্থান ( ) যে স্ট্রিং এর ফলে অ্যারে সংরক্ষণ করা হয় $x

অ্যারের বাম অর্ধেক নির্বাচিত থাকে (অর্থাত, $bহয় False, তাহলে আমরা মাধ্যেমে লুপ করতে প্রয়োজন যেহেতু ইনপুট ইতিবাচক ছিল না) $xএবং প্রতিটি লাইন আইটেমে বিপরীত - এই হল সেই জায়গা যেখানে পিছনের শূন্যস্থানগুলি খেলার মধ্যে আসা; এটি আমাদের দূরত্বগুলি পুনরায় গণনার চেয়ে লাইনগুলি কেবল বিপরীত করতে দেয়।

যদি $bহয় True, তবে $xপরিবর্তে অ্যারের ডান অর্ধেকটি নির্বাচিত হবে।

উভয় ক্ষেত্রেই, পাইপলাইনে এখন স্ট্রিংগুলির একটি অ্যারে রয়েছে। Write-Outputউপাদানগুলির মধ্যে ডিফল্ট নিউলাইন সহ, প্রোগ্রামের সমাপ্তির মধ্যে অন্তর্ভুক্ত আউটপুট ঘটে।

উদাহরণ

PS C:\Tools\Scripts\golfing> .\print-upside-down-tent.ps1 (-5)
____________________
\        /         /
 \      /         / 
  \    /         /  
   \  /         /   
    \/_________/    

PS C:\Tools\Scripts\golfing> .\print-upside-down-tent.ps1 (4)
________________
\       \      /
 \       \    / 
  \       \  /  
   \_______\/   

3

হাস্কেল, 187 184 183 বাইট

f x=unlines$[(n*4)%'_']++((' '#)<$>[0..n-2])++['_'#(n-1)]where m#i=i%' '++'\\':m!i++"/";m!i|x>0=(2*n-1)%m++'\\':(2*(n-i-1))%' '|q<-2*(n-i-1)=q%' '++'/':(2*n-1)%m;n=abs x;m%c=c<$[1..m]

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

Ungolfed

tent :: Int -> String
tent x = unlines $ [replicate (n*4) '_'] ++ (row ' '<$>[0..n-2]) ++ [row '_' (n-1)]
    where row m i = replicate i ' ' ++ "\\" ++ dir m i ++ "/"
          -- direction selector
          dir m i | x > 0 = side m ++ "\\" ++ entrance i ' '
                  | 1 > 0 = entrance i ' ' ++ "/" ++ side m
          side = replicate (2*n-1)
          entrance i = replicate (2*(n-i-1))
          n = abs x

আমার পোস্ট করা
299

আপনি কি এমন কোনও যুক্ত করবেন না mainযাতে stdinএটি ইনপুট হিসাবে গ্রহণ করে?
ম্যারিডিয়াম

প্রশ্নটি অন্যথায় নির্দিষ্ট না করে আপনি একটি ফাংশন পোস্ট করতে পারেন। উত্তর দেওয়ার ক্ষেত্রে সাধারণ নিয়মের একটি মেটা থ্রেড রয়েছে, আমি এটি আপনার জন্য অনুসন্ধান করার চেষ্টা করব।
sudee

1
আপনি যেখানে অক্ষরটি ব্যবহার করার জন্য একটি একক অক্ষরকে আগেই প্রতিস্থাপন করেন তা পরিবর্তন করে আপনি 2 বাইট সংরক্ষণ করতে পারেন :। অর্থাত পরিবর্তন "\\" ++ entrance...করতে '\\':entrance
ম্যারিডিয়াম

1
"অন্যথায়" পাহারা নষ্ট করবেন না : আপনি পরিবর্তন করতে পারেন |1>0=(2*(n-i-1))%' 'থেকে |q<-2*(n-i-1)=q%' '
নিমি

2

সি, 240 207 193 বাইট

#define P putchar
a,j,l,m;g(x,y,z){for(m=y+z+1;m--;P(m^z?l?32:95:x));}f(n){g(32,(a=abs(n))*4,0);for(P(10),j=2*(l=a)-1;l--;){for(m=a;--m>l;P(32));P(92);m=n>0?g(92,j,l*2):g(47,l*2,j);puts("/");}}

এবার আমি লুপের জন্য একটি একক ব্যবহার করতে g (...) ফাংশনটি অনুকূল করে তুলেছি।

#define P putchar
a,j,l,m;g(x,y,z){for(;y--;P(l?32:95));for(P(x);z--;P(l?32:95));}f(n){g(32,(a=abs(n))*4,0);l=a;j=2*a-1;P(10);for(;l--;){for(m=a;--m>l;P(32));P(92);m=n>0?g(92,j,l*2):g(47,l*2,j);puts("/");}}

এবার ম্যাক্রো এক্সটি ফাংশন জি (...) হিসাবে ভাল এবং যেহেতু y এবং z একটি নতুন স্কোয়ারের পরামিতি, আমি কেবল তাদের g এর পরিসরগুলিতে হ্রাস করতে পারি।

#define P putchar
#define X(x,y,z){for(k=0;k++<y;P(l?32:95));P(x);for(k=0;k++<z;P(l?32:95));}
a,i,j,k,l,m;f(n){for(l=a=abs(n);i++<a*4;P(95));j=2*a-1;P(10);while(l--){for(m=a;--m>l;P(32));P(92);if(n>0)X(92,j,l*2)else X(47,l*2,j)puts("/");}}

এই প্রধান ফাংশন দিয়ে পরীক্ষা; এটি অনেক ছোট গল্ফ করা উচিত।

main(c,v)char**v;
{
    f(atoi(v[1]));
}

2

সি # 241 231 বাইট

কেভেন ক্রুইজসেনকে 10 বাইট সংরক্ষণ করা হয়েছে

using s=System.String;s f(int N){var f=N<0;N=N>0?N:-N;var o=new s('_',N*4);for(int j=0,z;j<N;){z=-2*j+2*N-2;var O=j>N-2?'_':' ';o+='\n'+new s(' ',j)+'\\'+new s(' ',z)+(f?'/':O)+new s(O,j++*2)+(f?O:'\\')+new s(' ',z)+'/';}return o;}

পুরনো সংস্করণ:

string f(int N){var f=N<0;N=N>0?N:-N;var o=new string('_',N*4);for(int j=0;j<N;){int z=-2*j+2*N-2;var O=j>N-2?'_':' ';o+='\n'+new string(' ',j)+'\\'+new string(' ',z)+(f?'/':O)+new string(O,j++*2)+(f?O:'\\')+new string(' ',z)+'/';}return o;}

মূলত কনস্ট্রাক্টরটি ব্যবহার করে তবে একটি বাইট new string(...)হিসাবে Func<char,int,string>সংরক্ষণ করা হয়েছিল। আমার ইচ্ছা int-> অন্তর্ভুক্ত charছিল

খুব নিশ্চিত যে আমার গণিতটিও কিছুটা ঠিক করা যেতে পারে তবে আমি এটি দেখতে পাচ্ছি না


1
আপনি এটি আরও কিছু গল্ফ করতে পারেন। প্রথম সব আপনি অপসারণ করতে পারেন int আগে z=জন্য-লুপ যোগ করে: int j=0,z। এবং যেহেতু আপনি stringযথেষ্ট using s=System.String;পরিমাণ ব্যবহার করেন তাই আপনি এটির সাথে এটির using s=System.String;s f(int N){var f=N<0;N=N>0?N:-N;var o=new s('_',N*4);for(int j=0,z;j<N;){z=-2*j+2*N-2;var O=j>N-2?'_':' ';o+='\n'+new s(' ',j)+'\\'+new s(' ',z)+(f?'/':O)+new s(O,j++*2)+(f?O:'\\')+new s(' ',z)+'/';}return o;}
নামটি তৈরি

1

সুইফট 2.2 421 বাইট

ভাল ... এটি একটি প্রচেষ্টা ছিল।

Golfed:

let t={(s:String,n:Int)->String in return String(count:n,repeatedValue:Character(s))};let e={(n:Int)in var w=[String]();w.append(t("_",abs(n)*4));let c = abs(n);let d = n>0 ? "/": "\\";let f = n>0 ? "\\": "/";for var i in 0...abs(n)-1 {w.append(t(" ",i)+d+t(" ",c*2-2-(2*i))+f+(i<c-1 ?t(" ",2*c-1)+f:t("_",2*c-1)+f)+(n>0 ?t(" ",i):""));};w=n<0 ?w:w.map(){String($0.characters.reverse())};print(w.joinWithSeparator("\n"))}

UnGolfed:

let t={(s:String,n:Int) -> String in
    return String(count:n,repeatedValue:Character(s))
};
let e={(n:Int) in
    var w=[String]();
    w.append(t("_",abs(n)*4));
    let c = abs(n);
    let d = n>0 ? "/": "\\";
    let f = n>0 ? "\\": "/";
    for var i in 0...abs(n)-1 {
        w.append(t(" ",i)+d+t(" ",c*2-2-(2*i))+f+(i<c-1 ?t(" ",2*c-1)+f:t("_",2*c-1)+f)+(n>0 ?t(" ",i):""));
    };
    w=n<0 ?w:w.map(){String($0.characters.reverse())};
    print(w.joinWithSeparator("\n"))
}

1

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

$t=str_repeat;echo$t(_,4*$s=$k=abs($n=$argv[1]));for(;$k--;$p.=" "){$f=$t("  ",$k);$r=$t($k?" ":_,2*$s-1);echo"
$p\\",$n<0?"$f/$r/":"$r\\$f/";}

সাথে চালানো php -r '<code>' <parameter>

ভাঙ্গন

$t=str_repeat;  // function name to variable saves 10-1 bytes
echo$t(_,4*$s=$k=abs($n=$argv[1])); // print bottom
for(
    ;
    $k--;   // $k from abs($n-1) to 0
    $p.=" "                 // create padding
)
{
    $f=$t("  ",$k);         // create front
    $r=$t($k?" ":_,2*$s-1); // create side/roof
    echo"\n$p\\",$n<0
        ?"$f/$r/"   // print, entrance left
        :"$r\\$f/"  // print, entrance right
    ;
}

1

ব্যাচ, 289 বাইট

@echo off
set/pn=
set u=
for /l %%i in (2,1,%n:-=%)do call set u=_%%u%%_
echo _%u%__%u%_
set l=
set m=%u%/_%u%
if %n% gtr 0 set m=%u%_\%u%
set m=%m:_= %
for /l %%i in (2,1,%n:-=%)do call:l
set m=%m: =_%
:l
echo %l%\%m%/
set l= %l%
if %n% gtr 0 set m=  %m:~0,-2%
set m=%m:~2%

STDIN এ ইনপুট নেয়। 2*(abs(n)-1)আন্ডারস্কোরের স্ট্রিং তৈরি করে শুরু হয় । এরপরে তাঁবুটির গোড়ায় অতিরিক্ত 4 আন্ডারস্কোরগুলি পুনরাবৃত্তি করা হয়। তার পরে বাকি তাঁবুতে একটি ইনডেন্ট থাকে (যা প্রতিটি লাইনে 1 বৃদ্ধি করে), ক \, তাঁবুটির মাঝামাঝি এবং ক /। তাঁবুটির মাঝামাঝি 2*(abs(n)-1)স্থানগুলি ফাঁকা হিসাবে শুরু হয়, প্লাস হয় হয় \বা /প্লাস একটি জায়গা (যা আমি মার্কডাউনে উপস্থাপন করতে পারি না), এবং আরও একটি 2*(abs(n)-1)স্পেস। আমি আন্ডারস্কোর স্ট্রিংটি পুনরায় ব্যবহার করি এবং সুবিধার জন্য এগুলিকে স্পেসে পরিবর্তন করি, তবে তারপরে স্পেসটি শেষ লাইনের জন্য আন্ডারস্কোরগুলিতে ফিরিয়ে আনি। প্রতিটি লাইন তাঁবুর মাঝের একপাশ থেকে দুটি স্পেস সরিয়ে দেয়, যদিও প্রয়োজনে প্রথমে স্ট্রিংয়ের শুরুতে দুটি স্পেস সরানো সামান্য গল্ফিয়ার।


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