গল্ফস্ক্রিপ্ট - 26 বাইট
{:i.)+.,{;10*i%.}%i>|,}:f;
সম্পাদনা: 1
দশমিক প্রতিনিধিত্বের দৈর্ঘ্যের চেয়ে দশমিক শেষ হলে আউটপুট আপডেট হয়েছে updated
একটি মোটামুটি দক্ষ সংস্করণ। মানটি 67890 প্রায় 10 সেকেন্ড এবং 99991 প্রায় 20 সেকেন্ডে চলে। এটি আগের চেয়ে খানিকটা ধীর (প্রায় অর্ধেক দ্রুত) যতটা পুনরাবৃত্তি হবে তার দ্বিগুণ হয়েছে, যার প্রথমার্ধটি অগ্রাহ্য করা হয়েছে।
বিকল্প, এছাড়াও 26 বাইট
{:i.)+.n*{*i%.}%i>)^^,}:f;
এই এক স্ট্রিং উপর পুনরাবৃত্তি দ্বারা কাজ করে "\n"*(2*i+1)
, যেখানে ফাংশনটিতে i
মান দেওয়া হয়। প্রতিটি সময় ব্লকে পাস করা মান হ'ল অর্ডিনাল মান "\n"
, যা 10 হয় ।
)^^
একটি কাজ-অ্যারাউন্ড একটি বিট হয়। আপনি যখন একটি স্ট্রিং থেকে একটি অক্ষর অননন করেন , ফলাফলটি উপরে বর্ণিত হিসাবে মুছে ফেলা অক্ষরের অর্ডিনাল মান। তবে, সেই মানটি আবার ফিরিয়ে দেওয়া চরিত্রের চেয়ে সেই সংখ্যার স্ট্রিং প্রতিনিধিত্ব যুক্ত করে দেবে - মোটামুটি স্বল্পসংখ্যক আচরণ এবং আমার মতে একটি ডিজাইনের ত্রুটি। আপনি যদি সত্যিই এটি করতে চেয়েছিলেন তবে প্রথমে স্ট্রিংফাইটিংয়ের জন্য কেবল একটি বাইট লাগবে।
চূড়ান্ত মানটির একটি অতিরিক্ত অনুলিপি ইতিমধ্যে স্ট্যাকের মধ্যে রয়েছে, তাই আমি চূড়ান্ত মানটি আবার সরিয়ে ফেলি )
, স্ট্রিং দিয়ে এটি xor করব এবং তারপরে আবার xor করব, যাতে যে কোনও অক্ষর প্রথম জোড় দ্বারা যুক্ত বা সরানো হয়েছিল তা পুনরুদ্ধার করা যায়। যদি int op string
তার স্ট্রিং প্রতিনিধিত্বের চেয়ে চরিত্র হিসাবে বিবেচিত হয় তবে এটি )^^
দ্বারা প্রতিস্থাপন করা যেতে পারে |
।
নোট করুন যে স্ট্রিংগুলি (যা গল্ফস্ক্রিপ্টে অন্তর্নিহিত বিন্যাস হিসাবে সঞ্চিত আছে) প্রতিটি অক্ষরের 256 এর মান প্রদর্শন করবে, প্রতিটি অক্ষরের মানগুলি এই সীমার বাইরে থাকতে পারে। স্বতন্ত্রতার জন্য (সেট অপারেশনগুলির মাধ্যমে) বা ইনটনেসিটির (মাধ্যমে ?
) পরীক্ষা করার সময়, এটি প্রকৃত মান যা তুলনা করা হয় তা প্রদর্শন মানের চেয়ে।
বর্তমান গল্ফস্ক্রিপ্ট ইন্টারপ্রেটারের জন্য একটি প্যাচ ফাইল :
61c61
< to_gs
---
> Gstring.new([self])
উপরেরটি কেবল string op int
(এবং বিপরীতে) এর আচরণকে প্রভাবিত করবে , যেখানে এর op
মধ্যে একটি
+-|&^
। এর আচরণ সহ সমস্ত কিছুই অকার্যকর থেকে যায় Gint`
।
নিম্নলিখিত 24 বাইট সমাধানটি তখন বৈধ হয়ে উঠবে:
{:i.)+.n*{*i%.}%i>|,}:f;
এবং এটি অন্যান্য সত্যই কুরুচিপূর্ণ কাজের চারপাশের স্থির করে দেয় ।
পাইথন - 48 বাইট
f=lambda n:len(set(10**-~i%n for i in range(n)))
সর্বাধিক দক্ষ সমাধান নয়, তবে 100000 এর চেয়ে কম মানের জন্য যুক্তিসঙ্গত ।
এফডাব্লুআইডাব্লু, মূল উপাদানটি দশমিকের মধ্যে চক্রীয় সংখ্যা উত্পন্ন করার জন্য আমার সমাধানের মতো ।
একই কোডের আরও কার্যকর সংস্করণ ( 70 বাইট ):
def f(n):
a=[];i=10%n
while i not in a:a+=i,;i=i*10%n
return len(a)
99991 মানটি এক সেকেন্ডের চেয়ে কম সময় নেয়।