ষড়ভুজীয় টাইলিংয়ের উপর প্রাণীদের গণনা


18

এই চ্যালেঞ্জটি আপনাকে টাইল গেম পালাগোতে "প্রাণী" গণনা করবে ।

একটি প্রাণী হ'ল ষড়ভুজীয় গ্রিডে পালাগো টাইলসের সাথে ম্যাচিংয়ের রঙের তৈরি হওয়া কোনও বদ্ধ আকার।

গেম পালাগো এই জাতীয় টাইল নিয়ে গঠিত:

পালাগো টাইল

এই টাইলগুলি 120 , 240 ঘোরানো যেতে পারে , বা একেবারেই নয় এবং ষড়ভুজ গ্রিডে যে কোনও জায়গায় রাখা যায়। উদাহরণস্বরূপ, এখানে একটি (লাল) জীব রয়েছে যার জন্য 12 টাইল প্রয়োজন।বারো টাইল প্রাণী।

চ্যালেঞ্জ

এই চ্যালেঞ্জের লক্ষ্য হ'ল এমন একটি প্রোগ্রাম লিখুন যা nকোনও ইনপুট হিসাবে পূর্ণসংখ্যা নেয় এবং প্রাণীর সংখ্যার (ঘূর্ণন এবং প্রতিবিম্ব পর্যন্ত) গণনা করে যাতে nটাইলগুলির প্রয়োজন হয় । প্রোগ্রামটি টিআইও-n=10 তে আপ পরিচালনা করতে সক্ষম হওয়া উচিত । এটি , তাই খুব কম বাইট জিতেছে।

উদাহরণ ডেটা

স্রষ্টার ওয়েবসাইটের "ক্রিচার গণনা এবং অনুমান" বিভাগে পাওয়া তথ্যের সাথে মানগুলি মিলিত হওয়া উচিত । যথা

 n | output
---+-------
 1 | 0
 2 | 0
 3 | 1 
 4 | 0
 5 | 1
 6 | 1
 7 | 2
 8 | 2
 9 | 9
10 | 13
11 | 37
12 | 81

"প্রোগ্রামটি n=10টিআইও-তে আপ পরিচালনা করতে সক্ষম হওয়া উচিত " " - যদি এটি কার্যকর করার গতির প্রয়োজন হয় তবে দয়া করে কোড-গল্ফের পরিবর্তে কোড-চ্যালেঞ্জ ব্যবহার করুন , এটি পরে বিশুদ্ধ বাইট অপটিমাইজেশন কার্যকে উল্লেখ করে।
জোনাথন ফ্রেচ

10
এখানে আলোচনার ভিত্তিতে , দেখে মনে হচ্ছে যে কোনও কোড-গল্ফ প্রশ্নে কার্যকর করার গতি প্রয়োজন , যতক্ষণ না স্কোরিং বাইট সংখ্যা number
পিটার কেজি

2
+1 ঠিক একটি সর্পিল ক্রমের মতো , এই চ্যালেঞ্জটি বোঝা সহজ এবং সমাধান করা সত্যই আকর্ষণীয় ... তবে বেশ কিছুটা কোডের প্রয়োজন। : পি
আর্নল্ড

1
সুতরাং .... আমরা কেবল একটি ইনপুট নিচ্ছি এবং উপরের তালিকা থেকে আউটপুট ফিরে আসছি, এন এর জন্য 1 থেকে 10? আমি কি কেবল একটি সারণী ব্যবহার করতে পারি?
ব্র্যাডিসি

6
@ ব্র্যাডসি এটি একটি ডিফল্ট ফাঁক । ওপি কেবল বলেছে যে সমাধানগুলি টিআইওতে পর্যন্ত পরিচালনা করতে সক্ষম হবে । এন=10
আর্নল্ড

উত্তর:


5

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

-63৩ বাইটস @ আর্নল্ডকে ধন্যবাদ। কি দারুন.

n=>(E=(x,y,d,k,h)=>V[k=[x+=1-(d%=3),y+=~d%3+1,d]]?0:(V[k]=1,h=H.find(h=>h[0]==x&h[1]==y))?(d^(t=2-h[2])?E(x,y,t)||E(x,y,h[2]*2):E(x,y,t+2)):[x,y,0],I=c=>c.map(([x,y,t])=>[x-g(0),y-g(1),t],g=p=>Math.min(...c.map(h=>h[p]))).sort(),S=e=>(V={},e=E(0,0,0))?(--n&&H.pop(H.push(e),S(),S(e[2]=1),S(e[2]=2)),++n):n-1||E[I(c=H)]||[0,0,0,++N,0,0].map(r=>E[I(c=c.map(([x,y,t])=>[-x-y,r?y:x,(r?t*2:t+1)%3]))]=1))(H=[[N=0,0,1]])&&N

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

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

খালি হেক্সেস অনুসন্ধান করা হচ্ছে

প্রাণীর সন্ধান:

  • টাইল 1 দিয়ে 0,0 এ টাইলগুলির তালিকা শুরু করুন
  • recursively:
    • জীবকে সম্পূর্ণ করার জন্য প্রয়োজনীয় একটি খালি হেক্স্স অনুসন্ধান করুন
    • যদি খালি হেক্স পাওয়া যায়
      • খালি হেক্স এবং পুনরাবৃত্তি করতে প্রতিটি ধরণের টাইল 0,1,2 যুক্ত করুন
    • যদি খালি হেক্স না পাওয়া যায়
      • যদি প্রাণীটি সঠিক আকারের হয় এবং এটি ইতিমধ্যে চিড়িয়াখানায় নেই
        • একের দ্বারা পৃথক প্রাণীর সংখ্যা বৃদ্ধি পেয়েছে
        • চিড়িয়াখানায় প্রাণীর সমস্ত আবর্তন এবং প্রতিচ্ছবি যুক্ত করুন

খালি হেক্সসের সন্ধানে একটি আকর্ষণীয় প্রতিসাম্য উন্মোচিত হয়েছে। আরনাউল্ড আবিষ্কার করেছেন যে ছয়টি দিকের একটিকেই উপেক্ষা করা যেতে পারে তবে বাস্তবে ছয়টির মধ্যে তিনটি উপেক্ষা করা যেতে পারে!

এখানে আরনাউল্ডের মূল দিকনির্দেশ এবং টাইল কী রয়েছে:

আরনাউল্ডের দিকনির্দেশ এবং টাইল কী key

কল্পনা করুন যে আমরা নীল বিন্দুতে টাইপ 1 এর টাইল এ শুরু করব। দেখে মনে হচ্ছে আমাদের d = 0 এবং d = 5 এ পুনরাবৃত্তি করতে হবে। যাইহোক, যে কোনও টাইল d = 0 এ স্থাপন করা হয়েছে, এটি অবশ্যই d = 4 এ প্রস্থান করবে, যা ডি = 5 এ টাইল এ থেকে বেরিয়ে আসার সমান হেক্স্স পরিদর্শন করবে। এটিই আরনাউল্ডের আবিষ্কার এবং এটিই আমাকে ভাবতে শুরু করেছিল।

লক্ষ্য করুন:

  • D = 0 এ প্রস্থান করা প্রতিটি টাইলের d = 5 এ প্রস্থান থাকে
  • D = 2 এ প্রস্থান করা প্রতিটি টাইলের d = 1 এ প্রস্থান থাকে
  • D = 4 এ প্রস্থান করা প্রতিটি টাইলের d = 3 এ প্রস্থান থাকে

  • D = 0 থেকে প্রবেশ করা যেতে পারে এমন প্রতিটি টাইলের d = 4 এ প্রস্থান করা হবে

  • D = 2 থেকে প্রবেশ করা যায় এমন প্রতিটি টাইলের d = 0 এ প্রস্থান করা হবে
  • D = 4 থেকে প্রবেশ করা যায় এমন প্রতিটি টাইলের d = 2 এ প্রস্থান থাকে

এর অর্থ হ'ল আমাদের কেবল 0,2,4 দিকনির্দেশ বিবেচনা করতে হবে। 1,3,5 দিকের কোনও প্রস্থান অগ্রাহ্য করা যাবে কারণ 1,3,5 দিকগুলিতে পৌঁছনীয় হেক্সেস পরিবর্তে 0,2 বা 4 দিক ব্যবহার করে সংলগ্ন হেক্স থেকে পৌঁছানো যেতে পারে।

কিভাবে শীতল হয়!?

পুনঃবিবেচিত দিকনির্দেশগুলি

সুতরাং আমি এর মতো দিকনির্দেশ এবং টাইলগুলি পুনরায় বিদ্রোহ করি (আর্নল্ডের চিত্র সম্পাদিত):

সরলীকৃত দিকনির্দেশ

টাইলস, এন্ট্রি এবং প্রস্থানগুলির মধ্যে এখন আমাদের নীচের সম্পর্ক রয়েছে:

    |  t=0  |  t=1  |  t=2
----+-------+-------+-------
d=0 |  0,2  |  1,2  |    2
d=1 |  0,2  |    0  |  0,1
d=2 |    1  |  1,2  |  0,1

সুতরাং প্রস্থানগুলি হল: d + t == 2? (4-টি)% 3: 2-টি এবং 2 * টি% 3

ষড়ভুজাকৃতির আবর্তন এবং প্রতিচ্ছবি

আবর্তন এবং প্রতিবিম্বের জন্য, আমি x, y, z কিউব স্থানাঙ্কের পরিবর্তে x, y ষড়ভুজীয় অক্ষীয় স্থানাঙ্কগুলি চেষ্টা করার সিদ্ধান্ত নিয়েছি ।

-1,2   0,2   1,2   2,2
    0,1   1,1   2,1
 0,0   1,0   2,0   3,0

এই সিস্টেমে আবর্তন এবং প্রতিবিম্বটি আমার প্রত্যাশার চেয়ে সহজ ছিল:

120 Rotation:   x=-x-y   y=x   t=(t+1)%3
Reflection:     x=-x-y   y=y   t=(t*2)%3

আমি সম্পাদিত সমস্ত সংমিশ্রণগুলি পেতে: পচা, পচা, পচা, প্রতিবিম্বিত, পচা, পচা

কোড (মূল 480 বাইট)

f=n=>(
    // H:list of filled hexes [x,y,tile] during search for a complete creature
    // N:number of distinct creatures of size n
    // B:record of all orientations of all creatures already found
    H=[[0,0,1]],N=0,B={},

// E: find an empty hex required to complete creature starting in direction d from x,y
    E=(x,y,d,k,h)=>(
        x+=1-d,
        y+=1-(d+1)%3,
        // V: list of visited hexes during this search in E
        V[k=[x,y,d]] ? 
            0
        : (V[k]=1, h=H.find(h=>h[0]==x&&h[1]==y)) ? 
            // this hex is filled, so continue search in 1 or 2 directions
            (d==2-h[2] ? E(x,y,(4-h[2])%3) : (E(x,y,2-h[2]) || E(x,y,h[2]*2%3))) 
        : [x,y,0] // return the empty hex 
    ),

    // I: construct unique identifier for creature c by moving it so x>=0 and y>=0
    I=c=>(
        M=[0,1].map(p=>Math.min(...c.map(h=>h[p]))),
        c.map(([x,y,t])=>[x-M[0],y-M[1],t]).sort()
    ),

    // A: add complete creature c to B
    A=c=>{
        n==1&&!B[I(c)]&&(
            // creature is correct size and is not already in B
            N++,
            [0,0,0,1,0,0].map(
                // Add all rotations and reflections of creature into B
                // '0' marks a rotation, '1' marks a (vertical) reflection
                // rotation:   x=-x-y   y=x   t=(t+1)%3
                // reflection: x=-x-y   y=y   t=(t*2)%3
                r=>B[I(c=c.map(([x,y,t])=>[-x-y,r?y:x,(r?t*2:t+1)%3]))]=1)          
        )
    },

    // S: recursively search for complete creatures starting with hexes H
    S=e=>{
        V={};
        (e=E(0,0,0)) ?
            // e is a required empty hex, so try filling it with tiles 0,1,2
            (--n && (H.push(e),S(),S(e[2]=1),S(e[2]=2),H.pop()), ++n)
        : A(H) // creature is complete, so add it to B
    },

    S(),
    N
)

কোড (আর্নল্ড 417 বাইট)

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

f=n=>(
    // E:find an empty hex required to complete creature starting in direction d from x,y
    E=(x,y,d,k,h)=>
      V[k=[x+=1-(d%=3),y+=~d%3+1,d]] ?
        0
      :(V[k]=1,h=H.find(h=>h[0]==x&h[1]==y)) ?
        (d^(t=2-h[2]) ? E(x,y,t) || E(x,y,h[2]*2) : E(x,y,t+2))
      :[x,y,0],

    // I: construct unique identifier for creature c by moving it so x>=0 and y>=0
    I=c=>c.map(([x,y,t])=>[x-g(0),y-g(1),t],g=p=>Math.min(...c.map(h=>h[p]))).sort(),

    // S: recursively search for complete creatures starting with hexes H
    S=e=>
      (V={},e=E(0,0,0)) ?
        (--n&&H.pop(H.push(e),S(),S(e[2]=1),S(e[2]=2)),++n)
      :n-1
        ||E[I(c=H)] 
        // creature is the correct size and has not been seen before
        // so record all rotations and reflections of creature in E[]
        ||[0,0,0,++N,0,0].map(r=>E[I(c=c.map(([x,y,t])=>[-x-y,r?y:x,(r?t*2:t+1)%3]))]=1)
)
// This wonderfully confusing syntax initializes globals and calls S()
(H=[[N=0,0,1]]) && N

দিকনির্দেশে দুর্দান্ত অন্তর্দৃষ্টি! এবং আমি মনে করি এটি আমার উত্তর আকারের নীচে গল্ফ করা যেতে পারে।
আর্নল্ড


@ আর্নল্ড এটি দুর্দান্ত! আমার এখন এখন আমার সামনে একটি বড় কাজের দিন রয়েছে, তবে আগামীকাল এটি পরীক্ষা করার জন্য অপেক্ষা করুন। ধন্যবাদ।
জন রিস

20

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

f=(n,T=[B=[N=0,0,0,1,1]])=>!n||T.some(([x,y,q,m])=>B.some((p,d)=>m>>d&1&&((p=x+~-s[d],q=y+~-s[d+2],t=T.find(([X,Y])=>X==p&Y==q))?(q=t[3])&(p=D[d*3+t[4]])^p?t[f(n,T,t[3]|=p),3]=q:0:[0,1,2].map(t=>f(n-1,[...T,[p,q,-p-q,D[d*3+t],t]])))),s="2100122",D=Buffer("160).(9!'8 &$<%"))|n>1||[0,1,2,1,2,0].some((_,d,A)=>B[k=T.map(a=>[(h=n=>Math.min(...T.map(R=a=>a[A[(d+n)%6]]))-R(a))(0),h(3),(x=(a[4]+d*2)%3,d>2)*x?3-x:x]).sort()])?N:B[k]=++N

এন=1এন=13

কিভাবে?

দিকনির্দেশ এবং টাইলস

আমরা 6-দিকের কম্পাস এবং টাইলগুলির জন্য নিম্নলিখিত কোডগুলি ব্যবহার করি:

দিকনির্দেশ এবং টাইলস

আমরা ধরে নিই যে প্রাণীটি নীল।

সংযোগ

যখন আমরা একটি নির্দিষ্ট দিকের প্রদত্ত টাইলটি প্রবেশ করি তখন প্রাণীর কোন অংশগুলিকে অন্যান্য টাইলগুলির সাথে সংযুক্ত করা দরকার তা জানতে আমাদের একটি টেবিলের প্রয়োজন:

     |  T=0  |  T=1  |  T=2
-----+-------+-------+-------
 d=0 | 0,4,5 | 1,2,4 |   4
 d=1 | 0,3,5 | 1,2,3 |   3
 d=2 | 0,3,4 |   0   | 0,1,2
 d=3 | 3,4,5 |   5   | 1,2,5
 d=4 |   2   | 2,3,4 | 0,2,5
 d=5 |   1   | 1,3,4 | 0,1,5

উদাহরণ:

15134

সংযোগ

5

     |  T=0  |  T=1  |  T=2
-----+-------+-------+-------
 d=0 |  0,4  | 1,2,4 |   4
 d=1 |  0,3  | 1,2,3 |   3
 d=2 | 0,3,4 |   0   | 0,1,2
 d=3 |  3,4  |   -   |  1,2
 d=4 |   2   | 2,3,4 |  0,2

এই আপডেটের দিকনির্দেশগুলি প্রথমে 5-বিট পূর্ণসংখ্যার হিসাবে পুনরায় এনকোড করা হবে এবং তারপরে এর একটি নির্দিষ্ট অফসেট সহ ASCII অক্ষর হিসাবে থাকবে+ +32:

     |  T=0  |  T=1  |  T=2              |  T=0  |  T=1  |  T=2
-----+-------+-------+-------       -----+-------+-------+-------
 d=0 |   17  |   22  |   16          d=0 |  "1"  |  "6"  |  "0"
 d=1 |    9  |   14  |    8          d=1 |  ")"  |  "."  |  "("
 d=2 |   25  |    1  |    7    -->   d=2 |  "9"  |  "!"  |  "'"
 d=3 |   24  |    0  |    6          d=3 |  "8"  |  " "  |  "&"
 d=4 |    4  |   28  |    5          d=4 |  "$"  |  "<"  |  "%"

একবার সমতল হয়ে গেলে এটি দেয়:

D = Buffer("160).(9!'8 &$<%")

স্থানাঙ্ক

টাইলগুলির অবস্থান বর্ণনা করার জন্য, আমরা সাথে কিউব স্থানাঙ্ক ব্যবহার করি এক্স+ +Y+ +z- র=0:

কিউব স্থানাঙ্ক

ক্রেডিট: www.redblobgames.com

এটি অ্যালগরিদমের চূড়ান্ত ধাপে আবর্তন এবং প্রতিচ্ছবিগুলি প্রক্রিয়া করা সহজ করবে।

টাইল এনকোডিং

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

প্রতিটি টালি হিসাবে সংরক্ষণ করা হয় (এক্স,Y,z- র,মি,টি) কোথায়:

  • (এক্স,Y,z- র) উপরে বর্ণিত টাইলের কিউব স্থানাঙ্কগুলি
  • মি দিকনির্দেশের 5-বিট মুখোশ যা সংযুক্ত হওয়া দরকার
  • টি এর ধরণ (0, 1 অথবা 2)

অ্যালগরিদম

আমরা টাইপের একক টাইল দিয়ে শুরু করি 1(0,0,0), দিকনির্দেশে একটি প্রয়োজনীয় সংযোগ সহ 0:

প্রাথমিক টাইল

সুতরাং, এই টাইল হিসাবে এনকোড করা হয় [0,0,0,1,1]

প্রতিটি পুনরাবৃত্তিতে, আমরা সন্ধান করি:

  • অনুপস্থিত সংযোগগুলির সাথে টাইলস: এই ক্ষেত্রে, আমরা প্রতিটি ধরণের টাইলের সাথে সংযোগটি সম্পূর্ণরূপে চেষ্টা করার চেষ্টা করি।

  • টাইলস যা ইতিমধ্যে সংযুক্ত রয়েছে তবে যার জন্য নতুন সংযোগ যুক্ত করা দরকার কারণ সেগুলি অন্য দিকে পৌঁছেছে: এক্ষেত্রে আমরা দিকনির্দেশটি মাস্কটি আপডেট করি (একটি বিটওয়াইস ওআর দিয়ে) এবং একটি নতুন পুনরাবৃত্তি বাধ্য করি।

যদি সমস্ত সংযোগ বৈধ হয় এবং আমরা অনুরোধ করা টাইলসের সংখ্যায় পৌঁছেছি, তবে আমাদের এটি এখনও পরীক্ষা করা দরকার যে এটি কোনও নতুন প্রাণী বা বিদ্যমান কোনওটির পরিবর্তিত সংস্করণ:

  1. আমরা নিম্নলিখিত রূপান্তরগুলি প্রয়োগ করি:

    • প্রতিস্থাপনের মাধ্যমে আমরা 3 টি সম্ভাব্য আবর্তন সম্পাদন করি (এক্স,Y) সঙ্গে (এক্স,Y) (কোনও আবর্তন নেই), (Y,z- র) (120 °) বা (z- র,এক্স) (240।), এবং সেই অনুযায়ী টাইলগুলির ধরণের আপডেট করা।

    • প্রতিস্থাপনের মাধ্যমে আমরা 3 সম্পর্কিত প্রতিচ্ছবি সম্পাদন করি (এক্স,Y) সঙ্গে (Y,এক্স), (z- র,Y) অথবা (এক্স,z- র), এবং সেই অনুযায়ী টাইলগুলির ধরণের আপডেট করা।

  2. প্রতিটি রূপান্তরের জন্য, আমরা সমস্ত টাইলগুলি অনুবাদ করি যে নীচে ডানদিকের কোণটি সর্বদা অবস্থিত (0,0)। (স্থানাঙ্কগুলির লক্ষণগুলি প্রক্রিয়াটিতে উল্টানো হয়, যা প্রযুক্তিগতভাবে অন্য প্রতিবিম্বের দিকে পরিচালিত করে তবে এটি নির্দোষ।

  3. আমরা টাইলগুলি তাদের স্থানাঙ্ক এবং প্রকার অনুসারে বাছাই করি। (এই সাজানোর শব্দতাত্ত্বিক ক্রমে প্রক্রিয়া করা হয়, যা ভাল))

  4. অবশেষে আমরা ফলাফলটিকে তালিবদ্ধ করে একটি মূল স্ট্রিংয়ে যা অন্য কীগুলির সাথে তুলনা করা যায়।

  5. কোনও পরিচিত কীটি মিলে যাওয়ার সাথে সাথে আমরা গর্ভপাত বন্ধ করে দিই, বা নতুন কী সঞ্চয় করে রাখি এবং চূড়ান্ত ফলাফলটি বাড়িয়ে দিই যদি কোনও রূপান্তর কোনও পরিচিত কী না নিয়ে যায়।

মন্তব্য

f = (n, T = [B = [N = 0, 0, 0, 1, 1]]) =>
  // abort if n = 0
  !n ||
  // for each tile in T
  T.some(([x, y, q, m]) =>
    // for d = 0 to d = 4
    B.some((p, d) =>
      // if this tile requires a connection in this direction
      m >> d & 1 && (
        // look for a connected tile t at the corresponding position (p, q)
        (
          p = x + ~-s[d],
          q = y + ~-s[d + 2],
          t = T.find(([X, Y]) => X == p & Y == q)
        ) ?
          // if t exists, make sure that its direction mask is up-to-date
          (q = t[3]) & (p = D[d * 3 + t[4]]) ^ p ?
            // if it's not, update it and force a new iteration
            t[f(n, T, t[3] |= p), 3] = q
          :
            0
        :
          // if t does not exist, try each type of tile at this position
          [0, 1, 2].map(t => f(n - 1, [...T, [p, q, -p - q, D[d * 3 + t], t]]))
      )
    ),
    // s is used to apply (dx, dy)
    s = "2100122",
    // D holds the direction masks for the connections
    D = Buffer("160).(9!'8 &$<%")
  ) |
  // stop here if the above some() was truthy or we have more tiles to add
  n > 1 ||
  // otherwise, apply the transformations
  [0, 1, 2, 1, 2, 0].some((_, d, A) =>
    B[
      // compute the key k
      k =
        // by generating the updated tuples [x, y, type] and sorting them
        T.map(a =>
          [
            // transform the 1st coordinate
            (h = n => Math.min(...T.map(R = a => a[A[(d + n) % 6]])) - R(a))(0),
            // transform the 2nd coordinate
            h(3),
            // update the type
            (x = (a[4] + d * 2) % 3, d > 2) * x ? 3 - x : x
          ]
        ).sort()
    ]
  ) ?
    // if the key was found, just return N
    N
  :
    // if this is a new creature, store its key and increment N
    B[k] = ++N

এই উত্তরটি ভালবাসি। উইকএন্ডে শট দেওয়ার জন্য আমাকে সবাই বরখাস্ত করল!
জন রেস

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

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