ASCII আর্ট অফ দিবা # 1 - ডাবল নট


47

একটি সম্পূর্ণ প্রোগ্রাম বা একটি ফাংশন লিখুন যা Nএসটিডিআইএন / কমান্ড লাইন / এআরজিভি বা ফাংশন আর্গুমেন্টগুলির মাধ্যমে ইনপুট হিসাবে ইতিবাচক পূর্ণসংখ্যার গ্রহণ করে এবং STDOUT এর সাথে সম্পর্কিত একটি ASCII ডাবল নট প্রিন্ট করে N

ASCII ডাবল গিঁটটি এরকম দেখাচ্ছে:

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

উপরের জন্য N = 6

অন্যান্য মানগুলির জন্য এখানে আরও কয়েকটি ডাবল নট রয়েছে N:

যদি N = 1, আউটপুট ডাবল নট দেখতে লাগে:

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

জন্য N = 2, তার

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

জন্য N = 3, তার

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

এবং একইভাবে, প্যাটার্নটি চলতে থাকে এবং এর আরও বড় মান N

বিশদ :

  • ইনপুটটি সর্বদা এর চেয়ে বড় ধনাত্মক হয় 0
  • ট্রেলিং নিউলাইন optionচ্ছিক
  • হয় প্রতিটি লাইনে কোনও পিছনের স্থান না থাকা উচিত, বা প্রতিটি সারিটির দৈর্ঘ্য এমন পর্যাপ্ত স্থানের স্থান থাকতে হবে 4*N + 2
  • এমন কোনও অগ্রণী স্থান কখনই থাকা উচিত যা নির্দিষ্ট প্যাটার্নের অংশ নয়।

এটি , তাই বাইট জেতে সংক্ষিপ্ততম কোড।


সিরিজ লিডারবোর্ড

আমি এএসসিআইআই আর্ট চ্যালেঞ্জগুলির একটি সিরিজে রূপান্তর করছি এবং এইভাবে সিরিজের জন্য একটি লিডার বোর্ড যুক্ত করছি (মার্টিনের স্নিপেট)। আপনার উত্তরগুলি প্রদর্শিত হবে তা নিশ্চিত করার জন্য, দয়া করে নীচের মার্কডাউন টেমপ্লেটটি ব্যবহার করে প্রতিটি উত্তর শিরোনাম দিয়ে শুরু করুন:

# Language Name, N bytes

যেখানে এন আপনার জমা দেওয়ার আকার। আপনি যদি নিজের স্কোরটি উন্নত করেন তবে আপনি পুরানো স্কোরগুলি শিরোনামে রেখে দিতে পারেন। এই ক্ষেত্রে:

# Ruby, <s>104</s> <s>101</s> 96 bytes


এখনও পর্যন্ত সিরিজ

1. ডাবল নট

2. সাপ প্রবাহ

3. চীনা শ্রাইন

4. রাশিচক্র লক্ষণ

5. র্যান্ডম ডায়মন্ড Tilings


1
কেন এন = 3 এর জন্য ডান প্রান্তটি আলাদা?
অ্যাডিটসু

@ অদিতসু হা হা 4 দিন, 3 কে দর্শন, 11 টি উত্তর এবং আপনি এটির প্রথম ব্যক্তি হলেন: ডি। সংশোধন করা হয়েছে!
অপ্টিমাইজার

উত্তর:


12

সিজেম, 55 বাইট

এর দ্বারা আমি খুব খারাপভাবে ছদ্মবেশ পেয়েছি ... যাইহোক, অবশেষে আমি আইএসও 8859-1 এর 55 বাইট নিয়ে এসেছি :

"²îå<63Åhbغ¢dräOä[æTZ"246b5b"|_ \/"f=9/4/~2/\ri*2>*zN*

বা এই বিকল্প :

"ô/Ht]õDz1M;í,D¯Tmä$:r"246b5b"_/\ |"f=9/2/~+ri*2>\++zN*

প্রথমদিকে আমি এটি সরল ASCII তে করার চেষ্টা করেছি, তবে কেবল এটি 58 বাইটে নেমে গেছে :

"C]VA~`+-WIt*n_I?FanSEo*b"128b5b"_/|\ "f=9/4/~2/\ri*2>*zN*

এবং আবারও একটি বিকল্প :

"1,*Ap7c?UvI$yQHqHqs~=}n"153b5b"_ /|\\"f=9/2/~+ri*2>\++zN*

ব্যাখ্যা:

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

আমি বাম এবং ডান প্রান্ত একসাথে এইভাবে রাখলাম:

    
 /\ 
|  |
|  |
 \/ 
 /\ 
|  |
|  |
 \/ 

মাঝের প্যাটার্নটিতে 4 টি কলাম রয়েছে, তবে সেগুলি এন-0.5 বার পুনরাবৃত্তি করা হয়, অর্থাৎ একটি পুনরাবৃত্তি অর্ধেক কাটা হয়। সুবিধার জন্য, আমি এই প্যাটার্নটি ব্যবহার করেছি:

  __
\/  
/ /\
 /\/
/\ \
\/\ 
/ /\
 /\/
/\__

এবং প্রথম পুনরাবৃত্তির প্রথমার্ধটি সরিয়ে ফেলে।

তাই আমি সেই অংশগুলিতে যোগদান করেছি এবং ট্রান্সপোজড আকারে তাদের এনকোড করেছি, কারণ তাদের সাথে সেভাবে কাজ করা আরও সহজ। প্রথম এবং তৃতীয় প্রোগ্রামটি এই স্ট্রিংটিকে এনকোড করেছে:

 \/ /\/ /
 / /\/ /\
_ /\ \/\_
_ \/\ \/_
  ||  || 
 /  \/  \
 \  /\  /
  ||  || 

(নিউলাইনগুলি ছাড়াই), এটি মধ্যবর্তী + প্রান্তের স্থানান্তর। দ্বিতীয় এবং চতুর্থ প্রোগ্রাম ("বিকল্প") এই স্ট্রিংটিকে এনকোড করে:

  ||  || 
 /  \/  \
 \  /\  /
  ||  || 
 \/ /\/ /
 / /\/ /\
_ /\ \/\_
_ \/\ \/_

আবার, নিউলাইন ছাড়া, এবং এটি প্রান্ত + মাঝের স্থানান্তর।

কোডের এই সাধারণ অংশটি কীভাবে কাজ করে তা এখানে:

"…"        encoded string (constructed via the reverse process,
           using a suitable base that gives valid characters)
246b       convert the string to an integer, treating each character as a digit
           in base 246 (or other bases in the ASCII versions)
5b         convert the number to base 5, obtaining 72 digits from 0 to 4,
           representing the 5 different characters we have
"|_ \/"f=  convert the digits to their corresponding characters
           (each program uses a different assignment order)
9/         split the resulting strings into 8 strings of 9 characters
           if viewed as lines, they look exactly like the 2 patterns shown above

এর পরে, বাস্তবায়ন কিছুটা আলাদা হয়। প্রথম এবং তৃতীয় প্রোগ্রামে আমাদের রয়েছে:

4/     split the lines into groups of 4 - the middle part and the edges
~      dump the two 4-line parts onto the stack
2/     split the second part (the edges) into 2 groups of 2 lines
       (left edge and right edge)
\      swap the edges with the middle part
ri*    read the input, convert to integer (N) and repeat the middle part N times
2>     remove the first 2 lines (first half of first repetition)
*      join the 2 edges using the repeated middle part as a separator
z      transpose the result back to the desired form
N*     join with newlines

দ্বিতীয় এবং চতুর্থ (বিকল্প) প্রোগ্রামগুলিতে আমাদের রয়েছে:

2/     split the lines into groups of 2
       (left edge, right edge, middle first half, middle 2nd half)
~      dump all the groups onto the stack
+      join the two middle halves into a single middle group of 4 lines
ri*    read the input, convert to integer (N) and repeat the middle part N times
2>     remove the first 2 lines (first half of first repetition)
\      swap the repeated middle with the right edge
+      concatenate the middle with the right edge
+      concatenate the left edge with the rest
z      transpose the result back to the desired form
N*     join with newlines

আমি নিশ্চিত না যে কতক্ষণ আমি আরও 1>W<খাটো করার চেষ্টা করেছি । দেখা যাচ্ছে যে আমাকে কেবল অ্যারেড করার আগে অ্যারেটি ঘোরানো হয়েছিল এবং ব্যবহার করতে হবে 2>...
ডেনিস

23

সিজেম, 103 92 83 69 66 57 বাইট

"O5àäªÞáKZò,_÷%SJ«Ò"248b5b"/ \_|"f=9/4/~ri*1>W<+2m<zN*

সিজেএম ইন্টারপ্রেটারে এটি অনলাইনে চেষ্টা করুন ।

ধারণা

একবারে আমরা কলামগুলি দিয়ে সারিগুলি স্থানান্তর করে (ফাঁকা স্থান দিয়ে ডানদিকে প্যাড করে) প্যাটার্নটি আরও অনেক স্পষ্ট হয়ে ওঠে।

ইনপুট 3 এর জন্য, উদাহরণস্বরূপ, এটি দেয়:

  ||  || 
 /  \/  \
_ /\ \/\_
_ \/\ \/_
 \/ /\/ /
 / /\/ /\
_ /\ \/\_
_ \/\ \/_
 \/ /\/ /
 / /\/ /\
_ /\ \/\_
_ \/\ \/_
 \  /\  /
  ||  || 

প্রথম দুটি এবং শেষ দুটি সারি বিশেষ, তবে অন্যরা একই প্যাটার্নটি বারবার পুনরাবৃত্তি করে।

সুতরাং ইনপুট এন এর জন্য আমাদের যা করতে হবে তা হ'ল পুনরাবৃত্তি

 / /\/ /\
_ /\ \/\_
_ \/\ \/_
 \/ /\/ /

এন বার, প্রথম সারিটি এর সাথে প্রতিস্থাপন করুন

  ||  || 
 /  \/  \

সঙ্গে শেষ সারি

 \  /\  /
  ||  || 

এবং, অবশেষে, কলামগুলির সাথে সারিগুলি স্থানান্তর করুন।

কোড

"O5àäªÞáKZò,_÷%SJ«Ò"

248b  e# Convert the string (array of code points in base 248) to an integer.
5b    e# Convert the integer to the array of its digits in base 5.

      e# This pushes the following array:

      e# [ 1 2 1 1 0 2 1 1 0 1 1 4 4 1 1 4 4 1 1 1 4 4 1 1
      e#   4 4 1 1 0 1 1 2 0 1 1 2 1 0 1 0 2 0 1 0 2 3 1 0
      e#   2 1 2 0 2 3 3 1 2 0 2 1 2 0 3 1 2 0 1 0 2 0 1 0 ]

"/ \_"

f=    e# Retrieve the chars that correspond to the indexes in the array.

      e# This pushes the following string:

      e# " \  /\  /  ||  ||   ||  ||  /  \/  \ / /\/ /\_ /\ \/\__ \/\ \/_ \/ /\/ /"

9/4/~ e# Divide into groups of 4 strings of length 9.

      e# This pushes the following arrays:

      e# [ " \  /\  /"   "  ||  || "   "  ||  || "   " /  \/  \" ]
      e# [ " / /\/ /\"   "_ /\ \/\_"   "_ \/\ \/_"   " \/ /\/ /" ]

ri    e# Read an integer from STDIN.
*     e# Repeat the last array that many times.
1>W<  e# Remove the first and last string from the array.
+     e# Concatenate both arrays.
2m<   e# Rotate the concatenated arrays two elements to the left.
z     e# Zip the array of strings (transpose rows with columns).
N*    e# Join the strings of the array, separating by linefeeds.

12

জাভাস্ক্রিপ্ট ( ES7 খসড়া ), 169 163 160 158 বাইট

সম্পাদনা: -6 প্যাটার্ন স্ট্রিং থেকে কিছু পুনরাবৃত্তি দূর করতে একটি টেম্পলেট স্ট্রিং ব্যবহার করে।

সম্পাদনা: -3 থেকে সুইচিং দ্বারা slice(0,-2)করা slice(2)প্যাটার্ন স্ট্রিং সাজানোর দ্বারা।

সম্পাদনা করুন: -2 এর bপরিবর্তে লুপিং করে aএবং aএকটি মডুলোর সাহায্যে স্ট্রিং 4 এ কমিয়ে দিন ।

F=N=>[(a='  ||'[i%4])+b[i]+`  __0\\/ ${c=' 0/ /\\0 /\\/0/\\'} \\0\\/\\${c}__`.split(0)[i].repeat(N).slice(2)+(b+b)[9-i]+a for(i in b=' /  \\/  \\')].join(`
`)
<input id="stdin" value="4" />
<button onclick="stdout.innerHTML=F(stdin.value)">Run</button><br />
<pre id="stdout"></pre>

মন্তব্য করেছে:

F=N=>[ // define function F, start array comprehension to generate each line
    (a = '  ||'[i % 4]) + // first character of the line, store copy in a
    b[i] + // second character of each line
        `  __0\\/ ${c=' 0/ /\\0 /\\/0/\\'} \\0\\/\\${c}__`. 
        // list of patterns for each line delimited by 0's
        // results in string: '  __0\/  0/ /\0 /\/0/\ \0\/\ 0/ /\0 /\/0/\__'
        split(0)[i]. // split by 0, get index at i
        repeat(N). // repeat N times
        slice(2) + // chop off the first 2 characters
    (b + b)[9 - i] + // get opposite of second character, b+b to get a space at index 9
    a // repeat first character (a)
    for(i in b = ' /  \\/  \\') // runs for each index in character map b
].join(` // join resulting array with newlines
`)

আমার মনে হয় আপনি আগে স্ট্রিং প্রতিস্থাপন করতে পারেন .split(0)সঙ্গে ('__ 0 '+(r='\\/0/\\/ 0\\/ /0 ')+r+'0\\/ /0__/\\')
flawr

@ ফ্লাওয়ার আমি এ জাতীয় পদ্ধতি ব্যবহার করে আরও কমিয়ে আনতে সক্ষম হয়েছি :)
nderscore

আপনি যদি 0এটি পাস করেন তবে আপনি একটি দেখতে পাবেন 8
ইসমাইল মিগুয়েল

এগুলি `` এবং ${...}ঠিক কী করে?
flawr

@ ফ্লোয়ার ব্যাকটিক `সিনট্যাক্স একটি টেম্পলেট স্ট্রিং ঘোষণা করে । ভিতরে ${}থাকা যেকোন কিছুই জাভাস্ক্রিপ্ট এক্সপ্রেশন হিসাবে মূল্যায়ন করা হয়।
nderscore

9

পার্ল, 134 129

print s/...\K.{4}/$&x~-"@ARGV"/er=~y!iolp!| /\\!r,$/for
map/i/?$_.oi:"o$_$_".o,o__o,loop,@x=(iolplolp,ioplolpl),popl,lpop,@x,p__l

কমান্ড লাইন প্যারামিটার নেয়:

$ perl ~/knot.pl 3
  __  __  __  
 /  \/  \/  \ 
| /\/ /\/ /\ |
| \/ /\/ /\/ |
 \ \/\ \/\ \/ 
 /\ \/\ \/\ \ 
| /\/ /\/ /\ |
| \/ /\/ /\/ |
 \__/\__/\__/ 

8

জাভাস্ক্রিপ্ট ( ES6 ), 165 166

নট উপাদানসমূহ:

  • '__' এবং '/ \' পুনরাবৃত্তি উপর ভিত্তি করে 2 শীর্ষ সারি
  • '/ \ /' পুনরাবৃত্তি এবং সংযুক্ত '| এর উপর ভিত্তি করে 2 বাহ্যিক সারি ... | '
  • '/ / \' এর উপর ভিত্তি করে 2 'অভ্যন্তরীণ সারিগুলি' ... / 'এবং' / ... \ 'এ পুনরাবৃত্তি করা হয়েছে
  • উপরে 2 বহিরাগত সারি
  • '\ __ /' এর উপর ভিত্তি করে 1 নীচের সারিটি পুনরাবৃত্তি হয়েছে

Ungolfed

K=r=>
{
  R = x => x.repeat(r);
  S = d => R(elem).slice(d,d-2); // use global 'elem' that must be assigned before the call
  elem = '/\\/ '
  outer = '\n| ' + S(0) + ' |\n| ' + S(1) + ' |\n '
  elem = '\\ \\/'
  inner = '\\' + S(1) + '/\n /' + S(0) + '\\'
  return R('  __') + '\n ' + R('/  \\') + outer
  + inner + outer + R('\\__/')
}

Golfed

K=r=>(S=d=>(R=e=>e.repeat(r))(e).slice(d,d-2),o=`
| ${S(0,e='/\\/ ')} |
| ${S(1)} |
 `,R('  __')+`
 ${R('/  \\')+o}\\${S(1,e='\\ \\/')}/
 /${S(0)}\\${o}`+R('\\__/'))

// TEST

function go() {
  O.innerHTML=K(I.value)
}

go()
<input id=I value=5><button onclick='go()'>-></button><br>
<pre id=O></pre>


2
0এটিতে যাওয়ার চেষ্টা করুন এবং আপনি একটি 4-পায়ে মাকড়সা পাবেন।
ইসমাইল মিগুয়েল

8

সি ++, 1530 639 479

এটি একটি মজাদার চ্যালেঞ্জের মতো দেখলাম আমি সংক্ষিপ্ত থেকে কিছুটা দূরে সরে গেলাম।

#include "stdafx.h"
#include <iostream>
#include <sstream>
using namespace std;
string a=" __ ",b="/  \\",c=" /\\",d="/\\/ ",f="\\ \\/",g="/\\\ \\",r="\\__/",o="",e=o,j="|";
string q(int n,string r,string x="",string m=" ",string t=" "){string z=o;for(int i=0;i<n;i++){z+=r;if(i!=n-1)z+=x;}return m+z+t+"\n";}
int main(){int x,y;cin>>x;cin>>y;e+=q(x,a)+q(x,b);for(int i=0;i<y;i++){e+=q(x,c,"/",j," |")+q(x-1,d,o,"| \\/ ",j);if(i!=y-1){e+=q(x,f)+q(x,g);}}e+=q(x,r);cout<<e;}

আমার আবেদনের আকারের বাইটগুলি কীভাবে পরিমাপ করা যায় তা আমি নিশ্চিত নই তবে আমি এটিটি বের করে দেখার চেষ্টা করব এবং আমার উত্তর আপডেট করব।

আমার অ্যাপ্লিকেশনটি ছোট হতে পারে তবে এটি x এবং y উভয় ক্ষেত্রেই লুপ হয়ে যায় এবং আমি এর মতো করে থাকি: ডি


1
পিপিসিজিতে আপনাকে স্বাগতম! আপনার স্কোরটি আপনার উত্স কোডের আকার, যা এটি 1530 বাইট হিসাবে। আপনি মন্তব্য এবং সাদা স্থান সরিয়ে, এবং ভেরিয়েবল এবং ফাংশন নামগুলি ছোট করে বাইটগুলি সংরক্ষণ শুরু করতে পারেন।
ডেনিস

ওয়াওজোর আরও বড় হয় তবে বাকি হা হা আমি তা নামানোর জন্য কাজ করব: ডি
স্পেসম্যান

6

পাইথন 2, 156 151 147 141 139

সম্পাদনা 1: কোনও ফাংশনের পরিবর্তে ইনপুট () ব্যবহার করতে সম্পাদিত।

সম্পাদনা 2: str.join ব্যবহৃত হয়েছে এবং কিছু অপ্রয়োজনীয় অক্ষর অপসারণ করতে var সিতে যুক্ত হয়েছে।

3 সম্পাদনা করুন: কিছু অপ্রয়োজনীয় স্ট্রিং এস্কেপ ক্রমগুলি সরানো হয়েছে।

4 সম্পাদনা করুন: a = n-1 এর পরিবর্তে ~ -n ব্যবহার করেছেন

এটি প্রোগ্রামে আমার খুব ভাল মজা ছিল, আমার প্রথম কোড গল্ফ!

n=input()
a='/\/ '*~-n
b='\ '+'\/\ '*~-n+'\\'
c='\n| '+a+'/\ |\n| \/ '+a+'|'
print'\n '.join(('  __'*n,'/  \\'*n+c,b+'/','/'+b+c,'\__/'*n))

ফাইলের আকারটি 1 বাইট দ্বারা হ্রাস করতে, মডিউলটি চালনা করতে এবং আপনার নম্বরটি ইনপুট করতে সর্বশেষ নিউলাইন অক্ষরটি সরিয়ে নেওয়ার জন্য এটিকে একটি বাহ্যিক পাঠ্য সম্পাদককে এন.পি.পি হিসাবে সংরক্ষণ করুন।


আপনি যদি প্রোগ্রামগুলি সম্পাদনের বিবৃতি দেওয়ার পরে ঠিক সংখ্যাটি প্রবেশ করার অনুমতি দেন তবে আমি আরও 151 বাইটে নামিয়ে দিতে পারি
মাইক্রোথপিক

সাধারণত input ()STDIN থেকে পড়ার সময় ঠিকঠাক হিসাবে বিবেচিত হয়।
সেকেন্ডে

আমি দেখতে পেয়েছি আপনি দুবার a=n-1লেখার জন্য সঞ্চয় *(n-1)করতে পেরেছেন, তবে আপনি তা করেন*~-n
xnor

এখনও একই পরিমাণে অক্ষর উভয় উপায়ে, কারণ আমি দুটিবার মানটি ব্যবহার করি তবে ভাল টিপ।
micsthepick

পাইথনটি স্ট্রিংগুলিতে যেভাবে ব্যাকস্ল্যাশগুলি পরিচালনা করে আপনি কিছু বাইট সংরক্ষণ করতে পারেন, আপনাকে সর্বদা এগুলি এনকোড করার দরকার নেই। দেখুন stackoverflow.com/a/16973452/3351622
Matty

5

পাইথন 2, 139 133 129 বাইট

n=input()
for i in range(9):w=' ?|'[i&2];s=' / /\/ /\_ /\ \/\__ \/\ \/_ \/ /\/ /'[i::9]*n;s=(s,' %s '%s[1:-1])[i%4>1];print w+s+w

এই এক সারি লাইন তৈরি করে এবং মুদ্রণ করে।

বর্ণহীন আকারে কোডটি এখানে:

n=int(input())
# The list with all the knot pieces
l= [' __ ',
    '/  \\',
    ' /\/',
    '/\/ ',
    '\ \/',
    '/\ \\',
    ' /\/',
    '/\/ ',
    '\__/']
# The first and last columns
w = '  ||  || '
# Loop for each row
for i in range(9):
    # Exception for the first and last character in the knot (in some rows)
    s = l[i]*n
    if i % 4 > 1:
        s = ' ' + s[1:-1] + ' '
    # Print the knot for this row
    print(w[i] + s + w[i])

সম্পাদনা করুন: আমি # 3 এর উত্তরটির সাথে সামঞ্জস্য রাখতে আমি অজগর 2 তে ভাষা পরিবর্তন করেছি (এবং এটি আরও 6 টি বাইট সংরক্ষণ করে)


আমি বিশ্বাস করি w=(3*' ||')[i] -> w=' |'[i&2]এবং ' '+s[1:-1]+' ' -> ' %s '%s[1:-1]কাজ করি (প্রথমটি দুটি জায়গার পরে একটি পাইপ পরে স্ট্রিং হয় তবে এসই এর অভিনয়)
Sp3000

@ Sp3000 ধন্যবাদ! প্রথমটি বেশ স্মার্ট। আমার কথা ভাবা উচিত ছিল ' ||'[i%4], তবে এটি আরও ছোট ( দুটি স্পেস সহ)।
ম্যাটি

3

সি, 159 বাইট

j,k;f(n){char*t="7>771I;M6CMI93;IIB;;MI1M;M6CMI93;IIB;>MI";for(n*=4;t[j/2];++k,k%=n+3,j+=k-n?k%n<3||k%4-2?1:-3:3)putchar("\n _|/\\"[(t[j/2]-48)/(j%2?1:6)%6]);}

সাদা স্থান এবং কিছু অন্যান্য পাঠযোগ্যতার উন্নতি সহ:

#include <stdio.h>

int j, k;

void f(int n) {
    char *t = "7>771I;M6CMI93;IIB;;MI1M;M6CMI93;IIB;>MI", *m = "\n _|/\\";
    for (n *= 4; t[j / 2];
         ++k,
         k %= n + 3,
         j += k - n ? k % n < 3 || k % 4 - 2 ? 1 : -3 : 3)
        putchar(m[(t[j / 2] - 48) / (j % 2 ? 1 : 6 ) % 6]);
}

এটি মূলত টেম্পলেট ভিত্তিক। টেমপ্লেটে tআউটপুটটির সমস্ত 9 টি সম্ভাব্য কলাম রয়েছে, এর অর্থ এটি 9 * 9 = 81 টি অক্ষর, বা 80 টি পিছনে থাকা নতুন লাইন ছাড়াই এনকোড করে।

যেহেতু প্যাটার্নে কেবলমাত্র 6 টি পৃথক অক্ষর রয়েছে (নিউলাইন অক্ষরগুলি সহ), আমি সেগুলির কয়েকটি জোড়া একটি টেম্পলেট অক্ষরে প্যাকেজ করেছি, যার অর্থ টেমপ্লেটটি 40 টি অক্ষরে সংরক্ষণ করা যেতে পারে। সেখানে পরে যে অক্ষরগুলি 6 * 6 = 36 সম্ভব জোড়া, যা ASCII অক্ষর 48 73. মূল চরিত্রের অনুবাদ ফিরে ছোট লুকআপ টেবিল দেওয়া হয় যেমন এনকোড করা হয় m

বাকি যুক্তি হ'ল মূলত প্যাটার্ন nসময়গুলি পুনরাবৃত্তি করা যার অর্থ প্রতিটি সারিটির শুরু এবং শেষ অংশগুলি সঠিকভাবে নির্গত করার সময় টেমপ্লেটে 4 টি অক্ষর পিছনে ঝাঁপিয়ে পড়া।


2

পিএইচপি 5.5.3, 488 , 466

<?php 
function k($n){$r=array_fill(0,9,'');for($i=0;$i<$n;$i++){$r[0].=($i==0)?"  __ ":" __ ";$r[1].=($i==0)?" /  \\":"/  \\";$r[2].=($i==0)?"| /\\/":(($i==$n-1)?" /\\ |":" /\\/");$r[3].=($i==0)?"| \/ ":(($i==$n-1)?"/\/ |":"/\/ ");$r[4].=($i==0)?" \\ ":(($i==$n-1)?"\\/\\ \\/":"\\/\\ ");$r[5].=($i==0)?" /\\ ":(($i==$n-1)?"\\/\\ \\":"\\/\\ ");$r[6]=$r[2];$r[7]=$r[3];$r[8].=($i==0)? " \__/":"\__/";}foreach($r as $o){if(strlen($o)-2 !== 4*$n)$o.=" ";echo $o."\n";}}

অপারেটরগুলির আশেপাশে কিছু অপ্রয়োজনীয় শ্বেতস্পেস সরিয়ে আপনি কিছু অক্ষর সংরক্ষণ করতে পারেন, উদাহরণস্বরূপ =এবং এটির চারপাশে .=
প্রোগ্রামফক্স

ধন্যবা আমি উত্তর সম্পাদিত
মেড

2

প্রোলোগ (এসডাব্লুআই), 285 বাইট

a(N):-b(N,"  ||  || "," /  \\/  \\","_ /\\ \\/\\_","_ \\/\\ \\/_"," \\/ /\\/ /"," / /\\/ /\\"," \\  /\\  /"). b(N,[A|G],[B|H],[C|I],[D|J],[E|K],[F|L],[Y|Z]):-c(N,[Y,A],[E,F,C,D],T),writef([A,B,C,D|T]),nl,b(N,G,H,I,J,K,L,Z). c(1,L,_,L):-!. c(N,L,X,O):-M is N-1,c(M,L,X,T),append(X,T,O).

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

a(N):-
    b(N,
    "  ||  || ", 
    " /  \\/  \\", 
    "_ /\\ \\/\\_", 
    "_ \\/\\ \\/_", 
    " \\/ /\\/ /", 
    " / /\\/ /\\", 
    " \\  /\\  /").

b(N,[A|G],[B|H],[C|I],[D|J],[E|K],[F|L],[Y|Z]):-
    c(N,[Y,A],[E,F,C,D],T),
    writef([A,B,C,D|T]),
    nl,
    b(N,G,H,I,J,K,L,Z).

c(1,L,_,L):-!.
c(N,L,X,O):-
    M is N - 1,
    c(M,L,X,T),
    append(X,T,O).

আমি স্ট্রিংগুলি কাটার কয়েকটি উপায়ে চেষ্টা করেছি, তবে কেউই এই নিষ্পাপ কলাম পদ্ধতিটিকে পরাস্ত করতে পারে নি।


2

জাভাস্ক্রিপ্ট (ES6), 158 154 148 137 বাইট

n=>`    __
 /\\/ - \\/
 /\\/\\-__/`.replace(/-/g,` \\
| / /\\ |
|  /\\/ |
 \\/\\`).replace(/(..)(....)/g,(_,l,m)=>l+m.repeat(n).slice(2))

সম্পাদনা করুন: @ বুলিন্টের জন্য 11 বাইট সংরক্ষণ করা হয়েছে।


@ বুলিন্ট তবে /(..)(.{4})/g13 বাইট, একইরকম /(..)(....)/g...
নিল

@ বিলিন্ট আমি আসলে বুঝতে পেরেছিলাম যে আমার আগের 4-বাইট সঞ্চয় আমাকে তা করার অনুমতি দিয়েছে, কিন্তু আমি তখন কম্পিউটার থেকে দূরে ছিলাম।
নিল

@ বিলিন্ট সুন্দর! আমি পুনরাবৃত্তি \\ / \\ বিভাগটি এড়িয়ে গিয়ে দেখেছি কিন্তু আমি আর দীর্ঘ পুনরাবৃত্তি করা স্ট্রাস্টিং পরীক্ষা করার চিন্তা করিনি।
নীল

1

জাভা, 339 330 বাইট

class D{int n,i;public static void main(String[]a){new D(new Integer(a[0]));}D(int k){n=k;r("  __");p("\n ");r("/  \\");c();r("\\ \\/");p("\n ");r("/\\ \\");c();r("\\__/");}void c(){p("\n|");--n;r(" /\\/");p(" /\\ |\n| \\/");r(" /\\/");++n;p(" |\n ");}void p(String s){System.out.print(s);}void r(String s){for(i=n;i>0;--i)p(s);}}

আমার প্রথম সমাধানটিতে এতগুলি "স্থিতিশীল" কীওয়ার্ড ছিল যে পদ্ধতিগুলি এবং বৈশিষ্ট্যগুলিকে অ স্থিতিশীল করা এবং কনস্ট্রাক্টরে কোডটি চালানো সংক্ষিপ্ত ছিল।


1

পাওয়ারশেল, 228 207 181 133 বাইট

%{"  "+"__  "*$_;" "+"/  \"*$_;$b="|"+" /\/"*$_+"`b |";$b;$c="| "+"\/ /"*$_+"`b|";$c;" "+"\ \/"*$_;" "+"/\ \"*$_;$b;$c;" "+"\__/"*$_}

অনুস্মারক - পাওয়ারশেল স্বয়ংক্রিয়ভাবে স্টিডিনের জন্য অপেক্ষা করে না। আপনাকে কিছুতে পাইপ দিতে হবে, যেমন3|%{...}


0

স্মাইলব্যাসিক, 149 বাইট

INPUT N?"  __"*N
A$="| / /\ |
B$="|  /\/ |
K" /\/  \
K A$K B$K" \/\ \/
K" /\/\ \
K A$K B$K" \/\__/
DEF K A?SUBST$(A,2,4,MID$(MID$(A,2,4)*N,2,N*9))END

প্রতিটি স্ট্রিং প্যাটার্ন রয়েছে AACCBBDDযা গঠনের সম্প্রসারিত হয় অংশ এন বার, তারপর প্রথম 2 অক্ষর সরিয়ে ফেলা হয় পুনরাবৃত্তি করা হয়। (শুরু থেকে অক্ষরগুলি সরানো শেষের চেয়ে কম ছিল)AABB(CCBB)*DDCCBB

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