কোনও সংখ্যা ক্রমাগত সংখ্যার সংখ্যা কিনা তা পরীক্ষা করুন


18

কিছু সংখ্যা যেমন: 6, 12, 20, 30, 42, 56, 60, 90, 120 এবং আরও কিছু হিসাবে নিচে প্রদর্শিত হিসাবে ধারাবাহিক সংখ্যার পণ্য হিসাবে প্রকাশ করা যেতে পারে।

6   = 2 * 3  
12  = 3 * 4  
30  = 5 * 6
60  = 3 * 4 * 5  
90  = 9 * 10  
120 = 4 * 5 * 6  

এমন একটি প্রোগ্রাম বা ফাংশন লিখুন যা ধারাবাহিক পূর্ণসংখ্যার একটি তালিকা আউটপুট দেয় যা পণ্য নির্দিষ্ট সংখ্যার সমান হয়।

এই যুক্তির জন্য উপযুক্ত নয় এমন সংখ্যার উদাহরণগুলি:

99  = 9 * 11  (Product of non-consecutive numbers)
121 = 11 * 11 (Same numbers)
2   = 1 * 2   (Product of itself and 1)
13  = 13      (Product of only one number)

দয়া করে মনে রাখবেন যে এর ক্ষেত্রে 2 = 2 * 1, আমরা এটি একটি বৈধ ফলাফল হিসাবে বিবেচনা করি না, কারণ 1 দ্বারা গুণক পূর্ণসংখ্যা একই ফলাফল দেয়। এই প্রশ্নের জন্য, আমরা পণ্যের মধ্যে পূর্ণসংখ্যক> = 2 বিবেচনা করব।

ইনপুট

একটি বৈধ 32-বিট ইতিবাচক পূর্ণসংখ্যা। স্ট্যান্ডার্ড ইনপুট, কোনও ফাংশন আর্গুমেন্ট ইত্যাদি হতে পারে

আউটপুট

ধারাবাহিক পূর্ণসংখ্যার একটি তালিকা> = 2 (আরোহী বা অবতরণ ক্রমে)। যদি ক্রমাগত সংখ্যার বেশ কয়েকটি সংমিশ্রণ থাকে তবে কেবল একটি উদাহরণ প্রদান করুন। আপনি যদি আরও সরবরাহ করেন তবে এটি জরিমানা।

বিধিনিষেধ

কোডটি একটি স্ট্যান্ডার্ড কম্পিউটারে চালানোর জন্য একটি যুক্তিসঙ্গত সময় (<5 মিনিট) নিতে হবেসমস্ত বৈধ ইনপুট (ধনাত্মক 32-বিট পূর্ণসংখ্যা) এর জন্য জন্য কোডটির । যদি ধারাবাহিক পূর্ণসংখ্যার পণ্য থাকে, কোডের সময়সীমার মধ্যে এক বা একাধিক আউটপুট হওয়া উচিত। অন্যথায়, সময়সীমাটির মধ্যে কোনও আউটপুট না দিয়ে কোডটি শেষ করা উচিত।

এটি কোড গল্ফ, তাই বাইটের মধ্যে সংক্ষিপ্ততম কোডটি জয়ী।


1
এই ধাঁধাটি যেমনটি বলা হয়েছে, এই সাইটের ফর্ম্যাটটির জন্য ভাল নয়। এই সাইটটি প্রতিযোগিতার জন্য যেখানে একটি বিজয়ী সিদ্ধান্ত নেওয়ার ভাল উপায় আছে (যেমন, সংক্ষিপ্ততম কোড, দ্রুততম কোড, সর্বাধিক উন্নতিকরণ ইত্যাদি)। আপনি এ জাতীয় কোনও উপায় সরবরাহ করেন নি।
ক্রিস জেস্টার-ইয়াং

2
আমি আপনাকে এটি একটি কোড-গল্ফ তৈরি করার পরামর্শ দিচ্ছি (সবচেয়ে সংক্ষিপ্ত কোড) though যদিও আপনাকে এটিতে কিছু সীমাবদ্ধতা রাখতে হবে। উদাহরণস্বরূপ 0 থেকে 1000000, সর্বোচ্চ প্রয়োগের সময় 10 সেকেন্ড ইত্যাদি
লেভেল রিভার সেন্ট

এই প্রশ্নটি উদ্ধার করার জন্য এটি সম্পাদনা করার চেষ্টা করেছিল। তবে আমি এর আগে কোনও প্রশ্ন করি নি, তাই যদি আপনি কিছু দেখেন তবে দয়া করে সম্পাদনা করুন।
ভেক্টরাইজড

@ বিটপউনার কিছুটা টাইপ ছাড়াও আমার কাছে ভাল লাগছে। পুনরায় খুলতে ভোট দিয়েছেন।

5
আমার মনে হয় তুমি বোঝাতে চাইছ 30=5*6
কাইল কানোজ

উত্তর:


8

জাভা - 124

String f(int t){int s=2,h=3,p=s,i;String o="";for(;p!=t&&s*s<t;p=p<t?p*h++:p/s++);if(p==t)for(i=s;i<h;o+++=i+" ");return o;}

2 থেকে শুরু করে, সূচনা সংখ্যাটি না হওয়া অবধি এই লুপগুলি হয়> লক্ষ্যবর্গের বর্গমূল (অথবা লক্ষ্যটি ঠিক পৌঁছে যায়)। যদি পণ্যটি কম হয় তবে এটি উচ্চ সংখ্যার সাথে গুণ করে এবং এটি বৃদ্ধি করে। যদি উচ্চতর হয় তবে এটি শুরুর সংখ্যা দ্বারা ভাগ করে এবং এটি বৃদ্ধি করে।

উদাহরণস্বরূপ, 30 এর জন্য, এটি পরীক্ষা করবে:

2*3     = 6 (too low, multiply)
2*3*4   = 24 (too low, multiply)
2*3*4*5 = 120 (too high, divide)
3*4*5   = 60 (too high, divide)
4*5     = 20 (too low, multiply)
4*5*6   = 120 (too high, divide)
5*6     = 30 (bingo!)

আরোহী ক্রমে একটি স্পেস-বিভাজনযুক্ত স্ট্রাক্ট ফ্যাক্টরের আউটপুট দেয়।

লাইন বিরতি সহ:

String p(int t){
    int s=2,h=3,p=s,i;
    String o="";
    for(;p!=t&&s*s<t;p=p<t?p*h++:p/s++);
    if(p==t)
        for(i=s;i<h;o+=i+" ");
    return o;
}

7

পাইথন - 104 97 95 92 এটি ব্যবহার করে দেখুন

n=input()
s=i=2
c=1
while s<n:
 s*=i+c;c+=1
 if s==n:print range(i,i+c)
 if s/n:i+=1;s,c=i,1

যদি nহয়, উদাহরণস্বরূপ, আগে 120 সেট করা হয়, প্রোগ্রাম দুটি সমাধান আউটপুট দেয়:

[2, 3, 4, 5]
[4, 5, 6]

দুঃখিত, আমি কিছু ইনপুট সংজ্ঞা দিতে ভুলে গেছি।
ফালকো

1
সি = সি + 1 প্রতিস্থাপন করুন, i = আমি + 1 সি + = 1 দিয়ে, i + = 1
জেরাত

1
ওহ হ্যাঁ, ভেবে দেখিনি +=। তবে আমি ++পাইথনে মিস করছি ...
ফালকো

1
if s>=nএবং if s/nসমতুল্য, যাতে আপনি একই সংখ্যক অক্ষরের সমস্ত সমাধান সরবরাহ করতে পারেন।
isaacg

1
আপনি পরিবর্তন করে তিনটি অক্ষর সংরক্ষণ করতে পারবেন s=s*(i+c)করার s*=i+c
এল'ইনিয়া স্টারম্যান

4

ক্লোজার - 127 109 বাইট

(defn f[x](first(for[r[range]y(r 2 x)v[(take-while #(<=(apply * %(r y %))x)(r y x))]:when(=(apply * v)x)]v)))

উদাহরণ:

(map f [6 12 30 60 90 120 1404816 99 121 2 13])
=> ((2 3) (3 4) (5 6) (3 4 5) (9 10) (2 3 4 5) (111 112 113) nil nil nil nil)

ব্যাখ্যা:

এটি মৌলিক, বেশ অযৌক্তিক ক্রিয়ামূলক পদ্ধতির। আমি তাদের উপর একটি সাধারণ লুপ ব্যবহার করে সমস্ত সম্ভাবনার একটি অলস তালিকা তৈরি করেছি (এটি এমন সমস্ত সংমিশ্রণগুলি এড়িয়ে যায় যা খুব বেশি সংখ্যক সংখ্যক পরিমাণ দেয়, ওভারফ্লো প্রতিরোধ করে) এবং এর মধ্যে প্রথমটি নিয়ে যাই। যদি কোনও সম্ভাবনা না থাকে তবে এটি শূন্য করে।

Http://tryclj.com/ এ পরীক্ষা করা সবচেয়ে সহজ ।


আমি এখন লক্ষ্য করেছি যে আমি সমস্ত সম্ভাবনা ফিরিয়ে দিতে পারি: 120 বাইট 102 বাইট , তবে নেস্টেড তালিকায় ফলাফল দেয়।

(defn f[x](for[r[range]y(r 2 x)v[(take-while #(<=(apply * %(r y %))x)(r y x))]:when(=(apply * v)x)]v))

উদাহরণ:

(map f [6 12 30 60 90 120 1404816 99 121 2 13])
=> (((2 3)) ((3 4)) ((5 6)) ((3 4 5)) ((9 10)) ((2 3 4 5) (4 5 6)) ((111 112 113)) () () () ())

3

সিজেম, 31 বাইট

q~:Qmq,A,m*{2f+~,f+_:*Q={p}*}%;

এটি একটি নিষ্ঠুর-শক্তি পদ্ধতির, তবে মৃত্যুদন্ড কার্যকর করার সময়টি কয়েক সেকেন্ড সময় ব্যবহার করে জাভা ইন্টারপ্রেটার

আপনি যদি অনলাইন দোভাষী ব্যবহার করে কোডটি পরীক্ষা করতে চান তবে আপনার ইনপুটটি যুক্তিসঙ্গতভাবে কম রাখা উচিত। 2 26 এরও কম কিছুআমার মেশিনে এখনও কাজ করে।

উদাহরণ

$ TIME="%e s"
$ time cjam product.cjam <<< 2
0.12 s
$ time cjam product.cjam <<< 6
[2 3]
0.10 s
$ time cjam product.cjam <<< 120
[2 3 4 5]
[4 5 6]
0.12 s
$ time cjam product.cjam <<< 479001600
[2 3 4 5 6 7 8 9 10 11 12]
0.68 s
$ time cjam product.cjam <<< 4294901760
[65535 65536]
1.48 s
$ time cjam product.cjam <<< 4294967295
1.40 s

কিভাবে এটা কাজ করে

q~:Q      " Read from STDIN, interpret the input and save the result in variable “Q”.     ";
mq,       " Push the array [ 0 1 2 … (Q ** 0.5 - 1) ].                                    ";
A,m*      " Push the array [ 0 1 2 … 9 ] and take the Cartesian product.                  ";
{         " For each pair in the Cartesian product:                                       ";
  2f+     " Add 2 to each component.                                                      ";
  ~       " Dump the array's elements on the stack.                                       ";
  ,       " Push the array [ 0 1 2 … n ], where “n” is the topmost integer on the stack.  ";
  f+      " Add “m” to each element, where “m” is the integer below the array.            ";
  _:*     " Duplicate the resulting array and push the product of its elements.           ";
  Q={p}*  " If the product is equal to “Q”, print.                                        ";
}%        " Collect the remaining results into an array.                                  ";
;         " Discard the array from the stack.                                             ";

2

জাভা, 162

পূর্ণসংখ্যার একটি অ্যারে প্রদান করে, বা nullযদি কোনও ক্রমাগত সংখ্যা উপস্থিত থাকে না।

int[] e(int n){for(int i=1;i<n;i++){int h=i+1,c=1,s=i;while(s<n){c++;s*=h++;}if(s==n){int[] o=new int[c];for(int j=0;j<c;j++){o[j]=h-j-1;}return o;}}return null;}

ungolfed:

int[] execute(int input){
    for(int i=1; i<input; i++){
        int highest = i+1, count = 1, sum = i;
        while(sum < input){
            count++;
            sum *= highest++;
        }
        if(sum == input){
            int[] numbers = new int[count];
            for(int j=0; j<count; j++){
                numbers[j] = highest-j-1;
            }
            return numbers;
        }
    }
    return null;
}

2

সি 105 110 চেষ্টা করুন

n,k,l;main(i){for(scanf("%d",&n);++i<n;)for(k=1,l=i;k<n;)if(k*=l++,k==n)for(l=n;l/=i;)printf("%d ",i++);}

144 বোনাস সহ: এটি প্রতিটি সংখ্যার মাধ্যমে পুনরাবৃত্তি করে এবং মিলবে পণ্যগুলি খুঁজে

main(i,j,k,l,m){for(scanf("%d",&m);++i<13;)for(j=0;++j<46341-i;){for(l=k=1;k<=i;)l*=j+k++;if(l==m)for(puts(""),k=0;k<i;)printf("%d ",j+k+++1);}}

খুব সুন্দর, মার্জিত! আমি এটি ফেলেছি এমন কিছু ছোট সংখ্যার পক্ষে অবশ্যই কাজ করেছে। তারপরে আমি এটি 50815512 (7128 x 7129) দিয়েছি এবং এটি অসীম লুপে চলে গেছে। এটি 7128 x 7129 x 7130 = 362314600560 গণনা করার চেষ্টা করলে কি এটি উপচে পড়া?
টড লেহম্যান

ধন্যবাদ! দৃশ্যত শর্তটি k < nখুব বেশি হয়ে যায় কারণ কারণে k *= l++। আমি দীর্ঘ দীর্ঘ শুরুতে কিন্তু ... যে জীবন নাশ করবে স্বাক্ষরবিহীন সংযোজন করুন পারে
Bebe

2

পিএইচপি 258 অক্ষর, 201 টি ফ্যাক্টরিয়াল ফাংশন গণনা করছে না।

সহজ উপায় গাণিতিকভাবে প্রকাশ করার "পরপর যে বিষয়গুলি একটি সংখ্যা সমান" হয় X!/Y!কোথায় Xসর্বোচ্চ সংখ্যা এবং Yসর্বনিম্ন মাইনাস অন্যতম। দুর্ভাগ্যক্রমে আমি সমাধান করতে শেখার আগে ক্যালকুলাস গ্রহণ বন্ধ করে দিয়েছিলাম Z = X!/Y!, তাই আমাকে এটির কিছুটা চাপ দিতে হয়েছিল।

অগোছালো, অদৃশ্য সংস্করণ:

<?php
// PHP does not define a factorial function, so I've kludged one in.
function fact($n) {
    $r = 1;
    for($i=$n; $i>1; $i--) {
        $r *= $i;
    }
    return $r;
}

$input = intval($argv[1]);

if( $input < 2 ) { die('invalid input'); }

printf("input: %s\n", $input);

$max=min(ceil(sqrt($input)),170); // integer breakdown for > 170!
$grid = array();
for( $x=1;$x<$max;$x++ ) {
    for( $y=$max;$y>=1;$y-- ) {
        if( $y >= $x ) { continue; } // Skip results that would be < 1
        $cur = fact($x)/fact($y);
        if( $cur > $input ) { // too large!
            echo "\n"; continue 2;
        }
        if( $cur == $input ) { //just right
            printf("%7d\n\nFound %s == %s\n", $cur, implode(' * ', range($y+1, $x)), $cur);
            break 2;
        }
        printf("%7d ", $cur);
    }
    echo "\n";
}
if($cur!=$input){printf("No consecutive factors produce %d\n", $input);}

উদাহরণ আউটপুট:

input: 518918400

  2
  3       6
  4      12      24
  5      20      60     120
  6      30     120     360     720
  7      42     210     840    2520    5040
  8      56     336    1680    6720   20160   40320
  9      72     504    3024   15120   60480  181440  362880
 10      90     720    5040   30240  151200  604800 1814400 3628800
 11     110     990    7920   55440  332640 1663200 6652800 19958400 39916800
 12     132    1320   11880   95040  665280 3991680 19958400 79833600 239500800 479001600
 13     156    1716   17160  154440 1235520 8648640 51891840 259459200
 14     182    2184   24024  240240 2162160 17297280 121080960
 15     210    2730   32760  360360 3603600 32432400 259459200
 16     240    3360   43680  524160 5765760 57657600 518918400

Found 9 * 10 * 11 * 12 * 13 * 14 * 15 * 16 == 518918400

Golfed:

<? function f($n){$r=1;for($i=$n;$i>1;$i--)$r*=$i;return $r;}$i=$argv[1];$m=min(ceil(sqrt($i)),170);for($x=1;$x<$m;$x++){for($y=$m;$y>0;$y--){if($y>=$x)continue;$c=f($x)/f($y);if($c>$i)continue 2;if($c==$i){$y++;echo "$y $x";break 2;}}}if($c!=$i){echo 'No';}

আউটপুট:

[sammitch@vm ~/golf] time php consecutive_golf.php 518918400
9 16
real 0m0.019s
user 0m0.011s
sys  0m0.009s
[sammitch@vm ~/golf] time php consecutive_golf.php 518918401
No
real 0m0.027s
user 0m0.017s
sys  0m0.011s

আমি রান সময়টি এই দ্রুত হওয়ার আশা করছিলাম না!


এই ধারণাটি আমার মনেও এসেছিল এবং এটি অত্যন্ত কার্যকর বলে মনে হয় তবে আমি সন্দেহ করি এটি "যোগ্য হওয়ার জন্য" যথেষ্ট ছোট করা যেতে পারে।
bebe

1
@ তবে এটি 258 টি অক্ষর, পিএইচপি-র পক্ষে খুব খারাপ নয়। যদি আমি এতটা অলস এবং বাধা না থাকি তবে আমি এটি একটি বাস্তব ভাষায় করব। : পি
সামমিতাচ

এক্স! / ওয়াই! পূর্ণসংখ্যার N এর পণ্য যেমন Y <N <= X X এটা কি কোনও সাহায্যে আসে?
ট্রাইকোপলাক্স

2

পাইথ , 35

JvwKr2 4W-ZJ~@KgJZ1=YurGHK=Zu*NTY)Y

বিঃদ্রঃ: আমার কোডটি ক্রমাগত পূর্ণসংখ্যার প্রতিনিধিত্ব হিসাবে ইনপুটটির সংক্ষিপ্ত প্রতিনিধিত্ব খুঁজে পায়> = 2, সুতরাং অবৈধ ইনপুট এ এটি একটি 1 উপাদান তালিকা মুদ্রণ করবে, সম্ভবত খুব দীর্ঘ সময় পরে। যেহেতু সমস্যার বিবৃতিটি ইনপুটটি বৈধ হবে বলে আমি মনে করি এটি ঠিক আছে।

সংক্ষিপ্ত ব্যাখ্যা:

মূলত, প্রোগ্রামটি একটি ব্যাপ্তির উপরের এবং নিম্ন সীমা সংরক্ষণ করে, একটি হ্রাস ব্যবহার করে সীমাতে সংখ্যার পণ্য গণনা করে, প্রান্তটি প্রয়োজনীয় হিসাবে সামঞ্জস্য করে এবং যতক্ষণ না পণ্যটির ইনপুট সমান হয় তার পুনরাবৃত্তি করে।

দীর্ঘ ব্যাখ্যা:

কোডের প্রতিটি স্নিপেটের জন্য, আমি সমতুল্য অজগর, পাশাপাশি আরও বিস্তারিত ব্যাখ্যা এবং যুক্তি দেব will

Jvw => J=eval(input())

পাইথ ইনপুট নেওয়ার স্ট্যান্ডার্ড উপায়।

Kr2 4=> K=range(2,4)=>K=[2,3]

এখানে প্রথম অদ্ভুত অংশ: শেষ পয়েন্টগুলি পৃথক ভেরিয়েবল হিসাবে সংরক্ষণ করার পরিবর্তে আমি এগুলি তালিকার উপাদান হিসাবে সংরক্ষণ করছি oring কারণ শীঘ্রই পরিষ্কার হবে। এছাড়াও, সরল অ্যাসাইনমেন্টের পরিবর্তে পাইথের মধ্যে যা হবেK[2 3) , আমি একটি অক্ষর সংরক্ষণ করতে একটি ব্যাপ্তি ব্যবহার করছি।

W-ZJ=> while Z-J=>while Z!=J

এই মুহুর্তে, আপনি জিজ্ঞাসা করতে পারেন, "জেড কী? আপনি এটি সংজ্ঞায়িত করেননি?" পাইথ-এ, সমস্ত ভেরিয়েবল পূর্বনির্ধারিত আসে। জেড 0 হিসাবে শুরু হবে। তবে, Z পরে পণ্যের মান হিসাবে সেট করা হবে, সুতরাং এই চেকটি যখন তালিকাটি সঠিক মান হয় তখন লুপটি শেষ করতে পরিবেশন করে।

~@K>JZ1 => K[J>Z] += 1

আমি কেন তালিকায় মানগুলি পৃথক ভেরিয়েবলের মধ্যে না রেখে সঞ্চয় করছি: এখানে পণ্যটি বর্তমানে খুব বেশি বা খুব কম কিনা তার উপর নির্ভর করে আমি দুটি প্রান্তের একটিকে বাড়িয়ে তুলতে চাই। এটি একটি দীর্ঘ শর্তযুক্ত হবে যদি শেষ পয়েন্টগুলি পৃথক ভেরিয়েবল হয় তবে তালিকা সূচকের যাদুতে এটি সংক্ষিপ্ত হয়ে যায়। এছাড়াও, এই চেকটি পণ্যের আগে আসবে এবং জেডটি 0 থেকে শুরু করা হয়েছে, কে হবে তা নিশ্চিত করুন[2,4] আমরা প্রথমে পণ্যটি গ্রহণ করব, ততক্ষণে এটি সঠিক সমাপ্তি হবে are

=YurGHK=> Y=reduce(lambda G,H: range(G,H),K)=>Y=range(K[0],K[1])

এখন, আমার কাছে আসল তালিকাটি দরকার যা পণ্যটি হস্তান্তরিত হবে এবং আমরা সফল হলে সেটি মুদ্রণ করা হবে। স্পষ্টতই, আমরা একটি ব্যাপ্তি ফাংশন ব্যবহার করব। কৌতূহল পরিসীমা কার্যকারিতা ইনপুট প্রাপ্ত মধ্যে নিহিত। এটি করার সুস্পষ্ট উপায়, তালিকাটি সূচক করে, হবে =Yr'K@K1। যাইহোক, এই দুটি উপাদান তালিকার একটি হ্রাস ফাংশন ব্যবহার করে, আমরা এটি একটি অক্ষর দ্বারা সংক্ষিপ্ত করতে পারি।

=Zu*NTY => Z=reduce(lambda N,T: N*T,Y)

এবং এখন, এই বিষয়টির পুরো পয়েন্টের জন্য, তালিকার পণ্যটি খুঁজতে অপারেশন হ্রাস করুন।

) => শেষ যখন

Y => print(Y)

সাফল্যে, তালিকাটি মুদ্রণ করুন।

উদাহরণ রান:

$ cat seq_prod 
JvwKr2 4W-ZJ~@K>JZ1=YurGHK=Zu*NTY)Y

$ cat seq_prod | python3 pyth.py
<debug stuff>
==================================================
[9, 10, 11, 12, 13, 14, 15, 16]

1

জাভা - 115

void f(int i){for(int j=2;j<i;j++)for(int k=1,x=j;(x*=j+k)<i;k++);if(x==i)for(i=j;i<j+k;i++)System.out.println(i);}

সামান্য কম গল্ফড:

void f(int i) {
 for(int j=2; j<i; j++)
  for(int k=1, x=j; (x*=j+k) < i; k++);
   if(x == i)
    for(i=j; i<j+k; i++)
     System.out.println(i);
}

এহ, আপনি একটি ফাংশন তৈরি করেছেন এবং রিটার্ন মান মুদ্রণ করেছেন। এখানে এখানে আগে কখনও দেখা হয়নি।

আমি এটি কিছু মুদ্রণ করতে পারি না ... তবে এটি যদি আমাকে কিছু আউটপুট System.out.printlnদেয় তবে আপনি গল্ফটি নামাতে পারেন System.out.printএবং সেমিকোলনটি for(int k=1,x=j;(x*=j+k)<i;k++)কেবল অপ্রয়োজনীয় নয়, ত্রুটিও ঘটায়।
কিউইক্স

এটি আমার পক্ষে কাজ করে না। x, j, kশেষ সুযোগ বাইরে if/forকারণ একটি ব্লক ;। আমি যদি অপসারণ ;করি তবে এটি কিছু মুদ্রণ করে না।
Geobits

1
@ কিউইক্সের পরিবর্তনের printঅর্থ হ'ল সংখ্যাগুলি একসাথে চলতে এড়াতে তাকে একটি সাদা স্থানের অক্ষর যুক্ত করতে হবে।
Geobits

1
@ জিওবিটস গুড পয়েন্ট! আমি সম্ভবত এটি দেখতে পেতাম যদি এটি আমাকে কিছু আউটপুট দেয়।
কিউইক্স

1

মতলব (৮৮)

কোডটি সংখ্যাটি সঞ্চিত হবে xএবং আউটপুট এনে প্রত্যাশা করে l

for n=2:12
r=ceil(x^(1/n))
for s=-3*n:n
l=r-s+(1:n)
if prod(l)==x
return 
end;end;l=x;end

যেহেতু 13! > 2^32এই কোডটি 12 পর্যন্ত 2 দৈর্ঘ্যের পণ্যগুলির জন্য অনুসন্ধান করে This এই কোডটির প্রায় 0.001s ধ্রুবক রানটাইম রয়েছে।


1

স্কালা - 86

def p(n:Int)=(2 to n).flatMap(i=>(i to n).map(i to _-1).find(_.product==n)).headOption

এই কোডটি খুব অকার্যকর তবে এটি অপ্টিমাইজ করা কেবল আরও কয়েকটি অক্ষর যুক্ত করবে। এটি সম্ভাব্য সমস্ত ক্রমাগত ক্রমগুলির পণ্যগুলি পরীক্ষা করতে একটি কার্যকরী পদ্ধতির ব্যবহার করে। (পূর্ণসংখ্যার ধারাবাহিক ক্রমটি স্কালায় একটি রেঞ্জ অবজেক্ট হিসাবে উপস্থাপিত হয়)

ungolfed:

def product(n: Int): Option[Range] = {
  def productStartingAt(start: Int): Option[Range] =
    (start to n-1).map(start to _).find(_.product == n)

  (2 to n).flatMap(i => productStartingAt(i)).headOption
}

1

CJam দীর্ঘ গণনার সময় বর্তমানে প্রচুর সংখ্যক জন্য কাজ করে না

এটি আমার সংক্ষিপ্ততম সিজেএম কোড। Http://cjam.aditsu.net/ এ পরীক্ষা করুন । এটি এর দ্বারা কাজ করে: এ হিসাবে ইনপুট সংজ্ঞায়িত করে; 0 থেকে এ -1 পর্যন্ত সমস্ত সংখ্যার একটি অ্যারে তৈরি করা; লাথি মেরে 0; অ্যারেতে সমস্ত সংখ্যার গুণ করা পর্যন্ত ক্ষুদ্রতম সংখ্যার লাথি মারা A এর চেয়ে বড় নয়; এটি এ এর ​​চেয়ে বড় কিনা তা পরীক্ষা করা হচ্ছে; যদি না হয়, 0 থেকে A-2 থেকে একটি অ্যারে তৈরি করা; এবং উত্তর না পাওয়া পর্যন্ত পুনরাবৃত্তি করা। যদি কিছু না পাওয়া যায় তবে একটি ব্যতিক্রম ছুঁড়ে দেওয়া হয়। আমি বিবেচনা করিনি যে সংখ্যার মধ্যে ফাঁকা স্থান প্রয়োজন ছিল তাই তারা দ্বিতীয় কোডটিতে 32 টি অক্ষরের সাথে দীর্ঘায়িত হয়।

ri:A,{)\;,1{;(;_{*}*_A>}gA<}g

ri:A,{)\;,1{;(;_{*}*_A>}gA<}g" "*

আমি মনে করি আপনার উত্তরটি বৈধ হতে খুব ধীর। মনে রাখবেন, এটি অবশ্যই কোনও বৈধ 32 বিট পূর্ণসংখ্যায় 5 মিনিটের বেশি শেষ করতে হবে। এটি 3600060000 == 60000 * 60001 এ কতক্ষণ সময় নেয়?
isaacg

সুস্পষ্ট পয়েন্ট, আমি এটি পুনরায় কাজ করব এবং সংক্ষিপ্ত হলে পোস্ট করব
কেইন

আপনি যদি এটি পুনরায় কাজ করতে চলেছেন তবে দয়া করে এই উত্তরটি ততক্ষণ মুছুন, নাহলে কোনওভাবে এটি ইঙ্গিত পাওয়া যায় না যে বর্তমানে বৈধ নয়।
isaacg

1

ডার্ট - 102 অক্ষর

এটি একটি ধীর বাস্তবায়ন। এটি দ্রুত তৈরি করা যেতে পারে তবে এর জন্য আরও অক্ষর প্রয়োজন (কেবলমাত্র লুপটি করা পর্যন্ত i*i<n)

f(n,[i=2]){
  t(j,p,a)=>p<n?t(++j,p*j,a..add(j)):p>n?f(n,i+1):a;
  for(;i<n;i++)if(n%i<1)return t(i,i,[i]);
}

(১০২ টি অক্ষর লাইন ব্রেক এবং নেতৃস্থানীয় স্পেস ছাড়াই রয়েছে)।

এটি ব্যবহার করতে, এমন কিছু করুন:

main() {
  print(f(123456789*123456790));
}

0

জাভাস্ক্রিপ্ট, 88

গল্ফ কোড:

function f(a){for(i=2;i<a;i++){b=[1];for(j=i;j>1;j--)if((b[0]*=b[i-j+1]=j)==a)alert(b)}}

পড়ার জন্য সহজ (সুন্দরভাবে ব্যবধানযুক্ত) কোড:

function f(a){
    for(i=2;i<a;i++){
        b=[1];
        for(j=i;j>1;j--)
            if((b[0]*=b[i-j+1]=j)==a)
                alert(b);
    }
}

ইনপুট সংখ্যা 2 থেকে প্রতিটি সংখ্যার জন্য, এটি ধারাবাহিক পূর্ণসংখ্যার পণ্যটি বর্তমান সংখ্যা থেকে 2 এ নেমে আসে this ।

এটি ধারাবাহিক পূর্ণসংখ্যার পরে ইনপুট নম্বর আউটপুট দেয় যার পণ্য হ'ল ইনপুট নম্বর।

উদাহরণস্বরূপ f (120) "120,5,4,3,2" পাঠ্যের সাথে একটি সতর্কতা এবং তারপরে "120,6,5,4" পাঠ্য সহ একটি দ্বিতীয় সতর্কতা তৈরি করে।

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