নির্বিচারে এলোমেলো


26

এলোমেলো মজাদার। বিন্দুবিহীন চ্যালেঞ্জগুলি মজাদার।

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

এলোমেলোভাবে অভিন্ন হতে হবে না , তবে প্রতিটি বৈধ সেটটিতে শূন্যের সম্ভাবনা থাকে।

বাইটের সংক্ষিপ্ত উত্তর (প্রতিটি ভাষাতেই) জিতবে।

উদাহরণ

Input (n) = 1, Target (n^2) = 1
Sample of possible outputs:
1

Input = 2, Target = 4
Sample of possible outputs:
3, 1
1, 3

Input = 3, Target = 9
Sample of possible outputs:
6, 1, 2
3, 5, 1
4, 3, 2

Input = 4, Target = 16
Sample of possible outputs:
1, 3, 5, 7
2, 4, 1, 9
8, 3, 1, 4

Input = 5, Target = 25
Sample of possible outputs:
11, 4, 7, 1, 2
2, 3, 1, 11, 8
6, 1, 3, 7, 8

Input = 8, Target = 64
Sample of possible outputs:
10, 3, 9, 7, 6, 19, 8, 2
7, 16, 2, 3, 9, 4, 13, 10
7, 9, 21, 2, 5, 13, 6, 1

বোনাস টাস্ক: প্রদত্তের জন্য বৈধ অনুমতিের সংখ্যা গণনা করার কোনও সূত্র আছে কি n?


2
সম্পর্কিত , তবে বেশ আলাদা
জিউসেপ

1
(পি / এস: আপনার যদি দ্রুত অ্যালগরিদম থাকে তবে আরও বাইটস নেন, স্পিড সংস্করণটি (বর্তমানে স্যান্ডবক্সে রয়েছে) এটি পোস্ট করার জন্য অপেক্ষা করুন))
ব্যবহারকারী 202729

1
@ এরিকথ আউটগল্ফার যদিও সমস্ত সেট তৈরি করে এবং এলোমেলো একটি বেছে নেওয়ার চেয়ে আরও অনেক ভাল উপায় আছে, সেগুলি কার্যকর করা আরও কঠিন এবং সম্ভবত দীর্ঘতর। গতি সংস্করণের জন্য তাদের রাখুন।
ব্যবহারকারী 202729

2
সেটগুলির সংখ্যা হ'ল OEIS A107379
nwellnhof

1
এটা উভয়। মন্তব্যটি দেখুন "এছাড়াও n ^ 2 এর n পৃথক অংশে পার্টিশনের সংখ্যা।"
nwellnhof

উত্তর:


9

ব্র্যাচল্যাগ (ভি 2), 15 বাইট (এলোমেলো) বা 13 বাইট (সমস্ত সম্ভাবনা)

এলোমেলো

~lℕ₁ᵐA+√?∧A≜₁ᵐ≠

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

ফাংশন সাবমিশন (টিআইওতে একটি সম্পূর্ণ প্রোগ্রামে তৈরি করে একটি মোড়কের সাহায্যে দেখা যায়)।

ব্যাখ্যা

~lℕ₁ᵐA+√?∧A≜₁ᵐ≠
~l               Specify a property of a list: its length is equal to the input,
    ᵐ              and it is composed entirely of
  ℕ₁                 integers ≥ 1,
       √           for which the square root of the
      +              sum of the list
        ?              is the input.
     A   ∧A      Restricting yourself to lists with that property,
           ≜₁      pick random possible values
             ᵐ       for each element in turn,
              ≠    until you find one whose elements are all distinct.

সমস্ত সম্ভাবনা

~lℕ₁ᵐ<₁.+√?∧≜

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

ফাংশন জমা, যা সমস্ত সম্ভাব্য আউটপুট জেনারেট করে

ব্যাখ্যা

~lℕ₁ᵐ<₁.+√?∧≜
~l               Specify a property of a list: its length is equal to the input,
    ᵐ              it is composed entirely of
  ℕ₁                 integers ≥ 1,
     <₁            it is strictly increasing,
         √         and the square root of the
        +            sum of the list
          ?            is the input.
       .   ∧≜    Generate all specific lists with that property.

আমি মোটামুটি অবাক হয়েছি যে ∧≜কাজ করে (আপনাকে সাধারণত ∧~≜ইনপুট না দিয়ে আউটপুটটিকে জোর করে বলার জন্য লিখতে হবে), তবে দেখা যাচ্ছে যে কোনও ইনপুট = আউটপুট অনুমান আছে তাই আপনার কোন পথেই কিছু যায় আসে না doesn't চালাও এটা.

বোনাস টাস্ক

সম্ভাবনার সংখ্যার ক্রমটি সম্পর্কে কিছুটা অন্তর্দৃষ্টি পাওয়ার জন্য, আমি একটি আলাদা টিআইও র‍্যাপার তৈরি করেছি যা আউটপুট গণনার ক্রমটি ক্রমাগত সংখ্যায় প্রোগ্রাম চালায়:

1,1,3,9,30,110,436,1801,7657,33401

ওইআইএস- তে একটি ট্রিপ আবিষ্কার করে যে এটি ইতিমধ্যে একটি পরিচিত অনুক্রম, এ 107379 , প্রশ্নের মতো বর্ণিত হয়েছে (স্পষ্টত আপনি একই ক্রমটি পেয়েছেন যদি আপনি এটি বিজোড় সংখ্যায় সীমাবদ্ধ করেন)। পৃষ্ঠাটি অনুক্রমের জন্য কয়েকটি সূত্র তালিকাভুক্ত করে (যদিও কোনওটিই বিশেষত সহজ নয়; দ্বিতীয়টি মূল্যের জন্য প্রত্যক্ষ সূত্রের মতো মনে হয় তবে আমি স্বীকৃতিটি বুঝতে পারি না)।


দ্বিতীয় সূত্রটি হ'ল " x^(n*(n-1)/2)ধারাবাহিক প্রসারণের Product_{k=1..n} 1/(1 - x^k)
গুণাগুণ

এলোমেলো লেবেলাইজেশন পদক্ষেপের আগে "সমস্ত আলাদা" সীমাবদ্ধতা স্থাপন (উদাহরণস্বরূপ A≠≜₁ᵐ) রান সময়কে গড়ে গড়ে আরও দ্রুত করে তোলে।
21:58

আপনি কেন এটিকে একটি সম্প্রদায় উইকি বানিয়েছেন তা আমি বুঝতে পারি না। এগুলি সম্পাদনা করার আগে পঠনযোগ্য পোস্টগুলি হ'ল এটি একটি প্রত্নতাত্ত্বিক উপায়।
পাইপ


7

05 এ বি 1 , 11 বাইট

nÅœʒDÙQ}sùΩ

এটি অনলাইনে চেষ্টা করুন বা সমস্ত পরীক্ষার কেস যাচাই করুন

ব্যাখ্যা:

n             # Take the square of the (implicit) input
              #  i.e. 3 → 9
 Ŝ           # Get all integer-lists using integers in the range [1, val) that sum to val
              #  i.e. 9 → [[1,1,1,1,1,1,1,1,1],...,[1,3,5],...,[9]]
   ʒ   }      # Filter the list to only keep lists with unique values:
    D         # Duplicate the current value
     Ù        # Uniquify it
              #  i.e. [2,2,5] → [2,5]
      Q       # Check if it's still the same
              #  i.e. [2,2,5] and [2,5] → 0 (falsey)
        s     # Swap to take the (implicit) input again
         ù    # Only leave lists of that size
              #  i.e. [[1,2,6],[1,3,5],[1,8],[2,3,4],[2,7],[3,6],[4,5],[9]] and 3
              #   → [[1,2,6],[1,3,5],[2,3,4]]
          Ω   # Pick a random list from the list of lists (and output implicitly)


5

আর , 68, 75 48 বাইট (এলোমেলো) এবং 70 বাইট (ডিটারমিনিস্টিক)

@ জিউসেপের প্রত্যাখ্যানের নমুনা পদ্ধতি:

function(n){while(sum(F)!=n^2)F=sample(n^2,n);F}

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

গল্ফ মূল:

function(n,m=combn(1:n^2,n))m[,sample(which(colSums(m)==n^2)*!!1:2,1)]

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

*!!1:2ব্যবসা বিজোড় উপায় এড়াতে হয় sampleযখন প্রথম আর্গুমেন্ট দৈর্ঘ্য 1 গেছে আইন।


@ জিউসেপ "স্থির" :-)
এনজিএম

খুব সুন্দর. pএটিকে গণনা করার পরিবর্তে সরাসরি সূচক হিসাবে ব্যবহার করা এবং এটি পুনরায় ব্যবহার করা কিছু বাইট সংরক্ষণ করা উচিত।
জিউসেপ

1
আমারও function(n){while(sum(F)!=n^2)F=sample(n^2,n);F}48
জিউসেপ

1
@ জে.ডো এই জাতীয় sample(2,1)ঘটনার সাথে ঘটেছিল এমন কিছু কল করার সময় সমস্যাটি এড়াতে n=2। সুতরাং repকেবল গ্যারান্টি দেয় যে এটি কখনও ঘটবে না। আরও ভাল উপায় থাকতে পারে তবে এটি দ্রুত ছিল এবং আমি এতে ক্ষিপ্ত হয়ে পড়েছিলাম sample
এনজিএম

1
আপনার মেটা প্রশ্নটি যদি নম্বর পেয়ে x*!!1:2যায় rep(x,2)তবে আপনি ওভার দিয়ে বাইট সংরক্ষণ করতে পারেন।
জে.ডো


4

জাভা 10, 250 242 222 বাইট

import java.util.*;n->{for(;;){int i=n+1,r[]=new int[i],d[]=new int[n];for(r[n<2?0:1]=n*n;i-->2;r[i]=(int)(Math.random()*n*n));var S=new HashSet();for(Arrays.sort(r),i=n;i-->0;)S.add(d[i]=r[i+1]-r[i]);if(!S.contains(0)&S.size()==n)return S;}}

-20 ধন্যবাদ বাইট @nwellnhof

নজর রাখুন, জাভা আসছে ... অন্য চারটি উত্তর একত্রিত হওয়ার পরে এটি পাঁচবার 'কেবল', তাই আমার খুব খারাপ লাগবে না .. rofl।
এটি চালানোর নেই n=1মাধ্যমে n=25তাই আমি সম্ভবত পাশাপাশি এই প্রতিদ্বন্দ্বিতা গতি সংস্করণে একটি পরিবর্তিত সংস্করণ (স্যান্ডবক্স এখনও বর্তমানে যে) পোস্ট করব, কম 2 সেকেন্ডের যদিও মধ্যে (মিলিত)।

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

ব্যাখ্যা:

সিউডো-কোডে আমরা নিম্নলিখিতটি করি:

1) আকারের একটি অ্যারের জেনারেট করুন n+1ধারণকারী: 0, nছক, এবং n-1সীমার মধ্যে র্যান্ডম পূর্ণসংখ্যার পরিমাণ [0, n squared)
2) সাজান এই অ্যারের
3) আকারের একটি দ্বিতীয় বিন্যাস তৈরি করুন nযুগলের এগিয়ে পার্থক্য ধারণকারী
এগুলো হল প্রথম তিনটি ধাপ আমাদের ধারণকারী একটি অ্যারের দেব nর্যান্ডম পূর্ণসংখ্যার (সীমার মধ্যে [0, n squared)যে সমষ্টি nস্কোয়ারড।
4 ক) যদি তা না হয় সব এলোমেলো মান অনন্য, অথবা তাদের কোন 0: ধাপ 1 থেকে আবার চেষ্টা
4b) অন্য: ফলস্বরূপ এই পার্থক্য অ্যারে ফিরে

আসল কোড হিসাবে:

import java.util.*;      // Required import for HashSet and Arrays
n->{                     // Method with int parameter and Set return-type
  for(;;){               //  Loop indefinitely
    int i=n+1,           //   Set `i` to `n+1`
        r[]=new int[i];  //   Create an array of size `n+1`
    var S=new HashSet(); //   Result-set, starting empty
    for(r[n<2?           //   If `n` is 1:
           0             //    Set the first item in the first array to:
          :              //   Else:
           1]            //    Set the second item in the first array to:
             =n*n;       //   `n` squared
        i-->2;)          //   Loop `i` in the range [`n`, 2]:
      r[i]=              //    Set the `i`'th value in the first array to:
           (int)(Math.random()*n*n); 
                         //     A random value in the range [0, `n` squared)
    for(Arrays.sort(r),  //   Sort the first array
        i=n;i-->0;)      //   Loop `i` in the range (`n`, 0]:
      S.add(             //    Add to the Set:
        r[i+1]-r[i]);    //     The `i+1`'th and `i`'th difference of the first array
    if(!S.contains(0)    //   If the Set does not contain a 0
       &S.size()==n)     //   and its size is equal to `n`:
      return S;}}        //    Return this Set as the result
                         //   (Implicit else: continue the infinite loop)

1
n=252 সেকেন্ডের অধীনে চিত্তাকর্ষক! আমি ব্যাখ্যার মাধ্যমে পড়তে হবে এবং এটি কীভাবে তা দেখতে হবে। এটি কি এখনও একটি ব্রুটফোর্ড পদ্ধতি?
স্কিডেদেব

এটি কি অভিন্ন? -
ব্যবহারকারী 202729

@ user202729 যদিও এটি কীভাবে প্রমাণ করতে হবে তা সম্পর্কে আমি নিশ্চিত নই, তবে আমি মনে করি এটি এটি। জাভা বিল্টিনটি অভিন্ন, এবং এটি [0, n squared)প্রথমে পরিসরে র্যান্ডম মান পেতে এটি ব্যবহার করে এবং তারপরে সাজানো এলোমেলো মানগুলির মধ্যে পার্থক্য গণনা করে (নেতৃস্থানীয় 0এবং অনুগামী সহ n squared। তাই আমিও নিশ্চিত যে এই পার্থক্যগুলিও অভিন্ন। তবে আবার sure , আমি কীভাবে এটি প্রমাণ করতে পারি তা নিশ্চিত নই।
এলোমেলোভাবে অভিন্নতা

3
আপনি কখনও পার্থক্য অ্যারে থেকে পড়েন না dবা আমি কিছু মিস করছি?
nwellnhof


4

পার্ল 6 , 41 বাইট

{first *.sum==$_²,(1..$_²).pick($_)xx*}

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

  • (1 .. $_²) ইনপুট সংখ্যার বর্গক্ষেত্র থেকে সংখ্যার ব্যাপ্তি
  • .pick($_) এলোমেলোভাবে এই ব্যাপ্তির একটি পৃথক উপসেট চয়ন করে
  • xx * পূর্বের প্রকাশকে অনন্তভাবে প্রতিলিপি করে
  • first *.sum == $_² ইনপুট সংখ্যার বর্গক্ষেত্রের সমান যে সংখ্যা সেটগুলির মধ্যে প্রথমটি নির্বাচন করে


2

পাইথ, 13 12 বাইট

Ofq*QQsT.cS*

এটি এখানে অনলাইনে চেষ্টা করুন । নোট করুন যে অনলাইন দোভাষী than টিরও বেশি ইনপুটগুলির জন্য মেমোরিআরারে চলে।

Ofq*QQsT.cS*QQQ   Implicit: Q=eval(input())
                 Trailing QQQ inferred
          S*QQQ   [1-Q*Q]
        .c    Q   All combinations of the above of length Q, without repeats
 f                Keep elements of the above, as T, where the following is truthy:
      sT            Is the sum of T...
  q                 ... equal to...
   *QQ              ... Q*Q?
O                 Choose a random element of those remaining sets, implicit print

সম্পাদনা করুন: বিকল্প পদ্ধতি গ্রহণ করে একটি বাইট সংরক্ষণ করেছেন saved পূর্ববর্তী সংস্করণ: Of&qQlT{IT./*


2

পাইথন 3 , 136 134 127 121 114 বাইট

from random import*
def f(n):
	s={randint(1,n*n)for _ in range(n)}
	return len(s)==n and sum(s)==n*n and s or f(n)

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

একজন মন্তব্যকারী আমাকে সংশোধন করেছে, এবং এটি এখন চ (1) এর পরিবর্তে চ (5) এ পুনরাবৃত্তি সর্বাধিক গভীরতায় আঘাত করে। সত্যিকারের প্রতিযোগিতামূলক উত্তর হওয়ার কাছাকাছি।

আমি একবার এটি চ (5) করতে দেখেছি এবং আমি এলোমেলো করে প্রয়োগ করার চেষ্টা করছি on

আমি এর জন্য কিছু ল্যাম্বডা এক্সপ্রেশন করার চেষ্টা করেছি s=..., তবে এটি বাইটগুলিতে সহায়তা করে নি। হতে পারে অন্য কেউ এর সাথে কিছু করতে পারে: s=(lambda n:{randint(1,n*n)for _ in range(n)})(n)

কেভিনকে আরও 7 বাইট কামিয়ে দেওয়ার জন্য ধন্যবাদ।


1
সুতরাং এটি সেটটি "পুনরায় জন্মানো" করতে পুনরাবৃত্তি ব্যবহার করে যদি উত্পন্ন কোনওটি অবৈধ হয়? আপনার কোড সহ কিছু উল্টাপাল্টা হলে এর এ আঘাত পুনরাবৃত্তির গভীরতা f(1), শুধুমাত্র সম্ভব অ্যারের generable হওয়া উচিত n=1নয় [1]সেখানে বিদেশী হোয়াইটস্পেস অনেকটা এখানে অপসারণ করা হবে এর এছাড়াও। মনে রাখবেন এটি একটি কোড-গল্ফ চ্যালেঞ্জ, সুতরাং লক্ষ্যটি হ'ল সর্বনিম্ন বাইকোয়ান্ট অর্জন করা
স্কিডেদেব

1
range(1,n)-> range(n)আমি বিশ্বাস করি বাগটি সমাধান করা উচিত।
জোনাথন অ্যালান

1
এটি আপনার বাগটি ঠিক করতে হবে এবং বহিরাগত শ্বেত স্থানও সরিয়ে ফেলবে। আমি কল্পনা করেছি যে গল্ফ করার জন্য আরও অনেক জায়গা আছে
স্কিডেদেব

1
যদিও পুনরাবৃত্তিটি 5 থেকে 4 এর থেকে সামান্য খারাপ হয়ে যায়, আপনি আপনার দুটি রিটার্নের স্টেটমেন্টগুলি একত্রিত করতে পারেন: return len(s)==n and sum(s)==n*n and s or f(n)( এটি অনলাইনে 114 বাইট ব্যবহার করে দেখুন )।
কেভিন ক্রুইজসেন

1
আপনি সব এক লাইনে রাখতে পারেন। 111 বাইট
জো কিং

2

এপিএল (ডায়ালগ ইউনিকোড) , 20 বাইট এসবিসিএস

নামবিহীন উপসর্গ লাম্বদা।

{s=+/c←⍵?s←⍵*2:c⋄∇⍵}

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

{} "ডিএফএন"; যুক্তি

⍵*2 যুক্তি বর্গাকার

s← বরাদ্দ করুন s( গুলি কোয়ের জন্য)

⍵?n1 থেকে র্যান্ডম সূচকগুলি  সন্ধান করুন… sপ্রতিস্থাপন ছাড়াই

c← বরাদ্দ করুন c( সি সিডের জন্য)

+/ তাদের যোগফল

s= তুলনা করা s

: সমান হলে

  c প্রার্থী ফিরিয়ে দিন

 আর

  ∇⍵ তর্ক উপর পুনরাবৃত্তি



@ জিএন না, পরিষ্কারভাবে নয়, তবে আমি পরীক্ষা করেছিলাম যে আমার পোস্টের আগে কোনও এপিএল সমাধান পোস্ট করা হয়নি। কেন আপনারা কেউ করেন নি
অ্যাডম

ঠিক আছে, একবার আমি এটি গল্ফ করে বাগানের কাছে দেখিয়ে দিই, পোস্ট করার পক্ষে কোনও উত্সাহই পাওয়া যায় না :)
এনএনজি

@ngn আপনার জন্য, না, তবে আমার জন্য রয়েছে।
অ্যাডম

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

2

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

(≢?≢×≢)⍣(0=+.-∘≢)⍳

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

ব্যবহারসমূহ ⎕io←1

সংখ্যা উত্পন্ন করে 1 2 ... n

(... )⍣(... )ডানদিকে ফাংশনটি সত্য না হওয়া পর্যন্ত বামদিকে ফাংশনটি প্রয়োগ করতে থাকুন

দৈর্ঘ্য, যেমন n

≢?≢×≢n1 এবং 2 এর মধ্যে এলোমেলোভাবে পৃথক পূর্ণসংখ্যা নির্বাচন করুনn

+.-∘≢ প্রতিটি সংখ্যা এবং যোগফল থেকে দৈর্ঘ্য বিয়োগ করুন

0= যোগফল 0 হলে লুপিং বন্ধ করুন, অন্যথায় আবার চেষ্টা করুন


1

এমএটিএল , 18 13 বাইট

`xGU:GZrtsGU-

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

`	# do..while:
x	# delete from stack. This implicitly reads input the first time
	# and removes it. It also deletes the previous invalid answer.
GU:	# paste input and push [1...n^2]
GZr	# select a single combination of n elements from [1..n^2]
tsGU-	# is the sum equal to N^2? if yes, terminate and print results, else goto top

আমি আর এ চেষ্টা করব না - এলোমেলো অক্ষরগুলি প্রায়শই কোনও বৈধ প্রোগ্রাম তৈরি করে না।
এনজিএম

@ngm hahaha আমি মনে করি একটি ব্যাখ্যা ক্রমানুসারে এসেছে।
জিউসেপ

1

জাপট, 12 বাইট

²õ àU ö@²¥Xx

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

                 :Implicit input of integer U
²                :U squared
 õ               :Range [1,U²]
   àU            :Combinations of length U
      ö@         :Return a random element that returns true when passed through the following function as X
        ²        :  U squared
         ¥       :  Equals
          Xx     :  X reduced by addition

ওপি দ্বারা করা একটি মন্তব্য অনুসারে, আউটপুটে উপাদানগুলির ক্রমটি অপ্রাসঙ্গিক তাই সঠিক àহওয়া উচিত।
কামিল দ্রাকারী

ধন্যবাদ, কমিলড্রাকারি। আপডেট করা হয়েছে।
শেগি

1

জাভা (জেডিকে) , 127 বাইট

n->{for(int s;;){var r=new java.util.TreeSet();for(s=n*n;s>0;)r.add(s-(s-=Math.random()*n*n+1));if(r.size()==n&s==0)return r;}}

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

মানদণ্ডের সাথে মেলে না এমন একটি সেট অবধি অসীম লুপ।

আমি আশা করি আপনার সময় হবে, কারণ এটি খুব স্লুওউউ! সময় নির্ধারণ না করে এটি 10 ​​এও যেতে পারে না।


আপনি গলফ 3 পরিবর্তন করে বাইট করতে পারেন if(r.size()==n&s==0)থেকে if(r.size()+s==n)
কেভিন ক্রুইজসেন

@ কেভিন ক্রুজসেন আমি এটি সম্পর্কেও ভেবে দেখেছি, তবে কোনটি আমি করতে পারি না কারণ এস -1 হতে পারে এবং এন আকার হতে পারে () - 1.
অলিভিয়ের গ্রাগোয়ার

আহ অপেক্ষা করুন, আপনি যতক্ষণ না সেটে আইটেমগুলি যুক্ত করতে থাকুন s>0, তাই আকারটি এর চেয়েও বড় হতে পারে n। ঠিক আছে, সেক্ষেত্রে এটি আসলে কাজ করে না। nধ্রুবক, তবে দুর্ভাগ্যক্রমে উভয়ই sএবং r.size()ভেরিয়েবল যা যথাক্রমে নীচে বা উপরে 0এবং nযথাক্রমে উভয় হতে পারে ।
কেভিন ক্রুইজসেন

1

ব্যাচ, 182 145 বাইট

@set/an=%1,r=n*n,l=r+1
@for /l %%i in (%1,-1,1)do @set/at=n*(n-=1)/2,m=(r+t+n)/-~n,r-=l=m+%random%%%((l-=x=r+1-t)*(l^>^>31)+x-m)&call echo %%l%%

ব্যাখ্যা: সংখ্যাগুলি অবতরণ ক্রমে বাছাই করতে হবে এবং সীমাতে একটি এলোমেলো মান চয়ন করে, সর্বনিম্ন এবং সর্বাধিক অনুমতিযোগ্য পিক গণনা করে। এর একটি ইনপুট উদাহরণ 4:

  • আমরা 16 বাম দিয়ে শুরু করি। আমরা ১১ বা ততোধিক বাছাই করতে পারি না কারণ বাকী ৩ টি বাছাই কমপক্ষে to টিতে যোগ করতে হবে কারণ আমাদের কমপক্ষে 6 টি বাছাই করতে হবে, কারণ আমরা যদি কেবল ৫ টি বাছাই করি, বাকি 3 টি পিক কেবল 9 যোগ করতে পারে, যা নয় 16 এর জন্য যথেষ্ট We আমরা 6 থেকে 10 পর্যন্ত একটি এলোমেলো মান বাছাই করি 6
  • আমাদের 10 টি বাকি আমরা 8 বা ততোধিক বাছাই করতে পারি না কারণ বাকী 2 টি পিক অবশ্যই কমপক্ষে 3 যোগ করা উচিত it এটি হওয়ার সাথে সাথে আমরা 6 বা ততোধিক বাছাই করতে পারি না কারণ আমরা গতবার 6 বার বাছাই করেছি। আমাদের কমপক্ষে ৫ টি বাছাই করাও প্রয়োজন, কারণ আমরা যদি মাত্র ৪ টি বাছাই করি, তবে বাকি 2 টি পিক কেবলমাত্র 5 টি যোগ করতে পারে, গ্র্যান্ড 15 এর জন্য। আমরা 5 থেকে 5 পর্যন্ত একটি এলোমেলো মান বাছাই করি, বলুন 5 (!)।
  • আমাদের 5 টি বাকি আমরা 5 বা ততোধিক বাছাই করতে পারছি না কারণ বাকী পিকটি কমপক্ষে 1 টিতে যুক্ত হবে এবং এটিও শেষবারের মতো 5 টি বাছাই করার কারণে। আমাদের কমপক্ষে 3 বাছাই করাও প্রয়োজন, কারণ আমরা যদি কেবল 2 বাছাই করি তবে বাকী বাছাইটি 14 টির জন্য মোট 1 টি হতে পারে We আমরা 3 থেকে 4 এর থেকে এলোমেলো মান বেছে নিই, 4 বলুন।
  • আমাদের 1 টি বাকি দেখা যাচ্ছে, অ্যালগরিদম 1 থেকে 1 ব্যাপ্তি পছন্দ করে এবং আমরা 1টিকে চূড়ান্ত সংখ্যা হিসাবে বেছে নিয়েছি।

1

জাভাস্ক্রিপ্ট, 647 291 261 260 259 251 239 বাইট

আসল সংস্করণে -১০ বাইটের জন্য @ ভেসকাহকে ধন্যবাদ এবং "ওহ হ্যাঁ, আপনি সমস্ত সেট আউটপুট দিচ্ছেন যেখানে চ্যালেঞ্জটি এলোমেলোভাবে ফিরে আসতে বলেছে"

(n,g=m=n**2,r=[...Array(g||1)].map(_=>m--).sort(_=>.5-Math.random()).slice(-n),c=_=>eval(r.join`+`),i=_=>r.includes(_))=>[...{*0(){while(g>1&&c()!=g){for(z of r){y=c();r[m++%n]=y>g&&!(!(z-1)||i(z-1))?z-1:y<g&&!i(z+1)?z+1:z}}yield*r}}[0]()]

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

n^21-ভিত্তিক সূচকের একটি অ্যারে তৈরি করুন , এলোমেলোভাবে অ্যারে বাছাই করুন, অ্যারের nথেকে উপাদানগুলি স্লাইস করুন । যদিও এলোমেলো উপাদানগুলির যোগফল এলোমেলো উপাদানের n^2লুপ অ্যারের সমান হয় না ; যদি অ্যারের উপাদানগুলির যোগফলের চেয়ে বড় হয় n^2এবং বর্তমান উপাদান -1শূন্যের সমান হয় না বা বর্তমান উপাদান -1বর্তমান অ্যারেতে না থাকে তবে বিয়োগ করে 1; যদি অ্যারের যোগফলের চেয়ে কম হয় n^2এবং বর্তমান উপাদান +1অ্যারেতে না থাকে তবে 1উপাদানকে যুক্ত করুন। অ্যারে যোগফল n^2লুপ ভাঙ্গার সমান হলে আউটপুট অ্যারে।


1
ভেরিয়েবলে z.join টেনে 637 বাইট , এবংk++
ভেসকা

@ ভেস্কাহ: দুটি whileলুপ সম্ভবত কোনও একক ক্রিয়াকলাপের আকারেও হ্রাস করা যেতে পারে যা পরামিতিগুলি গ্রহণ করে; এবং if..elseবিবৃতিগুলির জন্য শর্তসাপেক্ষ অপারেটরদের (টেরিনারি) প্রতিস্থাপন করতে পারে ; কোডের অন্যান্য অংশগুলির মধ্যে যা সম্ভবত গল্ফের জন্য সামঞ্জস্য হতে পারে; ie, letবিবৃতি অপসারণ ।
অতিথি 271314


1
ওহ হ্যাঁ, আপনি সমস্ত সেট আউটপুট করছেন যেখানে চ্যালেঞ্জটি এলোমেলোভাবে ফিরে আসার জন্য বলেছে (আরও তথ্যের জন্য ওপি মন্তব্য দেখুন)
ভেস্কাহ

@ ভেস্কাহ অবশ্যই চ্যালেঞ্জ এবং উদাহরণগুলির ভুল ব্যাখ্যা করেছেন, বা প্রশ্নের এই অংশটি সমাধান করতে খুব বেশি মনোনিবেশ করেছেন " বোনাস টাস্ক: কোনও প্রদত্তের জন্য বৈধ অনুমতি দেওয়ার সংখ্যা গণনা করার কোনও সূত্র আছে কি n?" । যদি অ্যালগরিদম ধারাবাহিকভাবে ফিরে প্রত্যাশিত ফলাফলের পরীক্ষা n^2ফাংশন একটি একক কলে উত্পন্ন আউটপুট অ্যারে, এবং একই সাথে এই প্রশ্নের মিল বিবেচনা করা এন-মাত্রিক এন ^ এন এন ভরা অ্যারে
অতিথি 271314

0

জাপট , 20 বাইট

²õ ö¬oU íUõ+)Õæ@²¥Xx

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

চূড়ান্তভাবে "অ-ইউনিফর্ম" র্যান্ডম হওয়ার সুবিধা গ্রহণ করে, প্রায় সর্বদা প্রথম nবিজোড় সংখ্যাগুলি আউটপুট করে যা সংখ্যার সাথে মিলিত হয় n^2। তত্ত্বগতভাবে এটি অন্য কোনও বৈধ সেট আউটপুট করতে পারে, যদিও আমি কেবল এটি ছোটর জন্যই নিশ্চিত করতে সক্ষম হয়েছি n

ব্যাখ্যা:

²õ                      :Generate the range [1...n^2]
   ö¬                   :Order it randomly
     oU                 :Get the last n items
        í   )Õ          :Put it in an array with...
         Uõ+            : The first n odd numbers
              æ_        :Get the first one where...
                  Xx    : The sum
                ²¥      : equals n^2


0

সি (জিসিসি) , 128 125 বাইট

p(_){printf("%d ",_);}f(n,x,y,i){x=n*n;y=1;for(i=0;++i<n;p(y),x-=y++)while(rand()&&(n-i)*(n-i+1)/2+(n-i)*(y+1)+y<x)y++;p(x);}

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

-3 বাইট সিলিংক্যাট ধন্যবাদ

দ্রষ্টব্য: সম্ভাবনাটি ইউনিফর্ম থেকে খুব দূরে। আমি যা বলতে চাইছি তার ব্যাখ্যা এবং এটি কার্যকর হয় তা পরীক্ষা করার আরও ভাল অর্থ দেখুন (বন্টনটিকে ইউনিফর্মের কাছাকাছি করে তোলার মাধ্যমে [তবে এটি থেকে এখনও অনেক দূরে কান্না])।

কিভাবে?

মূল ধারণাটি কেবলমাত্র ক্রমবর্ধমান সংখ্যা নির্বাচন করা যাতে ডুপ্লিকেটগুলির বিষয়ে চিন্তা না করা। যখনই আমরা একটি নম্বর বাছাই করি, আমাদের যদি অনুমতি দেওয়া হয় তবে এটি 'এড়িয়ে যাওয়ার' শঙ্কার অ-শূন্য সুযোগ রয়েছে।

xky

y+(y+1)+(y+2)+...
x
k(k+1)2+k(y+1)+y<x

তবুও যুক্তিটি হ'ল yউপরের সমীকরণটি সন্তুষ্ট করে এমন কোনওটি ফেলে দেওয়ার সুযোগ রয়েছে ।

কোড

p(_){printf("%d ",_);}  // Define print(int)
f(n,x,y,i){             // Define f(n,...) as the function we want
    x=n*n;              // Set x to n^2
    y=1;                // Set y to 1
    for(i=0;++i<n;){    // n-1 times do...
        while(rand()&&  // While rand() is non-zero [very very likely] AND
            (n-i)*      // (n-i) is the 'k' in the formula
            (n-i+1)/2+  // This first half takes care of the increment
            (n-i)*(y+1) // This second half takes care of the y+1 starting point
            +y<x)       // The +y takes care of the current value of y
        y++;            // If rand() returned non-zero and we can skip y, do so
    p(y);               // Print y
    x-=y++;             // Subtract y from the total and increment it
    }p(x);}             // Print what's left over.

কৌতুক আমি ভাল পরীক্ষা উল্লিখিত কোড প্রতিস্থাপন জড়িত rand()&&সঙ্গে rand()%2&&তাই একটি 50-50 সুযোগ যে কোনো Y এড়ানো হয়, বরং একটি 1 তুলনায় মধ্যে যে RAND_MAXসুযোগ যে কোনো Y ব্যবহার করা হয়।


যদি কেউ আমার গণিতের ধারাবাহিকতার জন্য পরীক্ষা করে থাকেন তবে আমি এটি পছন্দ করব। আমি আরও ভাবছি যে এই ধরণের সমাধানটি ইউনিফর্ম এলোমেলো গতির চ্যালেঞ্জকে সহজ করে তুলতে পারে। সূত্রটি উত্তরের উপরের এবং নীচে আবদ্ধ রাখে, সেই পরিসরে একটি অভিন্ন র্যান্ডম সংখ্যার কি অভিন্ন র্যান্ডম ফলাফলের ফলাফল হয়? আমি দেখতে পাচ্ছি না কেন - তবে আমি কিছুক্ষণের মধ্যে খুব বেশি সংযোজন করিনি।
লাম্বদাবেটা

সুপারিশ p(y),x-=y++)while(rand()&&(i-n)*((~n+i)/2+~y)+y<x)y++;পরিবর্তে){while(rand()&&(n-i)*(n-i+1)/2+(n-i)*(y+1)+y<x)y++;p(y);x-=y++;}
ceilingcat

@ এসিলিংক্যাট আমি আপনার এই সামান্য উন্নতিগুলি পছন্দ করি। আমি সর্বদা সামগ্রিক অ্যালগরিদমের প্রতি এত মনোনিবেশ করি আমি বাস্তবায়নের জন্য অনুকূলিতকরণ করতে ভুলে যাই (একবারে আমার কোনও অ-গল্ফযুক্ত উত্স কাজ করে তবে আমি মূলত অটোপাইলট গল্ফিং মোডে যাই so সুতরাং আমি প্রচুর সঞ্চয় মিস করি)
ল্যাম্বদাবেটা

আরে, এই সিনট্যাক্স-গল্ফগুলি কেবল আপনারই নয়। আমি এর মত অনেকগুলি সি / সি ++ জবাবগুলিতে সামান্য উন্নতি পেয়েছি (আপনার মধ্যে নয়, @ সেলিংক্যাট সাধারণত সেগুলি স্ন্যাপ করে)।
জাকারি

হ্যাঁ, আমি লক্ষ্য করেছি যে আপনি দুজনই সম্ভবত সর্বাধিক সক্রিয় সি / সি ++ পুটার (আমরা গল্ফের উপমাটি শেষ কয়েকটি স্ট্রোকের জন্য প্রসারিত করতে পারি? কেন নয়!)। এটি সর্বদা আমাকে মুগ্ধ করে যে আপনি এমনকি গল্ফযুক্ত কোডটি এটির উন্নতি করতে যথেষ্ট ভাল বুঝতে পারবেন।
লাম্বদাবেটা




0

গণিত 40 বাইট

RandomChoice[IntegerPartitions[n^2, {n}]]

1
প্রথমত এটি n ^ 2, 2 ^ n নয়। দ্বিতীয়ত, আপনার প্রোগ্রামটি অবশ্যই একটি ফাংশন এবং একটি গল্ফযুক্তও হতে হবে। এটি ব্যবহার করে দেখুন RandomChoice@IntegerPartitions[#^2,{#}]&
J42161217

1
এছাড়াও ফলাফল অবশ্যই হতে হবে (আনর্ডর্ডার্ড, অনন্য) তবে এই ফাংশন দুটিতেই ব্যর্থ হয়
J42161217

0

ওল্ফ্রাম ভাষা (গণিত) , 49 বাইট

(While[Tr[s=RandomSample[Range[#^2],#]]!=#^2];s)&

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

@ J42161217 দ্বারা গল্ফড সংস্করণ।


ওল্ফ্রাম ভাষা (গণিত) , 62 বাইট matic

Range[#-1,0,-1]+RandomChoice@IntegerPartitions[#*(#+1)/2,{#}]&

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

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

n2nn2(n2n)/2=(n2+n)/20n1n10


বোনাস টাস্কের উত্তর

বোনাস টাস্ক: প্রদত্তের জন্য বৈধ অনুমতিের সংখ্যা গণনা করার কোনও সূত্র আছে কি n?

part(n,k)nk

part(n,k)=part(n1,k1)+part(nk,k)

part(n,1)=1n<kpart(n,k)=0

part(n2+n2,n)

যা গাণিতিকায়:

Length@IntegerPartitions[#*(#+1)/2,{#}]&

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


এটি কোড গল্ফ .. 49 বাইট(While[Tr[s=RandomSample[Range[#^2],#]]!=#^2];s)&
J42161217
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.