সুপার কোলাটজ সংখ্যা মুদ্রণ করুন


22

Collatz সিকোয়েন্স (এছাড়াও 3x + 1 টি সমস্যা বলা হয়) যেখানে আপনি, কোনো ধনাত্মক পূর্ণসংখ্যা দিয়ে শুরু এই উদাহরণস্বরূপ আমরা 10 ব্যবহার করবে, এবং এটি করার জন্য পদক্ষেপ এই সেটটির প্রযোজ্য:

if n is even:
    Divide it by 2
if n is odd:
    Multiply it by 3 and add 1
repeat until n = 1

10 টি সমান, সুতরাং আমরা 5 পাওয়ার জন্য 2 দিয়ে বিভক্ত করেছিলাম 5 5 টি বিজোড়, তাই আমরা 3 দিয়ে গুণিত করব এবং 16 পাওয়ার জন্য 1 যুক্ত করব 16 16 সমান, তাই 8 পাওয়ার জন্য এটি অর্ধে কেটে ফেলুন 8 এর অর্ধেকটি 4, অর্ধেক 4 হ'ল 2, এবং 2 এর অর্ধেক হ'ল এটি যেহেতু আমাদের 6 টি পদক্ষেপ নিয়েছে, তাই আমরা বলি যে 10 টির 6 টি দূরত্ব রয়েছে।

একটি সুপার কোলাটজ নম্বর এমন একটি সংখ্যা যার থামার দূরত্ব তার চেয়ে বড় তবে তার চেয়ে কম প্রতিটি সংখ্যার থামার দূরত্ব। উদাহরণস্বরূপ, 6 হ'ল একটি সুপার কোলাটজ নম্বর, যেহেতু 6টির 8 টি থামার দূরত্ব রয়েছে, 5 টির 5 টি থামার দূরত্ব রয়েছে, 4 টি 2, 3 এর 7, 2 এর 1 এবং 1 টি 0 রয়েছে ( ওইআইএসে A006877 ) আপনাকে অবশ্যই একটি সংখ্যা নিতে এন ইনপুট হিসাবে, এবং থেকে উঠে সব সুপার Collatz সংখ্যার আউটপুট এন

বিধি

  • সম্পূর্ণ প্রোগ্রাম বা ফাংশন গ্রহণযোগ্য।

  • আপনি সুপার কোলাটজ সিকোয়েন্সটি পূর্ববর্তী বা হার্ড-কোড করতে পারবেন না।

  • আপনি যে কোনও যুক্তিসঙ্গত বিন্যাসে ইনপুট নিতে পারেন।

  • আউটপুট ফাংশন থেকে তালিকা হিসাবে ফিরে আসতে পারে, বা STDOUT বা একটি ফাইল এ মুদ্রিত হতে পারে। যার মধ্যে সবচেয়ে সুবিধাজনক।

  • অবৈধ ইনপুট (অ-সংখ্যা, দশমিক, negativeণাত্মক সংখ্যা ইত্যাদি) অনির্ধারিত আচরণের ফলাফল।

নমুনা অবারিত অজগর

def collatzDist(n):
    if n == 1:
        return 0
    if n % 2 == 0:
        return 1 + collatzDist(n / 2)
    return 1 + collatzDist((n * 3) + 1)

n = input()

max = -1
superCollatz = []
for i in range(1, n + 1):
    dist = collatzDist(i)
    if dist > max:
        superCollatz.append(i)
        max = dist 

print superCollatz

নমুনা আইও:

#in       #out
 4     --> 1, 2, 3
 50    --> 1, 2, 3, 6, 7, 9, 18, 25, 27
 0     --> invalid
 10000 --> 1, 2, 3, 6, 7, 9, 18, 25, 27, 54, 73, 97, 129, 171, 231, 313, 327, 649, 703, 871, 1161, 2223, 2463, 2919, 3711, 6171

এছাড়াও এখানে প্রথম 44 টি সুপার কোল্টজ নম্বর রয়েছে:

1, 2, 3, 6, 7, 9, 18, 25, 27, 54, 73, 97, 129, 171, 231, 313, 327, 649, 703, 871, 1161, 2223, 2463, 2919, 3711, 6171, 10971, 13255, 17647, 23529, 26623, 34239, 35655, 52527, 77031, 106239, 142587, 156159, 216367, 230631, 410011, 511935, 626331, 837799

6
এছাড়াও, যদি কেউ অনন্তের থামার দূরত্ব সহ কোনও নম্বর খুঁজে পায় (কখনই 1-এ পৌঁছায় না) আমি তাদেরকে আমার দেওয়া সবচেয়ে বড় অনুদান দেব। = D:
DJMcMayhem

1
অনেক
গণিতবিদও

সংশ্লিষ্ট: codegolf.stackexchange.com/q/12177/3808
Doorknob

5
এটি কেবল অনুমান, তবে আমার সন্দেহ হয় যে নিয়ম 2 কেবল একটি চ্যালেঞ্জের সীমাবদ্ধতার চেয়ে গাণিতিক সত্য।
ট্রিকোপলাক্স

1
"আপনাকে অবশ্যই একটি নম্বর ইনপুট হিসাবে নিতে হবে, এবং সমস্ত সুপার কোলাটজ নম্বর এন পর্যন্ত আউটপুট আউট করতে হবে" সুতরাং আমি যদি এটি সঠিকভাবে বুঝতে পারি তবে আপনি প্রথম এন সুপার কোলাটজ নম্বর আউটপুট জিজ্ঞাসা করবেন না? কারণ পাইথ উত্তরটি উদাহরণস্বরূপ এটি করে তাই আমি মনে করি এটি যথেষ্ট পরিমাণে পরিষ্কার নয়।
4:58

উত্তর:


1

পাইথ, 23 বাইট

q#eol.u@,/N2h*N3NN)STSQ

প্রদর্শন

কোলাটজ থামার দূরত্বে প্রতিটি সংখ্যার সর্বাধিক পরিসর গ্রহণ করে এবং সেই সর্বাধিক প্রশ্নে নম্বরটি কিনা তা পরীক্ষা করে এটি কাজ করে।


2

পাইথন 2, 104 বাইট

c=lambda x:x>1and 1+c([x/2,x*3+1][x%2])
lambda n:[1]+[x for x in range(2,n)if c(x)>max(map(c,range(x)))]

cএকটি সহায়ক ফাংশন যা প্রদত্ত পূর্ণসংখ্যার জন্য কোলাটজ দূরত্ব গণনা করে। নামবিহীন ল্যাম্বদা হ'ল মূল ফাংশন, যা সুপার কোল্টজ সংখ্যাগুলি ইনপুট (তবে অন্তর্ভুক্ত নয়) পর্যন্ত গণনা করে।


2

ডায়ালগ এপিএল , 41 বাইট

(∪⊢⍳⌈\)≢∘{1=⍵:⍬⋄2|⊃⌽⍵:⍵,∇1+3×⍵⋄⍵,∇⍵÷2}¨∘⍳

একটি নামহীন ফাংশন। নাম প্রয়োগ করতে বা প্রথম বন্ধনী ব্যবহার করুন।

পরীক্ষার কেস:

       ((∪⊢⍳⌈\)≢∘{1=⍵:⍬ ⋄ 2|⊃⌽⍵:⍵,∇ 1+3×⍵ ⋄ ⍵,∇ ⍵÷2}¨∘⍳)¨4 50 10000
┌─────┬────────────────────┬───────────────────────────────────────────────────────────────────────────────────────────┐
│1 2 3│1 2 3 6 7 9 18 25 27│1 2 3 6 7 9 18 25 27 54 73 97 129 171 231 313 327 649 703 871 1161 2223 2463 2919 3711 6171│
└─────┴────────────────────┴───────────────────────────────────────────────────────────────────────────────────────────┘

অপরিবর্তিত আচরণে 0 ফলাফল।


1

ES6, 86 83 বাইট

n=>(i=m=0,c=n=>n<3?n:c(n&1?n*3+1:n/2)+1,[for(x of Array(n))if(c(++i)>m&&(m=c(i)))i])

সম্পাদনা করুন: filterঅ্যারে বোঝার থেকে স্যুইচ করে 3 বাইট সংরক্ষণ করা হয়েছে ।


1

হাস্কেল, 84 বাইট

c 1=0;c x|odd x=1+c(3*x+1)|0<1=1+c(div x 2)
f x=[n|n<-[1..x],all(c n>)$c<$>[1..n-1]]

এটি অবশ্যই ব্যাপকভাবে ধীর, তবে এটি কার্যকর!


1

ওরাকল এসকিউএল 11.2, 329 বাইট

WITH q(s,i)AS(SELECT LEVEL s,LEVEL i FROM DUAL CONNECT BY LEVEL<=:1 UNION ALL SELECT s,DECODE(MOD(i,2),0,i/2,i*3+1)i FROM q WHERE i<>1),v AS(SELECT s,COUNT(*)-1 d FROM q GROUP BY s),m AS(SELECT s,d,MAX(d)OVER(ORDER BY s ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING)m FROM v)SELECT s FROM m WHERE(d>m OR s=1)AND:1>0ORDER BY 1;

আন-গল্ফ সংস্করণ

WITH q(s,i) AS 
  (
    SELECT LEVEL s, LEVEL i 
    FROM DUAL CONNECT BY LEVEL <= :1
    UNION ALL 
    SELECT q.s, DECODE(MOD(i,2),0,i/2,i*3+1)i FROM q WHERE q.i <> 1
  )
, v AS (SELECT s, COUNT(*)-1 d FROM q GROUP BY s)
, m AS (SELECT s, d, MAX(d)OVER(ORDER BY s ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING) m FROM v)
SELECT * FROM m WHERE (d>m OR s=1) AND :1>0
ORDER BY 1;

কিউ ভিউটি হ'ল একটি সত্য পুনরাবৃত্ত ভিউ (সংযুক্ত বাই দ্বারা একটি শ্রেণিবদ্ধ জিজ্ঞাসা নয়) যা 1 এবং: 1 এর মধ্যে প্রতিটি পূর্ণসংখ্যার জন্য 1 এর দিকে সমস্ত পদক্ষেপ গণনা করে।

ভি ভিউ থামার দূরত্বগুলি গণনা করে।

এম ভিউ ম্যাক্সের বিশ্লেষণীয় সংস্করণটি বর্তমান সারি বাদে পূর্ববর্তী প্রতিটি সারিতে প্রয়োগ করতে ব্যবহার করে। প্রতিটি পূর্ণসংখ্যার পক্ষে আমরা জানি যে এটি দূরত্ব এবং বর্তমানের বৃহত্তম থামার দূরত্ব।

চূড়ান্ত ক্যোয়ারী পরীক্ষা করে দেখুন যে থামার দূরত্ব সর্বাধিক থামার দূরত্বের চেয়ে বেশি। 1 টি পরিচালনা করার জন্য কয়েকটি কৌশল এবং বিশেষ কেস যুক্ত করে: 1 এর মান 0 থাকে।


0

এমএটিএল , 37 বাইট

:"@tqX`t0)t2\?3*Q}2/]ht0)q]n]N$htY>=f

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

:         % vector [1,2,...N], where N is implicit input
"         % for each number in that range
  @       %   push that number, k
  tq      %   truthy iff k is not 1
  X`      %   while...do loop
    t0)   %     pick first number of array
    t2\   %     is it odd?
    ?     %     if so:
      3*Q %       multiply by 3 and add 1
    }     %     else
      2/  %       divide by 2
    ]     %     end if
    h     %     concatenate into array with previous numbers
    t0)q  %     duplicate, pick last number, is it 1? Leave that as while condition
  ]       %   end while
  n       %   number of elements of array. This is the stopping distance for k
]         % end for
N$h       % concatenate all stopping distances into an array
tY>       % duplicate and compute cumulative maximum
=f        % indices of matching elements. Implicitly display

0

𝔼𝕊𝕄𝕚𝕟, 30 অক্ষর / 38 বাইট

⩥ïⓜМȬ⧺$,a=[])⋎⟮aꝈ-1⟯>ɐ⅋(ɐ=Ⅰ,ᵖ$

Try it here (Firefox only).

আমি এর আগে পোস্ট না করার একমাত্র কারণ হ'ল আমি চশমাগুলিতে পরিষ্কার ছিলাম না। একটি কাস্টম এনকোডিং ব্যবহার করে যা 10-বিট চরগুলি এনকোড করে।

ব্যাখ্যা

⩥ïⓜ[0,input)মানচিত্রের উপর একটি সীমা তৈরি করে। МȬ⧺$,a=[])একটি খালি অ্যারেতে কোলাটজ সংখ্যা উত্পন্ন করে ⋎⟮aꝈ-1⟯>ɐএবং থামার দূরত্ব পেতে কোলাটজ সংখ্যাগুলির অ্যারে ব্যবহার করে এবং এটি পরীক্ষা করতে হবে যে এটি সর্বোচ্চ সর্বাধিক বন্ধের দূরত্বের চেয়ে বেশি if যদি তা হয় ⅋(ɐ=Ⅰ,ᵖ$তবে বর্তমান স্টপিং দূরত্বকে সর্বোচ্চ থামার দূরত্ব তৈরি করে এবং বর্তমান আইটেমটিকে স্ট্যাকের মধ্যে সীমাবদ্ধ করে দেয়। পরে, স্ট্যাকের আইটেমগুলি স্পষ্টভাবে মুদ্রিত হয়।


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