ষড়ভুজ সংলগ্ন


28

ষড়ভুজ সর্পিল উদাহরণ

উপরের চিত্রটি হেক্সাগনগুলির একটি ষড়ভুজ গ্রিড প্রদর্শন করে। গ্রিডের প্রতিটি কক্ষকে কেন্দ্র থেকে শুরু করে এবং ঘড়ির কাঁটার বিপরীতে উল্লিখিত হিসাবে চারদিকে ঘূর্ণায়মান একটি সূচক নির্ধারিত হয়। নোট করুন যে গ্রিড অনির্দিষ্টকালের জন্য চলতে থাকবে - উপরের ছবিটি কেবল প্রথম বিভাগ। পরবর্তী ষড়ভুজটি 60 এবং 37 এর সংলগ্ন হবে।

আপনার কাজটি এই গ্রিডে প্রদত্ত দুটি কক্ষ সংলগ্ন কিনা তা নির্ধারণ করা।

এমন একটি প্রোগ্রাম বা ফাংশন লিখুন যা দুটি কক্ষ সূচকে দেওয়া হয়, দুটি কক্ষ সংলগ্ন হলে একটি সত্যবাদী মান প্রিন্ট করে / দেয় এবং না হলে একটি মিথ্যা মান দেয়।

ব্যবহারিক কারণে সীমাবদ্ধ না হলে, আপনার কোডটি তাত্ত্বিকভাবে কোনও আকারের ইনপুটগুলির জন্য কাজ করা উচিত।

সত্যবাদী পরীক্ষার কেস:

0, 1
7, 18
8, 22
24, 45
40, 64
64, 65

ভুয়া পরীক্ষার মামলা:

6, 57
29, 90
21, 38
38, 60
40, 63
41, 39
40, 40

এটি তাই বাইটের মধ্যে সংক্ষিপ্ত উত্তর। ব্যাখ্যাগুলি, এমনকি অ-রহস্যমূলক ভাষার জন্যও উত্সাহিত করা হয়।

উত্তর:


7

এলিক্সির , 263 257 264 223 214 218 214 বাইট

a=fn x,y->i=&(&1*(&1-1)*3+1)
[x,y]=Enum.sort [x,y]
if x<1,do: y in 1..6,else: (y-x==1||fn->a=y-trunc i.((r=(:math.sqrt(12*x-3)+3)/6)+1)
t=trunc r
a in [0,1,rem(b=x-i.(t)+1, t)<1&&b-t*6!=0&&2]||b<2&&a==-1 end.())end

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

উদার সংস্করণ

def get_ring(x) do
    1/6*(:math.sqrt(12*x-3)+3)
end

def inv_get_ring(x), do: x*(x-1)*3+1

def ring_base(x), do: inv_get_ring(trunc(x))

def is_corner(x) do
    ring = trunc(get_ring(x))
    inv_ring = ring_base(ring)
    stuff = (x-inv_ring+1)
    rem(stuff, ring) == 0
end

def is_last(x),do: ring_base(get_ring(x)+1)-1 == x
def is_first(x),do: ring_base(get_ring(x)) == x

def hex_adj(x, y) do
    {x, y} = {min(x,y), max(x,y)}
    cond do 
        x == 0 ->y in 1..6      
        y-x==1 -> true
        true ->
            adj = trunc(inv_get_ring(get_ring(x)+1))
            number = if is_corner(x)&&!is_last(x), do: 2, else: 1
            if y-adj in 0..number do
                true
            else
                is_first(x) && y == adj-1
            end
    end
end
  • trunc(number) সংখ্যার পূর্ণসংখ্যার অংশটি প্রদান করে
  • rem(a,b) খ / খের বাকী অংশটি ফেরত দেয়
  • cond do end এটি অন্য অত্যাধিক ভাষায় কেস ক্লজগুলি পরিবর্তন করতে গেলে অন্যটির সমতুল্য else

ব্যাখ্যা

get_ring (INDEX)

সূচকের "রিং" গণনা করে।

উদাহরণস্বরূপ: 1-6- এর জন্য 1, 7-18-এর জন্য 2 ইত্যাদি

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

inv_get_ring (রিং)

এর বিপরীতে গণনা করে get_ring(index)

ring_base (রিং)

রিংয়ে প্রথম টাইলের সূচী গণনা করে।

is_corner (INDEX)

কোণগুলি এমন টাইলস যাগুলির বাইরের আংটিতে তিনটি অ্যাডজেন্ট টাইল থাকে। অভ্যন্তরীণতম রিংটি সম্পূর্ণ কোণে গঠিত।

উদাহরণ: 21,24,27,30,33,36

is_last (INDEX)

সত্য যদি সত্যিকারের সূচকটি এর মধ্যে সবচেয়ে বেশি থাকে is

is_first (INDEX)

সত্য যদি এটি রিংয়ের বেস-টাইল হয়।


2
প্রান্ত-
কেসটিতে

আমি প্রথমে আপনার গল্ফযুক্ত সংস্করণটি পুনরাবৃত্তির মাধ্যমে অনুসরণ করেছি তবে তারপরে মনে হয়েছিল আপনি নিজের পদ্ধতির পরিবর্তন করেছেন changed আপনার বর্তমান গল্ফযুক্ত সংস্করণটি কি এখনও বর্ণহীন সংস্করণের সমতুল্য?
জন মাইকেল আইন

হ্যাঁ! আমি সবেমাত্র শিখেছি আপনি এলিক্সির মধ্যে ভেরিয়েবল ইনলাইন ঘোষণা করতে পারেন। এটি কোডের শুরুতে ল্যাম্বদা ফাংশনগুলি থেকে মুক্তি পাওয়ার সক্ষমতা দিয়েছিল। আমি আরও ভেরিয়েবলগুলি আরও কিছুটা দক্ষ করে তুলতে কিছুটা বদলেছি।
গারুনো

5

এমএটিএল , 47 45 44 43 41 বাইট

s:"JH3/^6:^t5)w5:&)@qY"w@Y"]vYs0hG)d|Yo1=

এটি অনলাইন চেষ্টা করুন! বা সমস্ত পরীক্ষার কেস যাচাই করুন

বোনাস হিসাবে, কোডটি একটি ষড়ভুজ সর্পিল উত্পন্ন করে যা ঘর কেন্দ্রগুলির অবস্থানগুলি সনাক্ত করে, যা কোডের শেষ অংশটি সংশোধন করে এমএটিএল অনলাইনে গ্রাফিকালি দেখা যায় ।

ব্যাখ্যা

সাধারণ ধারণা    কোডটি প্রথমে ইউনিট স্টেপ সহ পর্যাপ্ত পরিমাণে ষড়ভুজ সর্পিল তৈরি করে। সর্পিলটি কোষ কেন্দ্রের অবস্থানগুলি প্রতিনিধিত্বকারী জটিল সংখ্যার ভেক্টর হিসাবে সংজ্ঞায়িত করা হয়। ইনপুট সংখ্যাগুলির সাথে সেই ভেক্টরের সূচক এবং পরম পার্থক্য গণনা দুটি নির্দেশিত কক্ষের মধ্যে দূরত্ব দেয়। ঘরগুলি সংলগ্ন হয় যদি এবং শুধুমাত্র ফলাফল হয় 1. তবে, ভাসমান পয়েন্টের ভুলের কারণে, 1 এর সাথে তুলনা করার আগে গোল করা প্রয়োজন।

সর্পিল তৈরি করে সর্পিলটিতে    দুটি ইনপুটগুলির যোগফলের সমান সংখ্যক "স্তর" থাকবে। এটি প্রয়োজনের তুলনায় (অনেক বেশি) বড় এবং এটি নিশ্চিত করে যে ইনপুট সেলগুলি সর্পিলটিতে উপস্থিত থাকবে।

সর্পিলটি তৈরি করতে, জটিল সংখ্যা 2/3 (যেখানে জে কাল্পনিক ইউনিট) প্রথমে গণনা করা হয়। 1 থেকে 6 এর মধ্যে এটির উত্থাপনের ফলে বাস্তুচ্যুতির একটি মৌলিক সংকলন পাওয়া যায়, যেমন এই স্থানচ্যুতিগুলি যাতে অনুসরণ করে একটি ষড়ভুজকে চিহ্নিত করে। এই ষড়ভুজটি সর্পিলটির অভ্যন্তরীণ স্তরটি তৈরি করবে, এটি "বন্ধ" ছাড়া except প্রকৃতপক্ষে, আমরা চাই যে ষড়ভুজটি শেষ ধাপে "বৃদ্ধি" হয় এবং তারপরে সর্পিলটির পরবর্তী স্তরটি গঠনের জন্য আমরা দ্বিগুণ বহু পয়েন্ট (দুটি গ্রুপের সাথে সংযুক্ত) সহ একটি বৃহত ষড়্ভুজটি চিহ্নিত করতে পারি; চিত্র এখানে দেখুন । পরবর্তী স্তরটিতে প্রথম হিসাবে তিনটি পয়েন্ট থাকবে (তিনটির দলে); দেখতে এখানে

এটি করার জন্য, বেসিক সেট থেকে পঞ্চম স্থানচ্যুতি (যা দক্ষিণ-পূর্ব দিকের দিকে নির্দেশ করে) "ক্রমবর্ধমান" পদক্ষেপ হিসাবে বেছে নেওয়া হয়। লেয়ার কে সেই পদক্ষেপের সাথে শুরু হয়, তারপরে কে পাঁচবার প্রথম পাঁচটি মৌলিক পদক্ষেপ পুনরাবৃত্তি হয় এবং এর পরে − ষ্ঠ ধাপ (পূর্ব দিকের) কে -১ বার পুনরাবৃত্তি হয় । উপরের লিঙ্কযুক্ত দুটি পরিসংখ্যান দেখে আশা করা যায় যে এটি আরও স্পষ্ট হয়ে উঠেছে।

ফলস্বরূপ ভেক্টর, সমস্ত স্তর সহ, জটিল স্থানচ্যুতিগুলিকে প্রতিনিধিত্ব করে যা সর্পিলটি চিহ্নিত করবে। সংক্ষিপ্ত পরিমাণ কোষ কেন্দ্রের প্রকৃত স্থানাঙ্ক দেয়।

শেষ অবধি, 0 এ অবস্থিত প্রাথমিক সেলটি এই ভেক্টরের শেষের সাথে যুক্ত থাকে । এটি কারণ এমএটিএল মডিউলার 1-ভিত্তিক সূচক ব্যবহার করে এবং সূচক 0 কোনও অ্যারের শেষ প্রবেশকে বোঝায় ।

সংলগ্নতার জন্য পরীক্ষা করা    ইনপুট সংখ্যার দ্বারা প্রদত্ত দুটি কক্ষ নির্বাচন করা হয়, তাদের স্থানাঙ্কগুলি বিয়োগ করা হয় এবং পরম মানটি বৃত্তাকার হয় এবং 1 এর সাথে তুলনা করা হয়।

মন্তব্য করা কোড

s         % Implicitly input array of two numbers. Push their sum, say S
:         % Range [1 2 ... S]
"         % For each k in [1 2 ... S]
  J       %   Push 1j
  H3/     %   Push 2, then 3, then divide: gives 2/3
  ^       %   Power
  6:      %   Push [1 2 ... 6]
  ^       %   Element-wise power. This is the array of 6 basic displacements
  t5)     %   Duplicate. Get 5th entry
  w5:&)   %   Swap. Push subarray with entries 1st to 5th, then push 6th
  @qY"    %   Repeat the 6th displacement k-1 times
  w@Y"    %   Swap. Repeat 1st to 5th displacements k times
]         % End
v         % Concatenate everything into a column vector
Ys        % Cumulative sum. This gives the cell center coordinates
0h        % Append a 0
G)        % Index by the input vector
d|        % Absolute difference
Yo        % Round to nearest integer
1=        % Does it equal 1? Implicitly display

আপনি একটি ব্যাখ্যা যোগ করতে পারেন?
শেগি

@ শেগি আমি একটি সাধারণ ব্যাখ্যা যুক্ত করেছি। এটি পরিষ্কার হলে আমাকে জানান (এটি ব্যাখ্যা করা শক্ত)। আমি পরে মন্তব্য কোডটি যুক্ত করব
লুইস মেন্ডো

2

05 এ বি 1 ই (উত্তরাধিকার) , 30 29 27 বাইট

α2‹i1q}1ݹ+v12y*3-tîÌy+}Ÿ²å

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

কোডের ব্যাখ্যা:

α2‹i1q}                     : if the absolute diff of the two number is 1 or 0 return 1
                          ²å: return that the second number is in
                         Ÿ  : range of {
       1Ý                   :  create [0, 1]
         ¹+                 :  add the first number to the elements
           v            }   :  map that list
            12y*3-tîÌy+     :  calculate the corresponding value where it's an adjacency
                                }

গণিতের ব্যাখ্যা:

আমি এই গল্ফটি তৈরি করতে প্রায় 5 ঘন্টা "নষ্ট" করেছিলাম। সংক্ষেপে আমি ইনপুটগুলির 2 ডি গ্রাফ তৈরি করতে শুরু করেছি এবং Xযেখানে তারা একে অপরের সাথে সংলগ্ন ছিল সেখানে আঁকলাম। তারপরে আমি একটি প্যাটার্ন পেলাম। আমি এটি ওআইআইএস এবং বিঙ্গোতে অনুসন্ধান করেছি! আমি সেই সিকোয়েন্সটি পেয়েছি এবং আমি ওয়েবসাইটে দেওয়া সূত্রটি ব্যবহার করেছি।


1

সি (জিসিসি) , 175 173 বাইট

একটি বাগ ধরার জন্য পিটার টেলরকে ধন্যবাদ ।

-২ বাইটের জন্য সিলিংক্যাটকে ধন্যবাদ । এই ~ অপারেটরটি আমার প্রধান ব্লাইন্ডস্পট হিসাবে অবিরত রয়েছে।

c,r,C,L;y(a){a=a<L*2?L-a:a<L*3?-L:a<5*L?a-L*4:L;}z(a){L=ceil(sqrt(a/3.+.25)-.5);C=y(a-=3*L*~-L);L?L=y((L+a)%(L*6)):0;}f(a,b){z(a);c=C,r=L;z(b);a=a-b&&(abs(c-C)|abs(r-L))<2;}

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

এই পদ্ধতির দুটি কক্ষের সারি এবং কলাম সন্ধান এবং তাদের তুলনা করে দৃষ্টি নিবদ্ধ করা হয়; যে কোনও প্রতিবেশী তাদের তুল্য স্থানাঙ্কগুলি 1 টিরও বেশি পৃথক করতে পারবেন না the কেন্দ্র থেকে বাহিরের দিকে অগ্রসর হয়ে আমরা লক্ষ্য করেছি যে প্রতিটি স্তরের আগের চেয়ে 6 টি বেশি কোষ রয়েছে। এর অর্থ হ'ল প্রতিটি স্তরের L এর সর্বোচ্চ "সূচক" 6 * (এল * (এল - 1) * (এল - 2) ...), বা সি = 6 * (এল 2 + এল) / 2 ফর্মের উপরে রয়েছে , যেখানে সি হল "গ্লোবাল" সেল নম্বর। আশেপাশের জিনিসগুলি বদলে নেওয়া, আমরা এল 2 + এল - সি / 3 = 0 পাই যা উচ্চ বিদ্যালয়ের গণিতের ফ্ল্যাশব্যাক দেয়। সেখান থেকে আমরা সূত্র সিলটি পাই (স্কয়ার্ট (1/4 + সি / 3) + 0.5)। এটিতে একটি গ্লোবাল সেল সূচকটি প্লাগ করে আমরা সেলটি যে স্তরটিতে রয়েছে তা পাই।

যেহেতু প্রতিটি স্তরের প্রথম কক্ষটি প্রাকৃতিকভাবে পূর্ববর্তী স্তরটির থেকে সর্বোচ্চের চেয়ে বেশি, তাই আমরা এল সূচনা = (6 * (এল - 1) 2 + (এল - 1)) / 2 পাই যা সহজ করে 3 * (এল) 2 - এল) সেখান থেকে আমরা স্তর সূচক এল সূচক = সি - এল শুরু করি

এরপরে, আমরা দেখতে পাচ্ছি যে প্রতিটি স্তর ছয়টি বিভাগ নিয়ে গঠিত, প্রতিটি দৈর্ঘ্যের এল। উত্তর-পূর্ব থেকে শুরু করে এবং ঘড়ির কাঁটার বিপরীতে যেতে, আমরা দেখতে পাচ্ছি প্রথম দুটি বিভাগের জন্য (1 <= এল সূচক <= 2 * এল) , আমরা এল - এল সূচক থেকে কলামটি পাই । পরবর্তী বিভাগে L * 2 <এল সূচক <= এল * 3 এর সমস্ত কক্ষ একটি একক কলাম -L ভাগ করে নিচ্ছে। পরের দুটি বিভাগ হ'ল এল * 3 <এল সূচক <= এল * 5 তাদের কলামগুলি এল সূচক অনুসারে - এল * 4 এবং শেষ অবধি ষষ্ঠ বিভাগের সমস্ত স্তরের এল কলামে রয়েছে। আমরা উপরের সীমানা এক ধাপে সরিয়ে নিতে পারি কোড কিছু বাইট সংরক্ষণ করুন।

তাহলে সারিগুলির কী হবে? কোডটি পুনরায় ব্যবহার করতে, আমরা গ্রিডটি ঘুরিয়ে দিয়েছি যাতে সেল 44 সরাসরি উপরে থাকে। তারপরে আমরা কলামগুলির মতো একই যুক্তি চালাই তবে ফলাফলটিকে "সারি" প্রায় ডাকি। অবশ্যই, প্রকৃতপক্ষে একটি গ্রিড ঘোরার পরিবর্তে আমরা কেবল তার চারপাশে 1/6 টি কোলে।


@ পিটারটেলর ভাল ধরা, ধন্যবাদ!
গ্যাস্ট্রোপনার

1

পাইথন 3, 150 বাইট

def h(a,b):
 L=[];i=1
 while len(L)<a+b:r=sum((i*[1j**(k/3)]for k in range(4,16,2)),[]);r[0]+=1;L+=r;i+=1
 return.9<abs(sum(L[min(a,b):max(a,b)]))<1.1

আমার সমাধানটি মূলত লুইস মেন্ডোর ওপরের মত একই চিন্তার রেখা অনুসরণ করে। যদি আরও পঠনযোগ্য লেখা হয় তবে কোডটি বেশ স্ব-বর্ণনামূলক is

def h(a,b):
    L=[]
    i=1
    while len(L)<a+b:
        l=sum((i*[1j**(k/3)]for k in range(4,16,2)),[])
        l[0]+=1
        L+=l
        i+=1
return .9<abs(sum(L[min(a,b):max(a,b)]))<1.1
  1. ফাংশন hনিম্নলিখিতটি করে:
  2. তালিকা এল প্রতিটি সংখ্যার (জটিল) অবস্থানগুলি ধারণ করবে।
  3. i রিং নম্বর।
  4. লুপ-এ, প্রতিটি পুনরাবৃত্তিতে একটি নতুন রিং যুক্ত হয়। আমাদের কয়টি রিং দরকার তা নির্ধারণের পরিবর্তে, আমরা কেবলমাত্র তালিকা তৈরি করতে থাকি যতক্ষণ না এটি + বি থাকা যথেষ্ট দীর্ঘ হয়, তবে অবশ্যই সেগুলির দুটিই রাখার জন্য যথেষ্ট দীর্ঘ।
  5. 'রিং-তালিকা' lহ'ল ধাপে ভেক্টরের লেনের (i) বারের 6 টি তালিকার সংমিশ্রণ, যেখানে ধাপে-ভেক্টরটি 1 পাওয়ার ** (2/3) থেকে কোনও পাওয়ার। পরিসীমা 0 থেকে শুরু হয় না তবে 4 এ শুরু হয় যা পুরো গ্রিডের ঘূর্ণনের কারণ ঘটায়। এটি আমাকে করতে দেয়:
  6. l[0]+=1 line লাইনে, যা এক আংটি থেকে পরের দিকে যাওয়ার পদক্ষেপ।
  7. L+=l সম্পূর্ণ তালিকা এবং রিং-তালিকাকে সম্মতি জানায়।
  8. তালিকার এল-এ কেবলমাত্র ধাপের ভেক্টর রয়েছে, যা অবস্থান পাওয়ার জন্য এখনও সংক্ষিপ্ত (সংহত) হতে হবে। এখানে একটি ঝরঝরে বৈশিষ্ট্য হ'ল আমরা কেবল স্লাইসটি তাদের দূরত্ব পেতে সর্বনিম্ন সংখ্যার থেকে সর্বোচ্চে যোগ করতে পারি! রাউন্ডঅফ ত্রুটির কারণে, ফলাফলটি ঠিক 1 হবে না, সুতরাং .9 <... <1.1। মজার বিষয় হল, শূন্য কেস h(0,0)বা এইচ (0,1) স্পষ্টভাবে যত্ন নেওয়া হয়, কারণ খালি তালিকার যোগফল শূন্য। আমি নিশ্চিত যে হতে পারে তাহলে a<b, অর্থাত্ আর্গুমেন্ট বৃদ্ধি অনুক্রমে আসতে হবে, আমি প্রতিস্থাপন দ্বারা অন্য 14 বাইট বন্ধ শেভ পারে L[min(a,b):max(a,b)]সঙ্গে L[a:b], কিন্তু হায়!

পিএস: আমি জানতাম না যে এটি এত পুরানো চ্যালেঞ্জ ছিল, এটি কয়েকদিন আগে শীর্ষে উপস্থিত হয়েছিল এবং যেহেতু আমার উপর ঝাঁপিয়ে পড়েছে :)


এটি একটি দুর্দান্ত উত্তর! দেরী উত্তর সম্পর্কে চিন্তা করবেন না, পিপিসিজিতে আমাদের এখানে আসলেই কোনও সমস্যা নেই।
Rɪᴋᴇʀ

0

গণিত, 111 105 104 বাইট

r=Floor[(1+Sqrt[(4#-1)/3])/2]&;t=Limit[Pi(#/(3x)+1-x),x->r@#]&;p=r@#*Exp[I*t@#]&;Round@Abs[p@#-p@#2]==1&

ব্যাখ্যা:

r=Floor[(1+Sqrt[(4#-1)/3])/2]&একটি ফাংশন সংজ্ঞায়িত করে rযা ইনপুট নেয় #এবং সেল 0-এ দূরত্ব (কোষের সংখ্যায়) গণনা করে each 3 (1 ^ 2 + 1), 18 = 3 (2 ^ 2 + 2), 36 = 3 (3 ^ 2 + 3), ... এবং সেই প্যাটার্নের সূত্রটি উল্টানো হচ্ছে। নোট করুন যে সেল 0 এর জন্য, এটি আসলে (1/2) + i * (স্কয়ার্ট (3) / 6) এর মেঝে নেয় , যা এটি 0 + 0 * i = 0 পাওয়ার জন্য উপাদান-ভিত্তিক গণনা করে ।

সঙ্গে rসংজ্ঞায়িত r@#কক্ষের জন্য রিং হয় #(অন্য ফাংশনের সংজ্ঞা ভিতরে)। #+3r@#-3(r@#)^2&কোডটিতে হুবহু উপস্থিত হয় না, তবে এটি একটি ঘরের সংখ্যা নেয় এবং পরবর্তী অভ্যন্তরীণ রিংয়ের মধ্যে একটি ঘরের সর্বাধিক সংখ্যাকে বিয়োগ করে, যাতে এটি এই প্রশ্নের উত্তর দেয় যে "বর্তমান রিংয়ের কোন ঘরটি এটি?" উদাহরণস্বরূপ, সেল 9 রিং 2 এর তৃতীয় ঘর, সুতরাং r[9]2 #+3r@#-3(r@#)^2&[9]আউটপুট হবে এবং 3 আউটপুট হবে।

অর্থাৎ উপরে এটি ব্যবহার এটি কি আমরা ফাংশন কি করতে পারেন মেরু কোণ থেকে ঘড়ির কাঁটার বিপরীতে কোণ "সেল 0, সেল 17, সেল 58" রশ্মি প্রশ্নে কক্ষের। প্রতিটি রিংয়ের সর্বশেষ ঘরটি সর্বদা পাই / 6 এ কোণে থাকে এবং আমরা পাই / (3 * রিং_নম্বার) এর ইনক্রিমেন্টে একটি রিং ঘুরে দেখি। সুতরাং, তাত্ত্বিকভাবে, আমাদের পাই / 6 + (যা_সেল_ও_কেন্দ্রিক_রং) * পাই / (3 * রিং_ নাম্বার) এর মতো কিছু গণনা করতে হবে। যাইহোক, ছবির ঘূর্ণন কোনও কিছুই প্রভাবিত করে না, তাই আমরা পাই / 6 অংশটি (6 বাইট সংরক্ষণ করতে) ফেলে দিতে পারি। এটি পূর্ববর্তী সূত্র এবং সরলকরণের সাথে একত্রিত করে আমরা পেয়েছিPi(#/(3r@#)+1-r@#)&

দুর্ভাগ্যক্রমে, এটি সেল 0 এর জন্য অপরিবর্তিত কারণ এর রিং নম্বর 0, সুতরাং আমাদের এটি প্রায় পাওয়া দরকার। একটি প্রাকৃতিক সমাধান কিছু হবে t=If[#==0,0,Pi(#/(3r@#)+1-r@#)]&। তবে যেহেতু আমরা 0 কোষের কোণটির বিষয়ে চিন্তা করি না এবং কারণ r@#এটি পুনরাবৃত্তি হয়, আমরা আসলে এখানে একটি বাইট সংরক্ষণ করতে পারিt=Limit[Pi(#/(3x)+1-x),x->r@#]&

এখন যে আমাদের কাছে রিং নম্বর এবং কোণ রয়েছে, আমরা একটি ঘরের অবস্থান (কেন্দ্র) আবিষ্কার করতে পারি যাতে আমরা সংলগ্নতার জন্য পরীক্ষা করতে পারি। আসল অবস্থান সন্ধান করা বিরক্তিকর কারণ রিংগুলি হেক্সাগোনাল, তবে আমরা কেবল বলাই করতে পারি যে রিংগুলি নিখুঁত চেনাশোনা হয় যাতে আমরা রিং নম্বরটিকে কোষের কেন্দ্রের দূরত্ব হিসাবে বিবেচনা করি This এটি সমস্যা হবে না যেহেতু কাছাকাছিটি খুব সুন্দর is বন্ধ। একটি জটিল সংখ্যার মেরু রূপ ব্যবহার করে , আমরা একটি সাধারণ ক্রিয়াকলাপ সহ জটিল প্লেনে এই আনুমানিক অবস্থানটি উপস্থাপন করতে পারি :p = r@#*Exp[I*t@#] &;

জটিল বিমানে দুটি জটিল সংখ্যার মধ্যকার দূরত্বটি তাদের পার্থক্যের নিখুঁত মান দ্বারা দেওয়া হয় এবং তারপরে আমরা আনুমানিক থেকে যে কোনও ত্রুটির যত্ন নিতে ফলাফলটি ঘুরতে পারি এবং এটি 1 এর সমান কিনা তা পরীক্ষা করতে পারি finally এই কাজের কি কোনও নাম নেই, তবে রয়েছে Round@Abs[p@#-p@#2]==1&


আপনি করতে পারেন অনলাইন এটা চেষ্টা মধ্যে উল্ফর্যাম ক্লাউড স্যান্ডবক্স নিচের মত কোড পেস্ট ক্লিক গিয়ার দ্বারা -> "সেল মূল্যায়ন" বা আঘাত করতে Shift + Enter বা নামপ্যাড লিখুন:

r=Floor[(1+Sqrt[(4#-1)/3])/2]&;t=Limit[Pi(#/(3x)+1-x),x->r@#]&;p=r@#*Exp[I*t@#]&;Round@Abs[p@#-p@#2]==1&[24,45]

বা সমস্ত পরীক্ষার ক্ষেত্রে:

r=Floor[(1+Sqrt[(4#-1)/3])/2]&;t=Limit[Pi(#/(3x)+1-x),x->r@#]&;p=r@#*Exp[I*t@#]&;Round@Abs[p@#-p@#2]==1&//MapThread[#,Transpose[{{0,1},{7,18},{8,22},{24,45},{40,64},{64,65},{6,57},{29,90},{21,38},{38,60},{40,63},{41,39},{40,40}}]]&
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.