হামিং সংখ্যা


20

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

নিয়মাবলী:

  • ইনপুটটি ইতিবাচক পূর্ণসংখ্যা হবেn1,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.