কোলাটজ-এর মতো ক্রম বিশ্লেষণ করা


12

আমরা 4 টি ধনাত্মক পূর্ণসংখ্যার সাথে একটি কোলাটজ- অনুরূপ ক্রম সংজ্ঞায়িত করেছি s:

  • n শুরুর মান
  • d > 1 ভাজক
  • m > 1 গুণক
  • i বৃদ্ধি

(মূল কোলাটজ ক্রম d = 2 m = 3এবং i = 1।)

প্রদত্ত এই পূর্ণসংখ্যা sনিম্নলিখিত পদ্ধতিতে তৈরি করা হবে:

  • s(0) = n
  • যদি k > 0এবং s(k-1) mod d = 0তারপরs(k) = s(k-1) / d
  • যদি k > 0এবং s(k-1) mod d != 0তারপরs(k) = s(k-1) * m + i

এর সাথে একটি উদাহরণ ক্রম d = 2, m = 3, i = 5এবং n = 80হবে s = 80, 40, 20, 10, 5, 20, 10, 5, 20, ...

প্রতিটি অনুক্রম হয় যে কোনও নির্দিষ্ট বাউন্ডের চেয়ে উচ্চতর মানগুলিতে পৌঁছে যাবে (অর্থাত ক্রমটি বিচ্ছিন্ন) বা যদি কিছুটির ( tএবং ) সাম্যটি সত্য হয় তবে অসীম লুপে প্রবেশ করবে।ut!=us(t) = s(u)

আমাদের সমস্যায় যদি সিক্যুয়েন্স উপাদানটির মান বৃহত্তর হয় 10^9বা 1000ত্রিম উপাদানটির আগে কোনও উপাদান পুনরাবৃত্তি না হয় তবে সিকোয়েন্সটি বিভাজক হিসাবে বিবেচনা করা হয়।

কাজটি

আপনি একটি প্রোগ্রাম বা ফাংশন যা ধনাত্মক পূর্ণসংখ্যা লাগে লিখতে হবে d mএবং iসিকোয়েন্স (অসীম loops এবং বিকিরণ) যা শুরু মূল্যবোধের সব বিভিন্ন বিভক্তি ধরনের ইনপুট এবং আউটপুট হিসাবে n = 1, 2, 3, ... 999, 1000তৈরী করতে পারে।

ইনপুট বিশদ

  • ইনপুট একটি স্ট্রিং বা তালিকা (অথবা আপনার ভাষায় নিকটস্থ সমতুল্য) প্রতিনিধিত্বমূলক (সাধারণ উপায়) তিন ধনাত্মক পূর্ণসংখ্যা হয় d, mএবং iযাতে। dএবং mঅন্তত হয় 2। এর চেয়ে বড় সংখ্যাও নয় 100

আউটপুট বিশদ

আউটপুট স্পেসিফিকেশন কিছু শব্দযুক্ত। প্রথমে উদাহরণগুলি পরীক্ষা করার জন্য মূল্যবান।

  • আপনার স্ট্যান্ডার্ড আউটপুট (বা নিকটতম বিকল্প) এ আউটপুট করা উচিত বা স্ট্রিংটি ফিরতে হবে।
  • ডাইভারজেন্ট সিকোয়েন্স সম্ভব হলে প্রথম লাইন হওয়া উচিত DIVERGENT
  • সিকোয়েন্সের লুপের একটি অনন্য প্রতিনিধিত্ব হ'ল এটি ঘূর্ণন যেখানে ক্ষুদ্রতম সংখ্যাটি স্পেস দ্বারা পৃথক পৃথক। যেমন s = 2 1 4 2 1 4 2 1লুপ হয় 4 2 1
  • প্রতিটি নিম্নলিখিত লাইনে আপনার প্রতিটি অনন্য লুপটি শব্দের ঠিক একবার আগে আউটপুট করা উচিত LOOP। যেমনLOOP 4 2 1
  • লুপগুলি তাদের শেষ উপাদানটির ক্ষেত্রে আরোহী ক্রমে হওয়া উচিত।
  • ট্রেলিং নিউলাইন optionচ্ছিক।

উদাহরণ:

প্রথম লাইনগুলি ইনপুট এবং নিম্নলিখিত ফাঁকা রেখা না হওয়া পর্যন্ত নিম্নলিখিতগুলি হ'ল আউটপুট।

2 3 1
LOOP 4 2 1

2 2 6
LOOP 8 4 2 1
LOOP 12 6 3

3 7 8
DIVERGENT
LOOP 15 5 43 309 103 729 243 81 27 9 3 1
LOOP 22 162 54 18 6 2
LOOP 36 12 4

3 9 1
DIVERGENT

6 9 9
DIVERGENT
LOOP 18 3 36 6 1
LOOP 27 252 42 7 72 12 2
LOOP 45 414 69 630 105 954 159 1440 240 40 369 3330 555 5004 834 139 1260 210 35 324 54 9 90 15 144 24 4
LOOP 81 738 123 1116 186 31 288 48 8
LOOP 99 900 150 25 234 39 360 60 10
LOOP 126 21 198 33 306 51 468 78 13

10 10 10
LOOP 20 2 30 3 40 4 50 5 60 6 70 7 80 8 90 9 100 10 1

93 91 92
DIVERGENT
LOOP 2185 198927 2139 23
LOOP 4278 46

আইডিয়নে পাইথন 3 এ রেফারেন্স বাস্তবায়ন।

এটি কোড-গল্ফ তাই স্বল্পতম এন্ট্রি জয়।

উত্তর:


5

পাইথন 3, 269 254 252 246 বাইট

d,m,i=eval(input())
S=set()
for n in range(1,1001):
 T=X=()
 while len(T)**3<1e9>=n:
  T=(n,)+T;n=[n//d,n*m+i][n%d>0]
  if n in T:I=T.index;L=T[:I(n)+1];M=I(min(L));X=L[M:]+L[:M]
 S|={X}
for x in sorted(S):print(x and"LOOP"or"DIVERGENT",*x[::-1])

(কয়েকটি বাইট সংরক্ষণের জন্য এখন 10 গুণ ধীর। সাধারণ কোড গল্ফ))

STDIN (উদাঃ [2, 3, 1]) এর মাধ্যমে একটি তালিকা ইনপুট করুন । আমি ভাবছি যে চক্রগুলি মানক করার আরও ভাল উপায় হতে পারে ...

পদ্ধতির অবস্থানটি বেশ সোজা - সমস্ত 1000 নম্বর পরীক্ষা করুন এবং কেবল অনন্য আউটপুট নিন। তবে, সেখানে দুটি ছোট কৌশল রয়েছে:

  • লুপগুলি মজাদার টিউপস দ্বারা প্রতিনিধিত্ব করা হয়, তবে আরও গুরুত্বপূর্ণভাবে ডাইভার্জেনটি খালি টিপল দ্বারা প্রতিনিধিত্ব করা হয় । এটি ভাল কারণ:

    • এটি ভেঙে না sorted, এবং সমস্ত লুপ টিপলসগুলির আগে উপস্থিত হবে
    • এটি আমাদের মাধ্যমে একটি স্ট্রিং নির্বাচন করতে দেয় x and"LOOP"or"DIVERGENT"
    • *()[::-1] প্রভাবিত করে না print
  • লুপগুলি পিছনের দিকে নির্মিত হয় "শেষের উপাদান দ্বারা আরোহণের বাছাই "টিকে" প্রথম উপাদান অনুসারে বাছাই করে "পরিণত করা, যা একটি ল্যাম্বডায় প্রবেশ করার প্রয়োজনীয়তা সরিয়ে দেয় sorted

পূর্ববর্তী জমা, 252 বাইট

d,m,i=eval(input())
def f(n,T=()):
 x=[n//d,n*m+i][n%d>0];I=T.index
 if x in T:L=T[:I(x)+1];M=I(min(L));return L[M:]+L[:M]
 return()if(T[1000:]or x>1e9)else f(x,(x,)+T)
for x in sorted(set(map(f,range(1,1001)))):print(x and"LOOP"or"DIVERGENT",*x[::-1])

এটি অনেক দ্রুত one's

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