-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 যুক্ত করুন
- যদি খালি হেক্স না পাওয়া যায়
- যদি প্রাণীটি সঠিক আকারের হয় এবং এটি ইতিমধ্যে চিড়িয়াখানায় নেই
- একের দ্বারা পৃথক প্রাণীর সংখ্যা বৃদ্ধি পেয়েছে
- চিড়িয়াখানায় প্রাণীর সমস্ত আবর্তন এবং প্রতিচ্ছবি যুক্ত করুন
খালি হেক্সসের সন্ধানে একটি আকর্ষণীয় প্রতিসাম্য উন্মোচিত হয়েছে। আরনাউল্ড আবিষ্কার করেছেন যে ছয়টি দিকের একটিকেই উপেক্ষা করা যেতে পারে তবে বাস্তবে ছয়টির মধ্যে তিনটি উপেক্ষা করা যেতে পারে!
এখানে আরনাউল্ডের মূল দিকনির্দেশ এবং টাইল কী রয়েছে:
কল্পনা করুন যে আমরা নীল বিন্দুতে টাইপ 1 এর টাইল এ শুরু করব। দেখে মনে হচ্ছে আমাদের d = 0 এবং d = 5 এ পুনরাবৃত্তি করতে হবে। যাইহোক, যে কোনও টাইল d = 0 এ স্থাপন করা হয়েছে, এটি অবশ্যই d = 4 এ প্রস্থান করবে, যা ডি = 5 এ টাইল এ থেকে বেরিয়ে আসার সমান হেক্স্স পরিদর্শন করবে। এটিই আরনাউল্ডের আবিষ্কার এবং এটিই আমাকে ভাবতে শুরু করেছিল।
লক্ষ্য করুন:
এর অর্থ হ'ল আমাদের কেবল 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
n=10
টিআইও-তে আপ পরিচালনা করতে সক্ষম হওয়া উচিত " " - যদি এটি কার্যকর করার গতির প্রয়োজন হয় তবে দয়া করে কোড-গল্ফের পরিবর্তে কোড-চ্যালেঞ্জ ব্যবহার করুন , এটি পরে বিশুদ্ধ বাইট অপটিমাইজেশন কার্যকে উল্লেখ করে।