ফ্র্যাক্টাল ক্যাথেড্রাল


22

ধনাত্মক পূর্ণসংখ্যা দেওয়া n >= 1, nনিম্নলিখিত কাঠামোর প্রথম সারি আউটপুট করুন :

   #
  # #
  ###
 #   #
 # # #
 ## ##
 #####
#     #
#  #  #
# # # #
# ### #
##   ##
## # ##
### ###
#######

n-Th 1-সূচীবদ্ধ সারির বাইনারি উপস্থাপনা n, সঙ্গে শেষ অক্ষর অনুলিপি ছাড়া প্রতিফলিত, #1 স্থানে এবং <space>0. সকল সারির জায়গায় কেন্দ্রীভূত করছে।

আপনাকে অবশ্যই ASCII- আর্ট হিসাবে আউটপুট দিতে হবে #তবে উদাহরণ হিসাবে আমি যেখানে ব্যবহার করি সেখানে আপনি কোনও অ-হোয়াইটস্পেস অক্ষর ব্যবহার করতে পারেন । শ্বেত স্পেস অনুসরণ করার অনুমতি দেওয়া হয় এবং একটি ট্রেলিং নিউলাইন অনুমোদিত। আউটপুট অবশ্যই উদাহরণের মতো দেখতে হবে এবং অতিরিক্ত নেতৃস্থানীয় হোয়াইটস্পেস বা শীর্ষস্থানীয় নিউলাইনগুলি নেই।

আপনি এখানে ফ্র্যাক্টাল ক্যাথেড্রালের প্রথম 1023 টি সারি দেখতে পারেন ।

বৃহত্তর পরীক্ষার কেস উত্পন্ন করার জন্য, পাইথনে এখানে একটি অব্যক্ত রেফারেন্স প্রয়োগকরণ


ভাল যুক্তি. আমি বাইনারি সংখ্যাগুলি অনুমান করতে পারি না যে এ জাতীয় চমত্কার শিল্পটি তৈরি করেছে।
জোনা

@ জোনাহ ধন্যবাদ :) আপনাকে
এটুকু

7
উভয় লিঙ্কই জেনারেটেড ক্যাথেড্রালের দিকে ইঙ্গিত করছে।
ওটিভিও

@ ওটিভিও: আমি সংশোধন করব, ধন্যবাদ
হাইপারনিউটারিনো

উত্তর:


6

এমএটিএল , 10 বাইট

:B2&Zv35*c

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

ব্যাখ্যা

:      % Implicitly input n. Push range [1 2 ... n]
B      % Convert to binary. Gives a matrix where each row corresponds to
       % a number. Rows have left-padding zeros if needed
2      % Push 2
&Zv    % Symmetrize along sepecified dimension (2nd means horizontally),
       % without repeating the last element
35*    % Multiply by 35 (ASCII code for '#')
c      % Convert to char. Char 0 is shown as space. Implicitly display

1
আমি অবাক হই যদি 35 টির সাথে গুণিত হওয়ার সাথে সাথে চরকে রূপান্তর করার সাথে সাথে এমন কোনও বিল্টিন যুক্ত করা সহায়ক হয়। এটি প্রায়শই ব্যবহৃত হবে বলে মনে হয়
কনর ও'ব্রায়ান

@ কনোরো ব্রায়েন এটি প্রায়শই ব্যবহৃত হয়, হ্যাঁ। তবে এটি একটি দ্বি-চর অন্তর্নির্মিত হবে, সুতরাং কোনও লাভ হবে না
লুইস মেন্ডো

কোন অর্জন নেই? 35*c4 টি অক্ষর
কনর ও'ব্রায়ান

@ কনরও'ব্রায়েন আহ, তুমি 35ঠিক করেছ ? এটা কিছু নির্দিষ্ট মনে হয়। অন্যদিকে, কিছু চ্যালেঞ্জ যে কোনও চরকে মঞ্জুরি দেয়, তাই এটি ভাল ধারণা হতে পারে। আপনি কি মনে #করেন সবচেয়ে সাধারণ?
লুইস মেন্ডো

2
রেফারেন্সের জন্য, এই বৈশিষ্ট্যটি কার্যকর করা হয়েছে ( Zcচরিত্রের সাথে ফাংশন 35, অর্থাত্ #)। ধন্যবাদ, @ কনরও'ব্রায়ান!
লুইস মেন্ডো


4

1
আমারও যেতে হবে, তাই আমি ফিরে এলে মন্তব্যগুলি পড়ব। নির্দ্বিধায় আমাকে গল্ফ করুন
লিকি নুন

"আমাকে আউটগল্ফ করতে নির্দ্বিধায়" এবং ভাল উত্তরের জন্য +1।
ম্যাজিক অক্টোপাস উরন

3

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

n=input()
for x in range(n):s=bin(2**len(bin(n))/4+x+1)[3:].replace(*'0 ');print s+s[-2::-1]

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

পাইথন 3- s=f'{x+1:0{len(bin(n))-2}b}'.replace(*'0 ')তে সংক্ষিপ্ত, তবে যুক্তির int(input())আশেপাশে প্যারেনগুলি printএটিকে 95 বাইট পর্যন্ত ধাক্কা দেয়।


এটি আমার একটি অনুলিপি :) (তবে 2**len(bin(n))/4
যে কোনওভাবেই

3

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

1অ-হোয়াইটস্পেস অক্ষর হিসাবে ব্যবহার করে।

f=(n,k=0)=>k++<n?[...Array(32-Math.clz32(n))].reduce((s,_,i)=>(c=k>>i&1||' ')+s+(i?c:''),'')+`
`+f(n,k):''

ডেমো

বিকল্প সংস্করণ (একই আকার)

ছাড়া Math.clz32() :

f=(n,a=[k=i=0])=>n>>i+1?f(n,a,a[++i]=i):k++<n?a.reduce((s,i)=>(c=k>>i&1||' ')+s+(i?c:''),'')+`
`+f(n,a):''

1
খুব সুন্দর! আমি প্রথমবার দেখেছি Math.clz32- আমি জানি না যে এর অস্তিত্ব আছে!
বিরজোলাক্সিউ

@ বিরজোলাক্সিউ ইউ, এটি একটি ES6 সংযোজন। এটি একবারে একবারে কাজে আসে।
আর্নল্ড

3

কুয়াশা , 21 20 18 বাইট

@ জগারবকে 2 বাইট বন্ধ করে দেওয়ার জন্য ধন্যবাদ!

S↑(tfS=↔ΠR" #"←DLḋ

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

Ungolfed / ব্যাখ্যা

দীর্ঘ প্যাডিং এড়াতে, এটি ফ্র্যাক্টালটির প্রস্থ নির্ধারণ করে যা প্রদত্ত হয় 2*len(bin(N))-1এবং চিহ্নগুলির সাহায্যে দৈর্ঘ্যের সমস্ত ক্রম উত্পন্ন করে#,_ ('_' একটি স্থানকে চিহ্নিত করে)।

যেহেতু কার্টেসিয়ান শক্তি ক্রমানুসারে উত্পন্ন এবং বাইনারি সংখ্যাগুলি খুব বেশি, এটি ঠিক আছে। এই মুহুর্তে ফ্র্যাক্টাল পেতে আমাদের যা করতে হবে তা সমস্ত প্যালিনড্রোমগুলি ফিল্টার করছে এবং এটি মূলত এটি:

                    -- implicit input N
S↑(                 -- take N from the following list
        ΠR" #"      --   Cartesian power of [" #"] to
                Lḋ  --     number of bits in bin(N)
               D    --     2*
              ←     --     -1
    fS=↔            --   filter out palindromes
   t                --   drop the first line (all spaces)

1
Ṙ;ন্যায়বিচারী হতে পারে Rএবং ȯঅপ্রয়োজনীয় is ভাল উত্তর আইডিয়া!
জাগারব

2

গণিত, 94 বাইট

Column[Row/@Table[s=IntegerDigits[i,2];Join[s,Reverse@Most@s]/.{0->" ",1->"#"},{i,#}],Center]&

2
আমাকেও সত্যি যেতে হবে ...
J42161217

2

গণিত, 98 বাইট

Riffle[Nest[ArrayFlatten@{{0,#,0},{1,0,1},{1,#,1}}&,{1},⌊Log2@#⌋]~Take~#"#"/. 0->" ","
"]<>""&

ওল্ফ্রাম স্যান্ডবক্সে এটি ব্যবহার করে দেখুন ! এবং তিন প্রতিটি বাইট।

প্যাটার্নটির ফ্র্যাক্টাল প্রকৃতি ব্যবহার করে এটি এখন পর্যন্ত অন্যান্য উত্তরগুলির থেকে পৃথক পদ্ধতির। মূল পদক্ষেপটি হ'ল ArrayFlatten@{{0,#,0},{1,0,1},{1,#,1}}&, যা হ'ল ভাঙ্গা উপাদানগুলি চিত্রের আকারে সবচেয়ে ভাল ব্যাখ্যা করা হয়েছে:

                 [    ]
                 [grid]
[    ]           [    ]
[grid]   --->   #      #
[    ]          #[    ]#
                #[grid]#
                #[    ]#

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



2

পাইথন 2 , 120 118 107 বাইট

ধন্যবাদ @ লুইসমেডো, @ আফিসিয়ালাইম, @ হালওয়ার্ড-হুমেল

def f(l):
 for a in range(1,l+1):print(bin(a)[2:]+bin(a)[-2:1:-1]).replace(*'0 ').center(len(bin(l+1))*2-4)

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


2
replace(*'0 ') 2 বাইট জন্য
অফিসিয়ালাইম


2

সি # (.নেট কোর) , 192 178 বাইট 168 + 23

সহায়তার জন্য আপনাকে ধন্যবাদ TheLethalCoder।

x=>new int[x].Select((_,z)=>Convert.ToString(z+1,2).PadLeft((int)Math.Log(x,2)+2).Replace('0',' ')).Aggregate((y,z)=>y+"\n"+z+new string(z.Reverse().Skip(1).ToArray()))

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

এটি নিশ্চিত হ'ল এটি অনেকটা কমে যেতে পারে, সম্ভবত স্ট্রিংয়ের প্যাডিং এবং বিপরীতে।


পিপিসিজিতে আপনাকে স্বাগতম! এই মুহুর্তে এই উত্তরটি কেবল একটি কোড স্নিপেট। x=>বাইট কাউন্টে বাইট যোগ করে এটি ঠিক করা যেতে পারে এবং নোট করুন যে আপনাকে পিছনে যাওয়া অর্ধ-কোলন অন্তর্ভুক্ত করার দরকার নেই। Enumerable.Range(1,x).Select(zসংক্ষিপ্ত হিসাবে new int[x].Select((_,z)(আমি মনে করি এটি সঠিক)। আপনি যেমন লিনক ব্যবহার করছেন using System.Linq;আপনার বাইট গণনায় অন্তর্ভুক্ত করা উচিত । আপনি এটি ব্যবহার করছেন Mathযাতে আপনার এটি অন্তর্ভুক্ত using System;বা সম্পূর্ণরূপে যোগ্য হওয়া উচিত । নোট করুন যে এটি তখন খাটোnamespace System.Linq{}
TheLethalCoder

স্থানটি ডিফল্ট ,' 'হওয়ায় আপনাকে PadLeftকলটিতে অন্তর্ভুক্ত করার দরকার নেই ।
TheLethalCoder


@ লেথলকোডার অসুবিধার জন্য দুঃখিত, এটি এখন ঠিক করা হয়েছে।
ডেনিস.ভেরউইজ

আমার কাছ থেকে কোন উদ্বেগ নেই + এটি একটি দুর্দান্ত উত্তর :)
TheLethalCoder

1

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

A…·¹NθW⌈θ«Eθ§ #κ↓⸿AEθ÷κ²θ»‖O

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

A…·¹Nθ

প্রথম nপ্রাকৃতিক সংখ্যার একটি তালিকা তৈরি করুন ।

W⌈θ«

সমস্ত উপাদান শূন্য না হওয়া পর্যন্ত পুনরাবৃত্তি করুন।

Eθ§ #κ

হিসেবে তালিকাটির প্রতিটি উপাদান শেষ বাইনারি অঙ্ক Print বা #

↓⸿

পূর্ববর্তী কলামে যান।

AEθ÷κ²θ

তালিকার সমস্ত উপাদান দুটি দ্বারা ভাগ করুন।

»‖O

বাম অর্ধেকটি আঁকলে এটি প্রতিফলিত করুন।


চারকোলের বর্তমান সংস্করণগুলিতে MapAssignRight(IntDivide, 2, q);3 বাইট সংরক্ষণ করা হয়
নিল

1

জে, 29 বাইট

' #'{~(],}.@|.)"1@(#.^:_1)@i.

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

ব্যাখ্যা

  • i. পূর্ণসংখ্যা n পর্যন্ত, ইনপুট
  • (#.^:_1) বেস 2 তে রূপান্তরিত
  • (],}.@|.)সারি সারি ( "1এই অংশটি করে), বাইনারি নম্বরটি ( ]এটি পরিচয় ফ্যান), এবং এটি ,বিপরীত ( |.) দিয়ে বিড়াল করুন , যেখানে বিপরীতটি শিরশ্ছেদ করা হয়েছে ( }.)।
  • ' #'{~ রূপান্তর 1গুলি 0এবং স্থানগুলিকে হ্যাশ এবং স্পেসে ।

আপনি #.invপরিবর্তে ব্যবহার করতে পারেন #.^:_1
কনর ও'ব্রায়েন

@ কনরও ব্রায়েন, ধন্যবাদ, এটি সম্পর্কে অবগত ছিল না।
জোনা

এই এক বন্ধ না? জন্য n = 1, আপনি কিছুই মুদ্রণ। যাইহোক, আপনি কয়েকটি পরিবর্তন সহ কয়েকটি বাইট শেভ করতে পারেন ' #'{~(,|.@}:)"1@#:@:>:@i.(যদি আপনি এক দ্বারা বন্ধ হতে দেওয়া হয় তবে আপনি আরও 4 বাইট সরিয়ে নিতে পারেন)। মূলত, একটি হুক ব্যবহার করা হয়েছে কারণ এটি শুধু একটি কাঁটাচামচ মত সঞ্চালিত যখন বাম Tine হয় ]এবং ব্যবহার বিল্ট-ইন #:যা আমি যতদূর জানি হিসাবে একই হয় #.inv। সম্পাদনা: আমি আমার উত্তরটি একটি মন্তব্য হওয়ার পরোয়ানা হিসাবে যথেষ্ট অনুরূপ, আপনি যদি এটি মনে করেন যে এটির নিজস্ব উত্তর হওয়া উচিত তবে আমাকে জানান।
কোলে

@ কোল, ধন্যবাদ! আমি এটি পরে একটু আপডেট করব। আমি ভেবেছিলাম আমি চেষ্টা করেছি #:এবং এটি কার্যকর হয়নি, তবে আমার অবশ্যই ভুল মনে থাকবে কারণ আপনি ঠিক বলেছেন যে এটি কাজ করে।
জোনা

@ জোনাহ আপনি হয়ত চেষ্টা করেছেন 2 #:যা কেবলমাত্র সর্বাধিক সংখ্যাটি পাবে। Monadic #:ফাংশন ঠিক #.inv(বা #.&:_1) এর মতো। এটি ডায়াডিক থেকে পৃথক #:, যা কেবল তার বাম আর্গুমেন্টে পরমাণু হিসাবে যতগুলি সংখ্যা দেয়।
কোলে



1

পিএইচপি, 98 97 95 94 + 1 বাইট

while($r++<$argn)echo$s=strtr(sprintf("%".-~log($argn,2).b,$r),0," "),substr(strrev("
$s"),1);

পাইপ হিসাবে চালনা করুন-nR বা এটি অনলাইনে চেষ্টা করুন1অ-সাদা স্থান হিসাবে ব্যবহার করে ।


এটি নষ্ট করার জন্য দুঃখিত, তবে এখানে কিছু ভুল। জন্য আউটপুট $argn=1এবং $argn=3সঠিক নয়, এবং $argn0 ভিত্তিক (নির্দিষ্ট 1-ভিত্তি করে ছিল) হল
ফেলিক্স Palmen

1
@ ফেলিক্সপ্যালম্যান ঠিক করা হয়েছে। ভুলটি বেসের কারণে হয়েছিল। লক্ষ্য করার জন্য ধন্যবাদ।
তিতাস




0

সি (জিসিসি) , 146 108 105 বাইট

#define o putchar(33-!(c&(1<<n)))
b;c;p(n){--n?o,p(n),o:o;}f(n){while(n>>++b);while(c++<n)p(b),puts("");}

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

এটি বিস্মৃত চিহ্নটি ব্যবহার করে f(n)সারি সংখ্যার সাথে ডাকা একটি ফাংশন n(! শ্বেত স্পেস অক্ষর হিসাবে ) ।

ব্যাখ্যা :

#define o putchar(33-!(c&(1<<n)))
b;c;
p(n)
{
    // least significant bit not yet reached?
    --n?
            // print bit twice with recursive step between
            o,
            p(n),
            o
        // for least significant, just print this bit
        :o;
}

// the main "cathedral function":
f(r)
{
    // determine max number of bits to shift
    while(r>>++b);

    // iterate over rows
    while(c++<r)

        // print row recursively
        p(b),

        // newline
        puts("");
}

/**
 * footer, just calling the function
 */
main(int argc, char **argv)
{
    f(atoi(argv[1]));
}

এর --n&&o+p(n);o;পরিবর্তে --n?o,p(n),o:o;এবং for(;c++<n;puts(""))p(b);পরিবর্তে পরামর্শ দিনwhile(c++<n)p(b),puts("");
সিলিংক্যাট

0

জাভাস্ক্রিপ্ট (নোড.জেএস) , 156 149 বাইট

@ কনরও'ব্রায়েন দ্বারা -7 বাইট

f=(n,w=n.toString(2).length,b=n.toString(2).replace(/0/g," "),s=" ".repeat(w-b.length))=>`${--n?f(n,w)+s+b+[...b].reverse().join``.substr(1):s+"1"}
`

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

পুনরাবৃত্তি ফাংশন। দুর্ভাগ্যক্রমে জেএস স্ট্রিংটিকে উল্টানো সমর্থন করে না, সুতরাং 19 বাইটগুলি এটিকে অ্যারে এবং পিছনে রূপান্তর করতে ব্যবহৃত হয়।


1
আপনি এর [...b]পরিবর্তে ব্যবহার করতে পারেন b.split(""); আপনি .join``.substr(1)পরিবর্তে ব্যবহার করতে পারেন .join("").substr(1); শেষ পর্যন্ত, আমি মনে করি আপনি এর s+1পরিবর্তে ব্যবহার করতে পারেনs+"1"
কনর ও'ব্রায়ান


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