পরিষ্কার , 284 279 272 262 বাইট
import StdEnv
l=[0,-1,-1,0,1,1]
c(u,v)(p,q)=(u-p)^2+(v-q)^2<2||(u-p)*(q-v)==1
$[h:t]m=hd[[e: $t[(h,e):m]]\\e<-[1..]|and[e<>j\\(u,v)<-m|c h u,(p,q)<-m|q==v,(i,j)<-m|c p i]]
$(scan(\(a,b)(u,v)=(a-u,b-v))(0,0)[(i,j)\\n<-[1..],i<-[1,1:l]&j<-l,_<-[max(~j<<i)1..n]])[]
এটি অনলাইন চেষ্টা করুন!
ক্রমটি চিরকালের জন্য উত্পন্ন করে।
ষড়ভুজ ম্যাপিং
কোডগুলির বেশিরভাগই হেক্সাগনকে ম্যাপিংয়ে অনন্যভাবে (x,y)
স্থানাঙ্কগুলিতে চলে যায় যাতে সংলগ্নতা নির্ধারণ করার জন্য একটি একক, সরল ফাংশন রয়েছে যা সমস্ত পয়েন্ট ম্যাপিংয়ের জন্য ধারণ করে।
ম্যাপ করা পয়েন্টগুলি এর মতো দেখতে:
---
--- < 2,-2> --- x-axis ___.X'
--- < 1,-2> === < 2,-1> --- /__.X'
< 0,-2> === < 1,-1> === < 2, 0>'
=== < 0,-1> === < 1, 0> ===
<-1,-1> === < 0, 0> === < 1, 1>
=== <-1, 0> === < 0, 1> ===
<-2, 0> === <-1, 1> === < 0, 2>.__
--- <-2, 1> === <-1, 2> --- \ 'Y.___
--- <-2, 2> --- y-axis 'Y.
---
সেখান থেকে, সংলগ্নতা নির্ধারণ করা তুচ্ছ এবং এটি ঘটে যখন:
x1 == x2
এবং abs(y1-y2) == 1
y1 == y2
এবং abs(x1-x2) == 1
y1 == y2 - 1
এবং x2 == x1 - 1
y1 == y2 + 1
এবং x2 == x1 + 1
x1 == x2
এবং y1 == y2
পয়েন্ট জেনারেশন
লক্ষ্য করুন যে একটি সর্পিলে ষড়ভুজটি অতিক্রম করার সময় প্রতিটি স্তরের জন্য পার্থক্যগুলি পুনরাবৃত্তি করে n
:
n
পদক্ষেপ (1,0)
n-1
পদক্ষেপ (1,-1)
n
পদক্ষেপ (0,-1)
n
পদক্ষেপ (-1,0)
n
পদক্ষেপ (-1,1)
n
পদক্ষেপ (0,1)
এটি এই ক্রমের উপসর্গের যোগফল গ্রহণ করে সঠিক ক্রমে পয়েন্টগুলি তৈরি করে:
scan(\(a,b)(u,v)=(a-u,b-v))(0,0)[(i,j)\\n<-[1..],i<-[1,1:l]&j<-l,_<-[max(~j<<i)1..n]]
একসাথে এনেছি
কোডটি যা আসলে প্রশ্ন থেকে ক্রমটি সন্ধান করে তা হ'ল:
$[h:t]m=hd[[e: $t[(h,e):m]]\\e<-[1..]|and[e<>j\\(u,v)<-m|c h u,(p,q)<-m|q==v,(i,j)<-m|c p i]]
যা ঘুরেফিরে বেশিরভাগ ফিল্টার করে and[r<>j\\(u,v)<-m|c h u,(p,q)<-m|q==v,(i,j)<-m|c p i]
এই ফিল্টারটি m
ইতিমধ্যে ম্যাপ করা পয়েন্টগুলির তালিকা থেকে পয়েন্ট নেয় :
- যে কোনওটির সমান প্রাকৃতিক সংখ্যাগুলি উপেক্ষা করা
j
- সংলগ্ন প্রতিটি
(i,j)
যেখানেi
p
- প্রতিটি
(p,q)
যেখানে মান q
সমানv
- প্রত্যেক জন্য
(u,v)
যেখানে u
বর্তমান বিন্দু সংলগ্ন