নিকোমাসের উপপাদ্যটি ভিজ্যুয়ালাইজ করুন


35

নিকোথামাসের উপপাদ্য একটি কিউবের যোগফলের বর্গক্ষেত্রকে সম্পর্কিত করে:

নিকোথামাসের উপপাদ্য

এবং একটি সুন্দর জ্যামিতিক দৃশ্য আছে:

কল্পনা

চ্যালেঞ্জ: এসসিআইতে এই ভিজ্যুয়ালাইজের 2 ডি অংশ তৈরি করুন।

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

ইনপুট আউটপুট

ইনপুটটি 0 এর চেয়ে বড় একক পূর্ণসংখ্যা হয় আউটপুট নীচের উদাহরণগুলির অনুরূপ একটি এসকিআই গ্রিড যা উপরের চিত্রের ইনপুট সংখ্যার জন্য সমতল গ্রিডের সাথে সম্পর্কিত। শীর্ষস্থানীয় এবং পিছনের সাদা স্থান ঠিক আছে।

এটি স্ট্যান্ডার্ড বিধি সহ কোড গল্ফ।

নমুনা আউটপুট

এন = 1

#

এন = 2

#oo   
o@@   
o@@   

এন = 3

#oo+++
o@@+++
o@@+++
+++###
+++###
+++###

এন = 4

#oo+++oooo
o@@+++oooo
o@@+++@@@@
+++###@@@@
+++###@@@@
+++###@@@@
oo@@@@oooo
oo@@@@oooo
oo@@@@oooo
oo@@@@oooo

এন = 5

#oo+++oooo+++++
o@@+++oooo+++++
o@@+++@@@@+++++
+++###@@@@+++++
+++###@@@@+++++
+++###@@@@#####
oo@@@@oooo#####
oo@@@@oooo#####
oo@@@@oooo#####
oo@@@@oooo#####
+++++#####+++++
+++++#####+++++
+++++#####+++++
+++++#####+++++
+++++#####+++++

N = 4 এর জন্য তিনটি বর্ণের সংস্করণ, @ ব্রুসফোর্ডকে ধন্যবাদ:

#oo+++oooo
o##+++oooo
o##+++####
+++ooo####
+++ooo####
+++ooo####
oo####++++
oo####++++
oo####++++
oo####++++

6
চার বর্ণের উপপাদ্য: ডি
লিকি নুন

1
আপনি N = 5 এর জন্য আউটপুট যোগ করতে পারেন দয়া করে?
উরিয়েল

1
@ ইউরাইল সম্পন্ন আমার সম্পাদনা দেখুন।
জোনাহ

ধন্যবাদ! এছাড়াও, আমি কি কেবল এন = 4 এ বাইরের স্ট্রিপগুলিতে @ এবং ওএস স্যুইচ করতে পারি? অথবা আউটপুটটি অন্য পাঠসেটের সাথে এই পাঠগুলির একটি কঠোর প্রতিস্থাপন হতে হবে?
উরিল

@ ইউরাইল স্যুইচিং ঠিক আছে। সমস্ত বিষয় হ'ল সংলগ্ন রঙগুলি দ্বন্দ্ব করে না, যাতে প্যাটার্নটি দৃশ্যমান।
জোনা

উত্তর:


17

এমএটিএল , 30 28 27 বাইট

t:P"@:s:@/Xk&+@+8MPt&(]30+c

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

বোনাস বৈশিষ্ট্য:

  • জন্য 26 বাইট , নিম্নলিখিত পরিমার্জিত সংস্করণ উত্পাদন করে গ্রাফিকাল আউটপুট :

    t:P"@:s:@/Xk&+@+8MPt&(]1YG
    

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

  • চিত্রটি কিছু রঙের জন্য ভিক্ষা করছে , এবং এটির জন্য কেবল 7 বাইট খরচ রয়েছে:

    t:P"@:s:@/Xk&+@+8MPt&(]1YG59Y02ZG
    

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

  • অথবা ম্যাট্রিক্স অক্ষরটি কীভাবে ধীরে ধীরে নির্মিত হয় তা দেখতে একটি দীর্ঘ সংস্করণ (37 বাইট) ব্যবহার করুন :

    t:P"@:s:@/Xk&+@+8MPt&(t30+cD9&Xx]30+c
    

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

উদাহরণ আউটপুট

ইনপুটটির জন্য 8, নিম্নলিখিতটি মূল সংস্করণ, গ্রাফিকাল আউটপুট এবং রঙের গ্রাফিকাল আউটপুট দেখায়।

এখানে চিত্র বর্ণনা লিখুন

এখানে চিত্র বর্ণনা লিখুন

এখানে চিত্র বর্ণনা লিখুন

ব্যাখ্যা

সাধারণ পদক্ষেপ

একটি সংখ্যার ম্যাট্রিক্স Nধাপে বাইরের থেকে অভ্যন্তরের স্তরগুলিতে তৈরি করা হয় , যেখানে Nইনপুট থাকে। প্রতিটি পদক্ষেপ পূর্ববর্তী ম্যাট্রিক্সের অভ্যন্তরীণ (উপরের-বাম) অংশকে ওভাররাইট করে। শেষে, প্রাপ্ত ম্যাট্রিক্সের সংখ্যাগুলি অক্ষরে পরিবর্তিত হয়।

উদাহরণ

ইনপুট 4জন্য প্রথম ম্যাট্রিক্স হয়

10 10  9  9  9  9  8  8  8  8
10 10  9  9  9  9  8  8  8  8
 9  9  8  8  8  8  7  7  7  7
 9  9  8  8  8  8  7  7  7  7
 9  9  8  8  8  8  7  7  7  7
 9  9  8  8  8  8  7  7  7  7
 8  8  7  7  7  7  6  6  6  6
 8  8  7  7  7  7  6  6  6  6
 8  8  7  7  7  7  6  6  6  6
 8  8  7  7  7  7  6  6  6  6

দ্বিতীয় পদক্ষেপ হিসাবে, ম্যাট্রিক্স

7 7 7 6 6 6
7 7 7 6 6 6
7 7 7 6 6 6
6 6 6 5 5 5
6 6 6 5 5 5
6 6 6 5 5 5

উত্তরোত্তর উপরের অর্ধেকটিতে ওভাররাইট করা হয়। তারপরেও একই কাজটি করা হয়

6 5 5
5 4 4
5 4 4

এবং অবশেষে সঙ্গে

3

ফলাফল ম্যাট্রিক্স হয়

3 5 5 6 6 6 8 8 8 8
5 4 4 6 6 6 8 8 8 8
5 4 4 6 6 6 7 7 7 7
6 6 6 5 5 5 7 7 7 7
6 6 6 5 5 5 7 7 7 7
6 6 6 5 5 5 7 7 7 7
8 8 7 7 7 7 6 6 6 6
8 8 7 7 7 7 6 6 6 6
8 8 7 7 7 7 6 6 6 6
8 8 7 7 7 7 6 6 6 6

সবশেষে, 30প্রতিটি এন্ট্রিতে যুক্ত করা হয় এবং ফলস্বরূপ সংখ্যাগুলি কোডপয়েন্ট হিসাবে ব্যাখ্যা করা হয় এবং অক্ষরে রূপান্তরিত হয় (এভাবে শুরু করে 33, এর সাথে সম্পর্কিত !)।

ইন্টারমিডিয়েট ম্যাট্রিক্স নির্মাণ

ইনপুট করতে N, মান কমে বিবেচনা kথেকে Nথেকে 1। প্রত্যেকের জন্য k, থেকে পূর্ণসংখ্যার একটি ভেক্টর তৈরি 1করা k*(k+1)হয় এবং তারপরে প্রতিটি এন্ট্রি ভাগ করে kএবং বৃত্তাকার হয়। উদাহরণস্বরূপ, এর জন্য k=4(সবগুলি ব্লকের kশেষ ব্যতীত আকার রয়েছে ):

1 1 1 1 2 2 2 2 3 3

তবে k=3ফলাফলের জন্য (সমস্ত ব্লকের আকার থাকে k):

1 1 1 2 2 2

এই ভেক্টরটি যুক্ত করা হয়, সম্প্রচারের সাথে উপাদান অনুসারে নিজের ট্রান্সপোজড কপিতে; এবং তারপরে kপ্রতিটি প্রবেশে যুক্ত করা হয়। জন্য k=4এই দেয়

6  6  6  6  7  7  7  7  8  8
6  6  6  6  7  7  7  7  8  8
6  6  6  6  7  7  7  7  8  8
6  6  6  6  7  7  7  7  8  8
7  7  7  7  8  8  8  8  9  9
7  7  7  7  8  8  8  8  9  9
7  7  7  7  8  8  8  8  9  9
7  7  7  7  8  8  8  8  9  9
8  8  8  8  9  9  9  9 10 10
8  8  8  8  9  9  9  9 10 10

এটি অনুভূমিক এবং উল্লম্বভাবে উল্টানো বাদে উপরের দিকে দেখানো মধ্যবর্তী ম্যাট্রিকগুলির মধ্যে একটি। সুতরাং যা অবশিষ্ট রয়েছে তা এই ম্যাট্রিক্সটি ফ্লিপ করা এবং এটিকে এ পর্যন্ত "জমে থাকা" ম্যাট্রিক্সের উপরের-বাম কোণে লিখতে হবে, প্রথম ( k=N) পদক্ষেপের জন্য একটি খালি ম্যাট্রিক্সে আরম্ভ করা হয়েছে ।

কোড

t       % Implicitly input N. Duplicate. The first copy of N serves as the
        % initial state of the "accumulated" matrix (size 1×1). This will be 
        % extended to size N*(N+1)/2 × N*(N+1)/2 in the first iteration
 :P     % Range and flip: generates vector [N, N-1, ..., 1]
"       % For each k in that vector
  @:    %   Push vector [1, 2, ..., k]
  s     %   Sum of this vector. This gives 1+2+···+k = k*(k+1)/2
  :     %   Range: gives vector [1, 2, ..., k*(k+1)/2]
  @/    %   Divide each entry by k
  Xk    %   Round up
  &+    %   Add vector to itself transposed, element-wise with broadcast. Gives
        %   a square matrix of size k*(k+1)/2 × k*(k+1)/2
  @+    %   Add k to each entry of the this matrix. This is the flipped
        %   intermediate matrix
  8M    %   Push vector [1, 2, ..., k*(k+1)/2] again
  Pt    %   Flip and duplicate. The two resulting, equal vectors are the row and
        %   column indices where the generated matrix will be written. Note that
        %   flipping the indices has the same effect as flipping the matrix
        %   horizontally and vertically (but it's shorter)
  &(    %   Write the (flipped) intermediate matrix into the upper-left
        %   corner of the accumulated matrix, as given by the two (flipped)
        %   index vectors 
]       % End
30+     % Add 30 to each entry of the final accumulated matrix
c       % Convert to char. Implicitly display

আমি এমএটিএল মোটেও জানি না, তবে আপনি 30 যোগ করে চরিত্রে রূপান্তরিত করার পরিবর্তে Mod10 গ্রহণ করে কোনও বাইট সংরক্ষণ করতে পারবেন?
ব্যবহারকারী 2390246

এমনকি মোড 4 ...
ব্যবহারকারীর 2390246

@ ব্যবহারকারী 2390246 আপনি কি তাদেরকে একটি একক সংখ্যা দিয়ে সংখ্যা হিসাবে রাখার এবং চরে রূপান্তর এড়াতে চান? এটি কাজ করবে না, কারণ সংখ্যার মাঝের ফাঁক দিয়ে সংখ্যাটি ম্যাট্রিক্স মুদ্রিত হবে। তবে যাইহোক ধারণাটির জন্য ধন্যবাদ :-)
লুইস মেন্ডো

যথেষ্ট ফর্সা। এন> 226 এর সাথে কী ঘটে? বৈধ অক্ষরের সীমার বাইরে যাবে না? (আশ্চর্যজনকভাবে, টিআইও-তে সময় বেরিয়েছে, তাই আমি চেক করতে পারিনি)
ব্যবহারকারী 2390246

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

7

পাইথন 2 , 187 178 164 162 152 বাইট

-8 বাইটস মিঃ এক্সকোডারকে ধন্যবাদ
-1 বাইট স্টিফেনকে
-10 বাইট ধন্যবাদ জোনাথন ফ্রেচকে

g=lambda y:y>1and[l+y*f(y,i)for i,l in enumerate(g(y-1))]+y*[''.join(f(y,i)for i in range(y*-~y/2))]or['#']
f=lambda y,i:'0@+#'[(y*~-y/2%y+i)/y%2+y%2*2]

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


আপনি যখন বাড়িতে পাবেন, 179 বাইট
মিঃ এক্সকডার

@ মিঃ এক্সকোডার 178 বাইট
স্টিফেন

1
আপনি যখন এটি পুনরাবৃত্তভাবে ব্যবহার করছেন অর্থাত্ বাকি কোডটিতে এর নামটি ব্যবহার করছেন তখন আপনার ল্যাম্বডা ফাংশনের নাম বাইট গণনা অন্তর্ভুক্ত করার অনুমতি নেই?
জোনাথন ফ্রেচ

sum(range(y))%y->y*~-y/2%y
জোনাথন ফ্রেচ

@ জোনাথনফ্রেচ হ্যাঁ, যখন এটি পুনরাবৃত্ত হয় তখন অবশ্যই সেখানে উপস্থিত থাকে।
রড

7

কাঠকয়লা , 50 46 বাইট

F⮌…·¹N«≔⊘×ι⊕ιθF⊕⊘ι«F§#+@⁺ικ«UO⁻θ×ικθλUOθ⁻θ×ικλ

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

F⮌…·¹N«≔÷×ι⁺¹ι²θF⁺¹÷鲫F§#+@⁺ικ«UO⁻θ×ικθλUOθ⁻θ×ικλ

F     «     Loop over
  …·¹       Inclusive range from 1 to
     N      Input as a number
 ⮌          Reversed

   ι⁺¹        Add 1 to current index
  ×   ι       Multiply by current index
 ÷     ²      Divide by 2
≔       θ     Assign to q

F     «      Loop over
             Implicit range from 0 to
   ÷ι²       Half the current index
 ⁺¹          Plus 1

F       «    Loop over
  #+@        Literal string
 §           Circularly indexed by
     ⁺ικ     Sum of outer and inner index

    ×ικ     Multiply outer and inner index
  ⁻θ        Subtract from q
UO     θλ   Draw an oblong (q-ik, q) using that character

UOθ⁻θ×ικλ   Draw an oblong (q, q-ik) using that character

দ্রষ্টব্য: চরিত্রটি সরাসরি বরাদ্দ করার চেষ্টা করার চেয়ে আমি চরিত্রটি লুপ করেছি lকারণ আপনি চরকলে একটি স্ট্রিংকে সূচক দেওয়ার ফলাফলটি সরাসরি বরাদ্দ করতে পারবেন না কারণ এটি কাঠকয়ালের একটি দ্ব্যর্থক নির্মাণ। ভাগ্যক্রমে বাইট গণনা সমান।


প্রযুক্তিগতভাবে আপনি এএসসিআইআই ভেরিয়েবলের সাথে তার যুক্তির আদেশটি বিপরীত হওয়ার পরে (নোট করুন যে এটির জন্য অপারেটরের প্রয়োজন যাতে এটি এখনও কম গোলাপী হয়)
ASCII- কেবল

5

সি (জিসিসি) , 135 128 120 বাইট

f(n,m,i,x,y,k){for(m=n*-~n/2,i=m*m;i--;printf("\n%d"+!!(~i%m),(x/k+y/k+k)%3))for(x=i%m,y=i/m,k=n;x>=k&y>=k;x-=k--)y-=k;}

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

মাত্র তিনটি রঙ ব্যবহার করে।

ধারণামূলকভাবে, 180 ডিগ্রি ঘোরানো গ্রিডে কাজ করে:

000111
000111
000111
111220
111220
111001

এবং সূত্র অনুযায়ী রঙ গণনা:

c(x,y,n) = c(x-n,y-n,n-1)                   if x >= n and y >= n
         = (x div n + y div n + n) mod 3    otherwise


@ জোনাথানফ্রেচ এটি বৈধ সি নয় এবং এর সাথে ব্রেক gcc -O2
nwellnhof

যথেষ্ট ফর্সা; এটি কি সম্ভব যে দ্বিতীয় কোডটি কেবলমাত্র তিনটি রঙের জন্য কাজ করে মডিউল তিন ( g(i%m,i/m,n)%3) এর কারণে?
জোনাথন ফ্রেচ

সুপারিশ x/k&&y/kপরিবর্তেx>=k&y>=k
ceilingcat

2

আর , 131 126 123 বাইট

3 বাইট সংরক্ষিত @ জিউজ্পে ধন্যবাদ

function(n){l=w=sum(1:n)
m=matrix(,l,l)
for(i in n:1){m[l:1,l:1]=outer(x<-(1:l-1)%/%i,x,`+`)+i
l=l-i}
write(m%%4,"",w,,"")}

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

এটি @ লুইস মেন্ডো'র এমএটিএল উত্তরের মতো একই অ্যালগরিদম ব্যবহার করে । পার্থক্যটি হ'ল অক্ষরগুলিতে রূপান্তরিত করার পরিবর্তে ম্যাট্রিক্স প্রতিটি মানকেই একক ascii অক্ষর নিশ্চিত করার জন্য সমস্ত মান mod4 সহ আউটপুট হয় is


1
123 বাইট! আমি forলুপটি -1 বাইটের জন্য ফিরে এলাম :)
জিউসেপ

1

পাইথন 2 , 176 175 বাইট

n=input()
R,J=range,''.join;r=[]
for i in R(n+1):
 S=sum(R(i));c='AxBo'[i%2::2]
 for j in R(S):r[~j]+=c[j/i%2]*i
 r+=[J(c[-j/i%2]for j in R(S+i,0,-1))]*i
for l in r:print J(l)

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


আপনি যদি J="".join;(+10 বাইট) সংজ্ঞায়িত করেন এবং উভয় "".joins (-2 * 7 = -14 বাইট) J(+2 বাইট) দিয়ে প্রতিস্থাপন করেন তবে আপনি একটি বাইট সংরক্ষণ করতে পারেন (যেমন print+1 বাইটের পরে অতিরিক্ত স্থান থাকতে হবে ) ।
জোনাথন ফ্রেচ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.