আমি চাই মধুচক্র


39

সংক্ষিপ্ততম প্রোগ্রামটি লিখুন যা ষড়ভুজাকৃতির টাইলিং বা মধুচক্রের এই ASCII শিল্প বিভাগটি মুদ্রণ করে :

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

13
তুমি কি প্রচুর কাতান খেলো?
ব্যবহারকারী 3490

@ ব্যবহারকারী 3490 আসলে আমি ^^ করি
ক্যালভিনের

2
পরের সপ্তাহে পিসিজিতে: একটি ক্যাটান বোর্ড জেনারেটর লিখুন?
ব্যবহারকারী 3490

7
এটিতে একটি ইনপুট আইএমও থাকা উচিত, আপনার ক্ষেত্রে এটি 3 হওয়া উচিত
ব্যবহারকারী 3819867

3
@ ব্যবহারকারী 3819867 আমি এটি বিবেচনা করেছি তবে এটি পছন্দ করেছি। পরিবর্তন হতে খুব দেরি হলেও কারও সাথে সম্পর্কিত চ্যালেঞ্জ জানাতে দেরি হয়নি।
ক্যালভিনের

উত্তর:


33

সিজেম, 45 43 42 41 40 বাইট

741e8 36+Ab"\__/  "38*21/.{G2$-<\S*.e<N}

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

কিভাবে এটা কাজ করে

"\__/  "38*21/

প্যাটার্নটি \__/ 38 বার পুনরাবৃত্তি করে এবং 21 টি দৈর্ঘ্যের অংশে বিভক্ত করে । খণ্ডগুলি যদি লাইনফিড দ্বারা আলাদা করা হয় তবে এটি ফলাফল হবে:

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

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

741e8 36+Ab

পূর্ণসংখ্যা 74 100 000 036 জেনারেট করে এবং এটিকে অ্যারে রূপান্তর করে [7 4 1 0 0 0 0 0 0 3 6] । প্রতিটি অ্যারে উপাদান সংশ্লিষ্ট লাইনের শীর্ষস্থানীয় অক্ষরের সংখ্যা এনকোড করে যা ফাঁকা স্থানগুলির সাথে প্রতিস্থাপন করতে হয়। থেকে এই সংখ্যা যতবার 16 , আমরা এই পথের সঠিক দৈর্ঘ্য প্রাপ্ত।

.{            } e# Execute for each pair of a digit D and a line L:
  G2$-<         e#   Chop off L after 16 - D characters.
       \S*      e#   Push a string of D spaces.
          .e<   e#   Compute the vectorized minimum.
             N  e#   Push a linefeed.

যেহেতু একটি স্পেসের এল এর অন্যান্য অক্ষরের তুলনায় একটি কোড কোড পয়েন্ট কম রয়েছে এবং ভেক্টরাইজড অপারেটরগুলি দীর্ঘ স্ট্রিংয়ের অক্ষরগুলি ছেড়ে দেয় যা সংক্ষিপ্ততর একটির সাথে সামঞ্জস্য করে না, .e<তাই প্রথম ডি বর্ণগুলিকে স্পেস দিয়ে প্রতিস্থাপন করে ।


2
এটা অসাধারণ. চমৎকার কাজ.
অ্যালেক্স এ।

28

পাইথন 2, 73

i=0
exec"k=max(7-i,i-24,0);print' '*k+('\__/  '*9)[i:][k:16-k];i+=3;"*11

এটি চালানো দেখুন।

11 টি আউটপুট সারিগুলির জন্য, শীর্ষস্থানীয় স্পেসের সংখ্যাটিকে kসর্বোচ্চ তিনটি লিনিয়ার ফাংশন হিসাবে গণনা করে যা ষড়্ভুজটির বাম পাশের খামটি তৈরি করে। কারণ তির্যক রেখার .ালু রয়েছে 3এবং -3সারি সংখ্যাটি সূচী করা ভাল i=0,3,...30

ষড়ভুজ জাল তৈরি করতে, আমরা প্রথমে ইউনিট পর্যাপ্ত পরিমাণে টাইলস '\__/ '। তারপরে, স্থানান্তরটি [i:]বিজোড় সারিগুলির জন্য এটি 3 দ্বারা পুনরায় স্বাক্ষর করে। পরিশেষে, আমরা প্রয়োজনীয় অংশ নিতে [k:16-k]এটি, একটি মার্জিন রেখে kবাম এবং ডান দিকে।


22

সিজেম, 65 56 55 বাইট

"Ý6TNð*¯5"303b4b["/\_")"_ "4*S]f=sB/z{_W%"\/"_W%erN}/

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

ধারণা

প্রতিটি লাইনের ডান অর্ধেকটি স্ল্যাশ এবং ব্যাকস্ল্যাশগুলি অদলবদল করে বাম অর্ধেকটির বিপরীত অনুলিপি। সুতরাং, মধুচক্রের বাম অর্ধেকটি এনকোড করা যথেষ্ট:

       _
    __/ 
 __/  \_
/  \__/ 
\__/  \_
/  \__/ 
\__/  \_
/  \__/ 
\__/  \_
   \__/ 
      \_

এই প্যাটার্ন রেখাটি রেখার দ্বারা বিশ্লেষণ করার পরিবর্তে, আমরা কলাম দ্বারা কলামটি এটি বিশ্লেষণ করতে পারি:

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

সুস্পষ্ট নিদর্শন উদ্ভূত:

  • স্ট্রিংটি _ _ _ _পাঁচবার ঘটে।
  • প্রত্যেকের /অনুসরণ করা হয় ক \

প্রত্যেক প্রতিস্থাপন /\, _, _ _ _ _0 থেকে 3 একটি সংখ্যা সঙ্গে এবং স্থান, আমরা একটি উচ্চ বেস বেস 4 নম্বর থেকে ফলের অ্যারে রূপান্তর এবং একটি কম্প্যাক্ট ফ্যাশন সম্পূর্ণ প্যাটার্ন সংরক্ষণ করতে পারেন।

কোড

"Ý6TNð*¯5"303b4b  e# Convert the string from base 303 to base 4.
["/\_")"_ "4*S]f= e# Replace each resulting digit by the corresponding item of the array
                  e# ["/\" "_" "_ _ _ _ " " "].
sB/               e# Split into strings of length 11.
z                 e# Zip: transpose rows with columns.
{             }/  e# For each string:
 _W%              e#     Push a reversed copy.
    "\/"_W%er     e#     Swap slashes and backslashes.
             N    e#     Push a linefeed.

10

সি, 148 144 140 বাইট

k,r,c,d,p;f(){for(;k<187;k++){r=k/17;c=k%17;d=c+r%2*3;p=3*r+c-7<33u&3*r-c+8<33u;putchar(c==16?10:p&(d+5)%6<2?95:p&d%6==3?47:!p|d%6?32:92);}}

শ্বেত স্পেস সহ, সংকলক সতর্কতা ছাড়াই এবং কয়েকটি বাইট সংরক্ষণ করার জন্য কিছু কোডের আগে টুইটগুলি:

#include <stdio.h>

int k, r, c, d, p;

void f() {
    for ( ; k < 187; k++) {
        r = k / 17;
        c = k % 17;
        d = c + 3 * (r % 2);
        p = 3 * r + c - 7 < 33u && 3 * r - c + 8 < 33u;
        putchar(
            c == 16 ? 10 :
            p && (d + 5) % 6 < 2 ? 95 :
            p && d % 6 == 3 ? 47 :
            p && d % 6 == 0 ? 92 :
            32);
    }
}

এই পদ্ধতির কোনও অক্ষর / স্ট্রিং সারণী ব্যবহার করে না। এটি সমস্ত 187 (11 সারি, নিউলাইনগুলি সহ 17 টি কলাম) জুড়ে যায় এবং শর্তগুলির সংমিশ্রণের ভিত্তিতে প্রতিটি অবস্থানের জন্য কোন অক্ষরটি প্রিন্ট করতে হবে তা স্থির করে।

অবস্থার হচ্ছে ভিতরে / বাইরে 4 কোণে একটি পরীক্ষামূলক, 4 লাইন সমীকরণ ব্যবহার পরিবর্তনশীল সঞ্চিত ফলাফল নিয়ে অন্তর্ভুক্ত p। বাকিগুলি তখন বেশিরভাগ প্রতি 6 টি অক্ষর পুনরাবৃত্তি করে, বিজোড় সারিগুলি 3 টি অক্ষর এমনকি সারিগুলির সাথে সম্পর্কিত হয়।


2
গল্ফযুক্ত একজনের জন্য, আপনি অন্তর্নির্মিত-ইন ব্যবহার করতে পারেন এবং ড্রপ করতে পারেন int
লুসার ড্রোগ

কয়েকটি অণু-উন্নতি:k;f(r,c,d,p){for(;k<187;putchar(c>15?10:p&d<2&p?95:p&d<3?47:!p|d-5?32:92))r=k/17,c=k++%17,d=(5+c+r%2*3)%6,p=3*r+c-7<33u&3*r-c+8<33u;}
ডেনিস


6

জাভাস্ক্রিপ্ট (ES6), 129 130

এটি একটি খাঁটি স্ট্রিং প্রতিস্থাপন / প্রতিস্থাপন / প্রতিস্থাপন ... কোনও জ্যামিতিক সম্পত্তির সুবিধা নিচ্ছেন না।

টেমপ্লেট স্ট্রিং ব্যবহার করে, সমস্ত নিউলাইনগুলি তাৎপর্যপূর্ণ এবং গণনাযোগ্য।

পরীক্ষার জন্য ফায়ারফক্সে স্নিপেট চালান

f=_=>`70
405
 055
9992 3051
6301`[R='replace'](/9/g,`55123
30551
`)[R](/5/g,1230)[R](/\d/g,n=>['__','/',,'\\'][n]||' '.repeat(n))

// TEST

O.innerHTML = f()
<pre id=O></pre>


6

পিএইচপি - 139 137 107 101 91 87 বাইট

আমি জানি না এটি এটি গল্ফ করার সর্বোত্তম উপায় কিনা তবে এখানে এটি আমার চেষ্টা:

30 36 46 -50 বাইট ইসমাইল মিগুয়েলকে ধন্যবাদ

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

<?='       __
    __',$a='/  \__',"
 __$a$a
",$c="$a$a/  \
\__$a$a/
","$c$c   \__$a/
      \__/";

<script src="http://ideone.com/e.js/WHWEZS" type="text/javascript" ></script>

পুরানো কোড:

<?php $a="/  \\__";$c=$a.$a."/  \\\n\__".$a.$a."/\n";echo "       __\n    __".$a."\n __".$a,$a."\n".$c,$c,$c."   \\__".$a."/\n      \\__/";

প্রোগ্রামিং ধাঁধা এবং কোড গল্ফ স্বাগতম। আপনার পিএইচপি কোডটি আরও অনেক কমানো যেতে পারে। আপনি 3 বাইট সংরক্ষণ করার <?পরিবর্তে ব্যবহার করতে পারেন <?php। পরিবর্তে $c=$a.$a."/ \\\n\__".$a.$a."/\n";, আপনি লিখতে পারেন $c="$a$a/ \\\n\__.$a$a/\n";(যেহেতু পিএইচপি স্ট্রিংগুলিতে ভেরিয়েবল প্রসারিত করে)। echoএর দৈর্ঘ্য আরও কমাতে আপনি একই যুক্তি প্রয়োগ করতে পারেন । এছাড়াও, আপনার echoস্ট্রিং এবং স্ট্রিংয়ের মাঝের জায়গার দরকার নেই ।
ইসমাইল মিগুয়েল

1
আপনাকে ধন্যবাদ, আমি যখনই গল্ফ হেতে চেষ্টা করি তখনই আমি নতুন কিছু শিখি।
টিমো

আপনি স্বাগত জানাই। এখানে একটি 99-বাইট দীর্ঘ সমাধান: আইডিয়োন . com / WHWEZS W এটি একটি জগাখিচুড়ি মনে হচ্ছে তবে এটি অনেক খাটো। ব্যবহারের পরিবর্তে \n, আপনি একটি সত্যিকারের নতুন লাইন রাখতে পারেন এবং প্রতি লাইনে 1 বাইট সংরক্ষণ করতে পারেন ।
ইসমাইল মিগুয়েল

এদিকে, আমি এটি 2 বাইট হ্রাস করেছি। এখন এটি 97 বাইট আছে।
ইসমাইল মিগুয়েল

1
এখানে একটি এক-লাইনের হল: <?="\t __\n\t__",$a='/ \__',"\n __$a$a\n",$c="$a$a/ \\\n\__$a$a/\n","$c$c \__$a/\n\t \__/";\tএকটি ট্যাব অক্ষর এবং \nএকটি বাস্তব নতুন লাইন দিয়ে প্রতিস্থাপন মনে রাখবেন ।
ইসমাইল মিগুয়েল

4

লুয়া 146

T="       __\n    __/  \\__\n __/  \\__/  \\__\n"
S="/  \\__/  \\__/  \\\n\\__/  \\__/  \\__/\n"
B="   \\__/  \\__/\n      \\__/"
io.write(T,S,S,S,B)

(স্পষ্টতার জন্য নতুন লাইন যুক্ত হয়েছে)


1
এই কোডটি কাঙ্ক্ষিত আউটপুটের চেয়ে বেশি দীর্ঘ নয় কেননা এতে কেবল আউটপুট প্লাস এস্কেটিং এবং স্ট্রিং হ্যান্ডলিং স্টাফ রয়েছে?
কালেব

6
@ কালেব: আমার সন্দেহ হয় আপনি আসলে গণনা করেন নি এবং কেবলমাত্র এই মন্তব্য করার ক্ষেত্রে অনুমান করেছেন। আমার পাঠ্য সম্পাদক অনুসারে, জালিতে 165 টি অক্ষর রয়েছে (নতুন লাইনের অন্তর্ভুক্ত)। Sতিনবার পুনরাবৃত্তি করার কারণে আমার 19 টি কম চরিত্র রয়েছে ।
কাইল কানোজ

2
তবে আপনি ঠিক বলেছেন যে পালানো এবং নিউলাইনগুলি এই বিশেষ খেলায় আমার কোডের প্রতিযোগিতা করার ক্ষমতা সীমাবদ্ধ করে। তবে জিততে হয় না কেন আমি এটি করি, এটি মজাদার এবং শেখার জন্য।
কাইল কানোজ 17'15

3

ডার্ট - 113

main({r:"/  \\__"}){print("       __\n    __$r\n __$r$r\n${"$r$r/  \\\n\\__$r$r/\n"*3}   \\__$r/\n      \\__/");}

খাঁটি স্ট্রিং-ইন্টারপোলেশন সলিউশন, অভিনব কিছুই নয়। "সাবস্ট্রিং" এর মতো স্ট্রিং অপারেশনগুলি অনুশীলনে প্রতিযোগিতা করতে খুব ভার্জোজ।

এটি ডার্টপ্যাডে চালান ।


3

জাভাস্ক্রিপ্ট ( ES7 খসড়া ), 96 94 93 বাইট

এখানে কয়েকটি সমাধান থেকে নেওয়া অনুপ্রেরণা ...

সম্পাদনা: -১ এডসি 65 থেকে

f=z=>[for(x of[741e6]+36)' '.repeat(x)+'/  \\__'.repeat(4,z^=3).slice(+x+z,16-x+z)].join(`
`)

// For snippet demo:
document.write('<pre>'+f()+'</pre>');

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

f=z=>[                                 
        for(x of [741e6] + 36)        // for each character "x" in "74100000036"
            ' '.repeat(x) +           // x spaces
            '/  \\__'.repeat(4,       // build pattern string
            z ^= 3).                  // toggle z offset (3) for even lines
            slice(+x + z, 16 - x + z) // get appropriate substring
    ].join(`                          // join with newlines
    `)

সুন্দর. .substr(+x+z,16-x-x)-> .slice(+x+z,16-x+z)-1
edc65

@ এডসি 65 চমৎকার ধরা!
nderscore

দ্রুত প্রশ্ন: কেন এটি ন্যায়বিচারের +xপরিবর্তে x?
নিক হার্টলি

1
@ কিপ্যায়েট্যাক্সস এটি xএকটি সংখ্যায় কাস্ট করা। এটি ব্যতীত, এটি z
সম্মিলিত

2

পাইথন 3, 100 87 বাইট

n=0x85208e08e08dd445
while n:l=n>>2&15;print(' '*(8-l)+('\__/  '*4)[n&3:n&3|l*2]);n>>=6

এবং নীচের কোডটির একটি পঠনযোগ্য সংস্করণ। ধারণাটি হ'ল অন্তরগুলি (শুরু, দৈর্ঘ্য) হার্ডকোড করুন এবং তারপরে অন্তরকে কেন্দ্র করার জন্য সঠিক পরিমাণ স্পেস দিয়ে প্যাড করুন।

hexagon_string = '\__/  ' * 4
for i in range(11):
    # Pick the begin and length of the i-th interval using hardcoded numbers
    b = (0x00030303111 >> 4*i) & 3   # n is a combination of these two numbers
    l = (0x25888888741 >> 4*i) & 15  #
    # Print the interval with appropriate whitespace in front of it
    spaces = ' ' * (8-l)
    print(spaces + hexagon_string[b : b+l*2])

2

রেটিনা , 66 বাইট

<empty line>
sss __<LF>ssa__<LF> aa__<LF>lll dau<LF>ssdu
l
/daa<LF>\aau<LF>
a
ud
u
__/
d
s\
s

প্রতিটি লাইনের নিজস্ব ফাইলে যাওয়া উচিত এবং ফাইলটিতে <LF>প্রকৃত নতুন লাইন হওয়া উচিত । বাইট-কাউন্টে অতিরিক্ত ফাইল প্রতি 1 বাইট যোগ করা হয়েছে।

আপনি -sপতাকাটি দিয়ে <LF>কোডটিকে একটি ফাইল হিসাবে চালাতে পারেন , চিহ্নিতকারীদের রেখে এবং সম্ভবত আপনি যদি ইচ্ছা করেন তবে পঠনযোগ্যতার জন্য আউটপুটে তাদেরকে নতুন লাইনে পরিবর্তন করতে পারেন।

অ্যালগরিদম খালি ইনপুট স্ট্রিং থেকে শুরু করে 5 টি সহজ বিকল্প পদক্ষেপ (বিজোড় লাইন সামগ্রী এমনকি লাইন সামগ্রীতে পরিবর্তন করুন)। প্রতিটি পদক্ষেপের পরে ফলাফলগুলি (এর দ্বারা সীমিত =):

sss __
ssa__
 aa__
lll dau
ssdu
============
sss __
ssa__
 aa__
/daa
\aau
/daa
\aau
/daa
\aau
 dau
ssdu
============
sss __
ssud__
 udud__
/dudud
\ududu
/dudud
\ududu
/dudud
\ududu
 dudu
ssdu
============
sss __
ss__/d__
 __/d__/d__
/d__/d__/d
\__/d__/d__/
/d__/d__/d
\__/d__/d__/
/d__/d__/d
\__/d__/d__/
 d__/d__/
ssd__/
============
sss __
ss__/s\__
 __/s\__/s\__
/s\__/s\__/s\
\__/s\__/s\__/
/s\__/s\__/s\
\__/s\__/s\__/
/s\__/s\__/s\
\__/s\__/s\__/
 s\__/s\__/
sss\__/
============
       __
    __/  \__
 __/  \__/  \__
/  \__/  \__/  \
\__/  \__/  \__/
/  \__/  \__/  \
\__/  \__/  \__/
/  \__/  \__/  \
\__/  \__/  \__/
   \__/  \__/
      \__/

1

জাভাস্ক্রিপ্ট, 154 151 বাইট

b="\n",c="\t",d="/  \\",f="__",g="\\",h="/",a=f+d,j=a+a,i=d+j+b+g+j+f+h+b,k="   ";console.log(c+k+f+b+c+a+f+b+" "+j+f+b+i+i+i+k+g+a+f+h+b+c+"  "+g+f+h)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.