হামিং সংখ্যা


20

একটি ধনাত্মক পূর্ণসংখ্যা দেওয়া হয়েছে, যাতে বহু হামিং নম্বর ক্রমানুসারে মুদ্রণ করুন ।

নিয়মাবলী:

  • ইনপুটটি ইতিবাচক পূর্ণসংখ্যা হবেn≤1,000,000
  • আউটপুটটি https://oeis.org/A051037 এর প্রথম এন শর্তাবলী হওয়া উচিত
  • কার্যকর করার সময় অবশ্যই 1 মিনিট হতে হবে minute
  • এটি ; সংক্ষিপ্ততম কোড জয়

2
কোন উত্তর একটি উত্তর হওয়া উচিত? গলফ? সবচেয়ে কার্যকর অ্যালগরিদম? সমাধানের পদ্ধতিগুলি কি কেবল অনুসন্ধান?
— নাকিলন

সুনির্দিষ্ট না হওয়ার জন্য দুঃখিত। আমি নিজেই এটিকে সমাধান করি নি, সুতরাং আমি নিশ্চিত নই যে আমি যে সীমাগুলি রেখেছি তা যুক্তিযুক্ত কিনা। আমাকে বুঝতে দাও.
— গ্রুকাস


3
1 হ্যামিং নম্বর, সুতরাং, 1,000,000 1এস মুদ্রণ করা আপনার চশমাগুলির সাথে সামঞ্জস্যপূর্ণ। এটি ক্রমযুক্ত হবে, অর্থাত না একটি আনর্ডার্ড ক্রম। :)
— নেস 15

উত্তর:


7

হাস্কেল, 101 97 92+ | এন | চরিত্র

h=1:m 2h&m 3h&m 5h
m=map.(*)
c@(a:b)&o@(m:n)|a<m=a:b&o|a>m=m:c&n|0<1=a:b&n
main=print$take 1000000h

আমি পরীক্ষিত মেশিনে পূর্ণ মিলিয়নকে 3.7 এর মধ্যে গণনা করে (আপনি যদি আউটপুটটি প্রকৃতপক্ষে সঞ্চয় করতে চান তবে আরও বেশি)

Ungolfed:

-- print out the first million Hamming numbers
main = print $ take 1000000 h

-- h is the entire Hamming sequence.
-- It starts with 1; for each number in the
-- sequence, 2n, 3n and 5n are also in.
h = 1 : (m 2 h) & (m 3 h) & (m 5 h)

-- helper: m scales a list by a constant factor
m f xs = map (f*) xs

-- helper: (&) merges two ordered sequences
a@(ha:ta) & b@(hb:tb)
    |    ha < hb = ha : ta & b
    |    ha > hb = hb :  a & tb
    |  otherwise = ha : ta & tb

সমস্ত হাস্কেল কুখ্যাতভাবে এখানে: নিজের একটি অলস ফাংশন হিসাবে তালিকাটি সংজ্ঞায়িত করে এমনভাবে যে বাস্তবে কাজ করে।


1
আপনি ইতিবাচক পূর্ণসংখ্যার পরামিতিটি পান না, যা আপনার কোডে আরও আকার যুক্ত করে
— জেন

@ জেন ইতিবাচক পূর্ণসংখ্যা প্যারামিটারটি দ্বিতীয় থেকে শেষ টোকেন হয় এবং এর আকারটি শিরোনামে আউটফ্রন্ট হিসাবে ঘোষণা করা হয়।
— জেবি

3

পাইথন 181 অক্ষর

h=[]        
h.append(1)
n=input()
i=j=k=0
while n:
    print h[-1]
    while h[i]*2<=h[-1]:
        i+=1
    while h[j]*3<=h[-1]:
        j+=1
    while h[k]*5<=h[-1]:
        k+=1
    h.append(min(h[i]*2,h[j]*3,h[k]*5))
    n-=1

এই 181 চরগুলি কেমন? আমি এটিকে কোনও ফাইলে সংরক্ষণ করেছি, h=[]ন্যূনতম ট্যাব দূরত্ব এবং একক অক্ষরের লাইন বিরতি ব্যবহার করে শ্বেতস্থান সরিয়ে ফেললাম এবং ফাইলটির আকার শেষ হবে 187 বাইট।
— nitro2k01

1
যাই হোক ... তুচ্ছ অপ্টিমাইজেশান: h=[1]। এছাড়াও, সংখ্যার জন্য অক্ষর সংরক্ষণ করতে সোর্স কোডে সরাসরি একটি নম্বর দিন <1000000।
— nitro2k01

ওফ, দুঃখিত, উত্তরটি অতি পুরানো বলে বুঝতে পারিনি।
— nitro2k01

@ nitro2k01, আমি এটি 183 অক্ষর তৈরি করি। (প্রথম লাইনের শেষে কিছু অনুসরণযোগ্য শ্বেতস্থান রয়েছে, এবং ইনডেন্টেশনটি একটি স্তরের জন্য একটি স্থান এবং দুটি স্তরের জন্য একটি ট্যাব হওয়া উচিত)।
— পিটার টেলর

1

রুবি - 154 231 টি অক্ষর

def k i,n;(l=Math).log(i,2)*l.log(i,3)*l.log(i,5)/6>n end
def l i,n;k(i,n)?[i]:[i]+l(5*i,n)end
def j i,n;k(i,n)?[i]:[i]+j(3*i,n)+l(5*i,n)end
def h i,n;k(i,n)?[i]:[i]+h(2*i,n)+j(3*i,n)+l(5*i,n)end
puts h(1,n=gets.to_i).sort.first n

এবং এখন এটি যথেষ্ট দ্রুত হয়েছে, অবশ্যই এখনও প্রচুর গল্ফ রয়েছে যা এখনও ঘটতে পারে।

→ time echo 1000000 | ruby golf-hamming.rb | wc
1000000 1000000 64103205
echo 1000000  0.00s user 0.00s system 0% cpu 0.003 total
ruby golf-hamming.rb  40.39s user 0.81s system 99% cpu 41.229 total
wc  1.58s user 0.05s system 3% cpu 41.228 total

1

পার্ল, ৯৯ টি চর (তবে খুব ধীর)

use List::Util min;
$\=$/;$h{1}=();delete$h{$_=min keys%h},print,@h{$_*2,$_*3,$_*5}=()for 1..<>

Ungolfed:

use List::Util 'min';
my %hamming;
my $up_to = <>;
$hamming{1} = (); # The value is undef, but the key exists!
for (1 .. $up_to) {
    my $next = min( keys %hamming );
    delete $hamming{$next}; # We're done with this one
    print $next, "\n";
    @hamming{ $next * 2, $next * 3, $next * 5 } = (); # Create keys for the multiples
} # Rinse, repeat

প্রথম 100,000 সংখ্যা গণনা করতে 11 মিনিট সময় নেয় এবং আমি 1,000,000 সম্পর্কেও ভাবতে চাই না। এটি প্রথম 10,000 পরিপাটি 3 সেকেন্ডে সম্পন্ন হয়; এটি ও এর সদৃশ কিছু (এন ^ 2) :(


1

এপিএল (ডায়ালগ ক্লাসিক) , 34 23 বাইট

{⍺⍴{⍵[⍋⍵]}∪,⍵∘.×⍳5}⍣≡∘1

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

এন=1000000

{⍺⍴{⍵[⍋⍵]}∪,⍵∘.×⍳5}⍣≡∘1     Monadic function:
{⍺⍴{⍵[⍋⍵]}∪,⍵∘.×⍳5}         Define the following helper function g(⍺,⍵):
             ⍵∘.×⍳5             Make a multiplication table between ⍵ and (1 2 3 4 5).
                                (Including 4 is unnecessary but saves bytes.)
            ,                   Flatten the table into an array.
           ∪                    Keep unique elements.
    {⍵[⍋⍵]}                     Grade up the array and access it at those indices.
                                (This is the APL idiom to sort an array.)
 ⍺⍴                             Keep the first ⍺ elements; pad by repeating the array.
{⍺⍴{⍵[⍋⍵]}∪,⍵∘.×⍳5}⍣≡       Repeatedly apply g with some fixed left argument
                             until a fixed point is reached.
                             At this point we have a dyadic function that takes
                             n on the left and the starting value on the right,
                             and returns multiples of the n Hamming numbers.
                      ∘1     Fix 1 as the right argument.


এফওয়াইআই, {⍺⍴∧∪,⍵×⍀⍳5}`⍣≡∘1প্রসারিত (বাগের কারণে ব্যাকটিকের প্রয়োজন))
— অ্যাডম

0

হাস্কেল, 71

h n = drop n $ iterate (\(_,(a:t))-> (a,union t [2*a,3*a,5*a])) (0,[1])

আউটপুট

*Main> map fst $ take 20 $ h 1
[1,2,3,4,5,6,8,9,10,12,15,16,18,20,24,25,27,30,32,36]

অনুমানটি আপনাকে মুদ্রণের জন্য কল করে, তাই প্রিন্টের কোডটি গণনা করা উচিত। এটি অন্যান্য হাস্কেল বাস্তবায়নের তুলনায় ন্যায্য তুলনার অনুমতি দেয়।
— পিটার টেলর

@ পিটারটেলর @ আপনি কি ভাবেন যে আমার কয়টি চরিত্র যুক্ত করা উচিত?
— টিমটেক

0

উরসালা, 103

#import std
#import nat
smooth"p" "n" = ~&z take/"n" nleq-< (rep(length "n") ^Ts/~& product*K0/"p") <1>

আউটপুট জন্যmain = smooth<2,3,5>* nrange(1,20)

<1,2,3,4,5,6,8,9,10,12,15,16,18,20,24,25,27,30,32,36>

0

গণিত, 54 বাইট

Sort[1##&@@@({2,3,5}^#&/@Tuples[0~Range~#,3])]~Take~#&

অপর্যাপ্ত তবে সংক্ষিপ্ত বিশুদ্ধ ফাংশন। ( ফাংশনটির প্রথম যুক্তি) এর 2^i * 3^j * 5^kজন্য ফর্মের সমস্ত পণ্য গণনা করে , তারপরে সেগুলি এবং শুধুমাত্র প্রথমটি0 <= i, j, k <= ##SortTake# ।


1
একরকম আমি মনে করি না 1e18 গণনা সম্পাদন এক মিনিটের মধ্যেই ঘটতে চলেছে।
— জোনাথন অ্যালান

-1

জাপট, 15 বাইট

@_k e§5}a°X}h1ì

চেষ্টা করে দেখুন

ÆJ=_k d>5}f°Jª1

চেষ্টা করে দেখুন


3 বাইট

যদি জো কিং এর পদ্ধতিকে বৈধ বলে মনে করা হয়।

o!²

চেষ্টা করে দেখুন


এটি <1 মিনিটে কার্যকর করার প্রয়োজনীয়তাকে সন্তুষ্ট করার কাছাকাছি আসতে পারে বলে মনে হয় না। (এবং জো কিংয়ের দৃষ্টিভঙ্গি বৈধ নয়))
— অ্যান্ডারস কাসের্গ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.