স্বতন্ত্র সংখ্যা সহ একটি এলোমেলো এন অঙ্কের নম্বর পান এবং প্রথমে 0 নয়


22

আমি এই প্রশ্নটি পড়েছি এবং ভেবেছিলাম এটি একটি দুর্দান্ত চ্যালেঞ্জ তৈরি করবে।

কার্য

একটি ইনপুট 0<n<10দিয়ে একটি এলোমেলো সংখ্যা উত্পন্ন করুন

  • ঠিক এন ডিজিট
  • প্রথম না একটি 0
    • সুতরাং f(n)>10**(n-1)-1
  • স্বতন্ত্র সংখ্যা

জয়ের মানদণ্ড

এটি তাই সংক্ষিপ্ততম কোডের জয়।

এলোমেলো

মানে সমানভাবে বিতরণ করা এলোমেলো। সুতরাং প্রোগ্রামের ভিউ থেকে প্রতিটি সম্ভাব্য সংখ্যার একই সুযোগ রয়েছে। আপনি যে ভাষায় লিখছেন তাতে যদি একটি অদ্ভুত এলোমেলো নম্বর জেনারেটর থাকে তবে এটি ব্যবহার করা ঠিক আছে।

উদাহরণ

এলোমেলোভাবে থেকে মান নির্বাচন করার জন্য মানগুলির তালিকাটি n=2হ'ল:

[10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98]
code-golf  number  random  grid  game  king-of-the-hill  javascript  code-golf  arithmetic  statistics  code-golf  math  code-golf  math  code-golf  string  palindrome  code-golf  string  interactive  code-golf  quine  polyglot  code-golf  string  stack-exchange-api  code-golf  number-theory  decision-problem  code-golf  tips  code-golf  string  internet  code-golf  graphical-output  image-processing  fractal  code-golf  ascii-art  geometry  hexagonal-grid  code-golf  string  restricted-source  hello-world  code-golf  game  code-golf  cipher  code-golf  permutations  cops-and-robbers  permutations  cops-and-robbers  code-golf  internet  stack-exchange-api  code-golf  ascii-art  random  code-golf  tips  code-golf  ascii-art  code-golf  code-golf  kolmogorov-complexity  code-golf  string  unicode  code-golf  number  sequence  primes  palindrome  code-golf  game  decision-problem  code-golf  math  geometry  code-golf  graphical-output  interactive  code-golf  set-partitions  code-golf  number  arithmetic  restricted-source  code-golf  decision-problem  python  recursion  code-golf  ascii-art  code-golf  source-layout  code-golf  function  recursion  functional-programming  code-golf  game  combinatorics  permutations  code-golf  string  file-system  code-golf  string  hashing  code-golf  stack-exchange-api  code-golf  string  code-golf  math  number  arithmetic  polyglot 

4
কোনও বিতরণ নির্দিষ্ট না করে এলোমেলোতার প্রয়োজন এড়ানো উচিত।
flawr

পূর্ণসংখ্যা হিসাবে ফিরে আসুন, স্ট্রিং নয়, হ্যাঁ?
জিউসেপে

@ জিউজ্পে এলোমেলো সংখ্যা তৈরি করে
এমবিম্ব ২০০7

4
আমি মনে করি এটি প্রতিবারই কেউ এলোমেলোভাবে প্রশ্ন তোলে xkcd.com/221
থান্ডা

1
@ ais523 "একটি ইনপুট দিন 0 <এন <10 এর সাথে একটি এলোমেলো সংখ্যা তৈরি করুন"
ক্লাব্ল্যাঙ্ক

উত্তর:


17

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

from random import*
r=range(10)
while[1]>r:shuffle(r)
print`r`[1:input()*3:3]

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

0 টি দিয়ে শুরু না হওয়া পর্যন্ত 10 সংখ্যার তালিকাটি পরিবর্তন করে, তারপরে nতালিকাভুক্ত প্রথম সংখ্যাগুলির সাথে একটি সংখ্যা তৈরি করে ।


নিশ্চিতভাবে দ্রুত এবং ইনপুট জন্য কম মেমরি সঙ্গে চালায় 9অথবা 10
mbomb007

ঝরঝরে সমাধান! আপনি কী ব্যাখ্যা করতে পারেন যে কীভাবে এটি [1::3]তালিকা থেকে একটি স্ট্রিংয়ে রূপান্তর করতে কাজ করে? আমি এর আগে কখনও দেখিনি।
জুলিয়ান ওল্ফ

@ জুলিয়ানওল্ফ এটি কেবলমাত্র কাজ করে যদি তালিকার প্রতিটি উপাদান একই দৈর্ঘ্য হয়। এটি আসলে তালিকার স্ট্রিং প্রতিনিধিত্ব নেয়, তারপরে এটিকে প্রথম এড়িয়ে যাওয়ার পরে প্রতিটি তৃতীয় অক্ষর গ্রহণ করে টুকরো টুকরো করে [
mbomb007

@ জুলিয়ানওল্ফ [1::3]প্রতিটি তৃতীয় পরে সূচক 1 এ চরিত্রটি পান। কারণ [1, 2, 3]এটি দেয় 123, বন্ধনী, কমা এবং স্থানগুলি এড়িয়ে চলে।
ডেনিস

অঙ্কুর, ঠিক আছে — এটি বোঝায়। আমি ভুলে [1, 2, 3]যাচ্ছিলাম যে ইতিমধ্যে স্ট্রিংফায়েড হয়ে গেছে এবং কমা এবং ফাঁকা জায়গাগুলি বাদ দেওয়া দরকার। ধন্যবাদ!
জুলিয়ান ওল্ফ

10

ব্র্যাচল্যাগ , 9 10 বাইট

{~lℕ₁≜≠}ᶠṛ

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

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

আমি এই প্রথম সংস্করণ থেকে একটি অতিরিক্ত বাইট যোগ করার জন্য পরিবর্তন, ছিল থেকে ℕ₁, আউটপুট 0 (কিছু যে এখন ব্যাখ্যা করা হয়েছে) নামঞ্জুর করার জন্য।

ব্যাখ্যা

{~lℕ₁≜≠}ᶠṛ
{      }ᶠṛ  Pick a random value with these properties:
 ~l           it has length equal to the input;
   ℕ₁         it's a positive integer;
     ≜        it's a specific value (not a constraint);
      ≠       all its elements (digits in this case) are different.

মোটামুটি অদক্ষ, কারণ দোভাষী সমস্ত সম্ভাব্য মানের একটি তালিকা তৈরি করে এবং তারপরে এলোমেলোভাবে একটি বেছে নেয় (যার ᶠṛঅর্থ; ব্র্যাচলাগ এই প্রশ্নটি জিজ্ঞাসা করার সময় "একটি এলোমেলো সমাধান বেছে নেবেন না" বিকল্প ছিল)।

এখানে লেবেলাইজেশন সম্পর্কে কিছু মন্তব্য: যদি বাদ দেওয়া হয় তবে বন্ধনীগুলির মধ্যে থাকা বিভাগটি কেবলমাত্র একটি মান তৈরি করে, আমরা যে সম্পত্তিটি চাই তার সাথে সংখ্যার প্রতিনিধিত্বকারী একটি সীমাবদ্ধতা; এলোমেলো ফলাফল বাছাইয়ের ফলে আমাদের বাধা দেয় এবং দোভাষী আমাদের সীমাবদ্ধতার সাথে পূরণ করে এমন ন্যূনতম পরম মান (1, 10, 102, 1023, 10234, ইত্যাদি) প্রদান করে যা আমরা চাই না। সুস্পষ্ট লেবেলের মাধ্যমে আমাদের তালিকা তৈরি করতে বাধ্য করতে হবে।

বেশিরভাগ প্রোলোগ বাস্তবায়ন আমি দেখেছি একটি বাধার সাথে মিল রেখে এলোমেলো ফলাফল খুঁজে পেতে একটি বিল্টিন রয়েছে তবে সাধারণত অভিন্ন সম্ভাবনার সাথে নয়; ব্র্যাচ্ল্যাগের একটি ছিল না, যদিও (এই চ্যালেঞ্জের প্রতিক্রিয়ায় একটি যোগ হয়েছে, তবে অবশ্যই লুফোলের নিয়মের কারণে আমি এটি ব্যবহার করতে পারি না)। যদি এটি হয়ে থাকে, এবং যদি এই সমস্যাটির ক্ষেত্রে অভিন্ন সম্ভাবনা দেয় তবে এই প্রোগ্রামটি কেবল ~lℕ₁≠সেই বিল্টিন দ্বারা অনুসরণ করা হবে , সম্ভবত দৈর্ঘ্য 6 বাইটের জন্য।

ব্র্যাচলগ , 8 ফাইট, ফ্যাটালাইজের সহযোগিতায়

~lℕ₁≠≜ᶠṛ

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

এটি প্রতিভা নিম্ন-স্তরের কৌতুক যা প্রোলোল জিনিসগুলি যেভাবে করে তা দিয়েই বোঝা যায়, এবং গাণিতিকভাবে বর্ণনা করার সময় খুব বেশি অর্থ হয় না।

আগের মতো, ~lℕ₁≠একটি মান তৈরি করে যা একটি বাধা বর্ণনা করে ("ইনপুট সমান দৈর্ঘ্য, প্রাকৃতিক সংখ্যা, সমস্ত উপাদান আলাদা")। তারপরে ≜ᶠসীমাবদ্ধতার সাথে মিলিত সমস্ত সম্ভাব্য মান উত্পন্ন করে। এখানে বক্তব্যটি হ'ল ব্র্যাচল্যাগের মূল্যায়ন ক্রমটি উপস্থিত না হওয়া পর্যন্ত কোনও আসল পছন্দ করা হয় না , সুতরাং "সমস্ত সমাধানগুলি সন্ধান করুন" অপারেশনটি "সীমাবদ্ধতা পূরণকারী নির্দিষ্ট মান " অপারেশন ছাড়া আর কিছুই প্রয়োগ করতে হবে না । তার মানে {…}এটির সুযোগ বাছাই করার দরকার নেই , 2 বাইট সংরক্ষণ করুন।


আমি ≜₁এই চ্যালেঞ্জের কারণে এটি যুক্ত হয়েছে তা বুঝতে পেরে আমি একটি সমাধান পোস্ট করতে যাচ্ছিলাম
সম্পর্কিত নয় স্ট্রিং

8

জেলি , 9 বাইট

⁵*ṖQL$€MX

এটি অনলাইন চেষ্টা করুন! (বাস্তবায়নের অদক্ষতার কারণে টি > তে এন> 6 এ কাজ করবে না)

বা একই জিনিস বিকল্প বাস্তবায়ন:

⁵*ṖQL$ÐṀX

কিভাবে?

এটি বেশ লুক্কায়িত, এবং খুব অদক্ষ! জেলি কিছু কার্যকর জিনিস স্পষ্টভাবে করে যখন কোনও পরমাণু একটি তালিকা প্রত্যাশা করে তবে একটি পূর্ণসংখ্যা পায় (এটি নকশা দ্বারা)।
এই কোডটি এই কার্যকর অন্তর্নিহিত ক্রিয়াগুলির কয়েকটি ব্যবহার করে:

  • মোনাডিক অণু , "পপ", যখন একটি পূর্ণসংখ্যার ইনপুট দিয়ে ডাকে তখন স্পষ্টভাবে একটি পরিসীমা তৈরি করে যা থেকে পপ করা যায়, সুতরাং এন এর একটি ইনপুট প্রথমে [1, 2, ..., n] তৈরি করে , তারপর পপস দেয়, [1, 2 , ..., এন -1]

  • মোনাডিক অণু Q, "ডি-ডুপ্লিকেট" বা "অনন্য", যখন পূর্ণসংখ্যার ইনপুট দ্বারা ডাকা হয় স্পষ্টতই ডুপ্লিকেটটিকে দশমিক তালিকা তৈরি করে, তাই এন এর একটি ইনপুট যেখানে:
    n = d k-1 × 10 k-1 + d k-2 × 10 কে -2 + ... + ডি 1 × 10 + ডি 0
    প্রথমে তৈরি করে
    [d কে -1 , ডি কে -2 , ..., ডি 1 , ডি 0 ]
    এবং তারপরে অনন্য মানগুলি দেয় প্রথম আবির্ভাব.
    সুতরাং, উদাহরণস্বরূপ, n = 5835518 [5, 8, 3, 1] উপার্জন করবে ।

উপরন্তু পরমাণুসদৃশ্য পরমাণু M, "সর্বোচ্চ উপাদান ইনডেক্স", একটি তালিকা থেকে সর্বোচ্চ আইটেম ইনডেক্স ফেরৎ, এই সংরক্ষণ দুই ইনপুট সঙ্গে সমতার জন্য পরীক্ষা এবং truthy ইনডেক্স খুঁজে বের করার অনেক বেশী সুস্পষ্ট বিকল্প উপর বাইট, ⁵*ṖQL$€=⁸TXঅথবা⁵*ṖðQL⁼ð€TX

⁵*ṖQL$€MX - Main link: n                       e.g. 2
⁵         - literal 10
 *        - exponentiate: 10^n                      100
  Ṗ       - pop (make range 1 to 10^n, then pop)    [1  ,2  ,...,21   ,22 ,23   ,...,97   ,98   ,99]
     $€   - last two links as a monad for €ach:
   Q      -   unique (makes a decimal list first)   [[1],[2],...,[2,1],[2],[2,3],...,[9,7],[9,8],[9]]
    L     -   length                                [1  ,1  ,...,2    ,1  ,2    ,...,2    ,2    ,1  ]
       M  - indexes of maximal elements             [        ...,21       ,23,   ...,97   ,98       ]
          -                                         - i.e. all n-digit numbers with n-distinct digits.
        X - pick a random element from that list

সময় এবং মেমরি উভয় ক্ষেত্রেই এটি বেশ যথেষ্ট অক্ষম: প্রথমে 10 এন পূর্ণসংখ্যার একটি তালিকা তৈরি করা হয় এবং একটিকে ফেলে দেওয়া হয়, তারপরে এই প্রতিটিটির জন্য এন পূর্ণসংখ্যার একটি তালিকা তৈরি করা হয় (কিছু অভিনব 4-বিট অবজেক্ট বা এনাম নয়) is এবং তারপরে অনুলিপিযুক্ত। এই ডি-সদৃশটির সম্পূর্ণ তালিকাভিত্তিক বাস্তবায়ন রয়েছে (কোনও সেট, সাজানো-সেট, বা অভিধানগুলি হুডের নীচে জড়িত নয়, প্রতিটি সংখ্যা তালিকাতে অস্তিত্বের জন্য যাচাই করা হয় যা শেষ পর্যন্ত আউটপুট পায়)।
অফলাইন এন = 7 ~ 0.5 গিগাবাইট ব্যবহার করে এবং ~ 25 সেকেন্ড সময় নেয়, যখন এন = 8 4 জিবি ব্যবহার করে এবং minutes 5 মিনিট সময় নেয় - আমার কাছে কেবল 16 জিবি র‌্যাম থাকায় আমি এন = 9 চালানোর বিরক্ত করিনি (আমার ধারণা এটি it 45 মিনিট সময় লাগবে) )।

বিকল্প বাস্তবায়ন কেবলমাত্র ÐṀঅন্তত ফিল্টার-কিপ ন্যূনতম ব্যবহারের জন্য বিল্ট-ইন দ্রুত ব্যবহার করে (যা এখানে একই বাইট-কাউন্টের জন্য পরিচালনায় সামান্য ওভারহেড যুক্ত করে)।


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

7

জেলি , 11 বাইট

9Xœ|⁵ḶẊ¤ḣ¹Ḍ

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

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

9Xœ|⁵ḶẊ¤ḣ¹Ḍ  Main link. Argument: n

9            Set the return value to 9.
 X           Pick; pseudo-randomly select an integer from [1, ..., 9].
       ¤     Combine the three preceding links into a niladic chain.
    ⁵          Yield 10.
     Ḷ         Unlength; yield [0, ..., 9].
      Ẋ        Shuffle; pseudo-randomly select a permutation of [0, ..., 9].
  œ|         Multiset OR; prepend the selected integer to the selected permutation
             and remove the second occurrence of the first element.
         ¹   Identity; yield n.
        ḣ    Head; keep the first n digits of the permutation.
          Ḍ  Undecimal; convert from base 10 to integer.

এটি সদৃশ অপসারণ করার জন্য খুব চতুর উপায় ...
লিকি নুন

7

জাভাস্ক্রিপ্ট (ES6), 72 71 70 69 বাইট

f=(x,y="")=>x?!y.match(z=Math.random()*10|0)&&y|z?f(x-1,y+z):f(x,y):y

এটি একটি পুনরাবৃত্ত ফাংশন যা x সংখ্যার সংখ্যা নেয় । দ্বিতীয় প্যারামিটার y , শুরুতে খালি স্ট্রিংয়ে সেট করা হয়, আমরা অঙ্কের মাধ্যমে অঙ্কটি উত্পন্ন করার সাথে সাথে সংখ্যার উপর নজর রাখে।

আমরা প্রথমে একটি র্যান্ডম অঙ্ক উৎপন্ন z- র সঙ্গে Math.random()*10|0। এখন আমরা চেক করার জন্য যে চান Y ধারণ করে না z- র , এবং যে Y এবং z- র উভয় নয় 0

আমরা প্রথম শর্তটি দিয়ে গণনা করতে পারি !y.match(z)y.match(z)আয় একটি অ্যারের (সবসময় truthy) যদি Y রয়েছে z- র , নাল (falsy) অন্যথায়; !একটি বুলিয়ান এবং এটি inverts এই পরিবর্তন করে।

দ্বিতীয় শর্তটি পরীক্ষা করা হয় y|z। যদিও y একটি স্ট্রিং, জেএস সুস্পষ্টভাবে ব্যবহারের সময় এটি একটি পূর্ণসংখ্যায় রূপান্তর করে |। এটি ইতিবাচক পূর্ণসংখ্যা যদি y ইতিমধ্যে সংখ্যার, 0 থাকে । নেট ফলাফলের যে y|zআয় 0 iff Y খালি এবং z- র হয় 0 , অথবা একটি ধনাত্মক পূর্ণসংখ্যা অন্যথায়।

যদি এই দুটি শর্তই সত্য হয়, তবে আমরা অঙ্কটি y , হ্রাস x এর সাথে যুক্ত করব এবং প্রক্রিয়াটি আবার শুরু করব। অন্যথায়, আমরা কেবল শুরুতে ফিরে আসি এবং আশা করি যে পরবর্তী এলোমেলো অঙ্ক কাজ করে। যখন এক্স 0 পৌঁছে যায় , আমরা কেবল পুনরাবৃত্তি শেষ করতে খালি স্ট্রিংটি ফিরিয়ে দিই।


পূর্ববর্তী সংস্করণ:

f=(x,y)=>x?~y>>(z=Math.random()*10|0)&1&&y|z?z+f(x-1,y|1<<z):f(x,y):""

এটি একটি পুনরাবৃত্ত ফাংশন যা সংখ্যার সংখ্যা নেয়। প্রাথমিকভাবে অপরিবর্তিত দ্বিতীয় প্যারামিটার, y , হ'ল একটি 10-বিট অনুসন্ধানের টেবিল যা আমাদের কাছে ইতিমধ্যে কোন সংখ্যা রয়েছে, সহজেই একটি পূর্ণসংখ্যার হিসাবে সংরক্ষণ করা হয় stored

আমরা প্রথমে একটি র্যান্ডম অঙ্ক উৎপন্ন z- র সঙ্গে Math.random()*10|0। এখন, আমরা পরীক্ষা করতে চাই যে z এর সর্বনিম্ন উল্লেখযোগ্য বিট y সেট করা নেই, এবং y এবং z উভয়ই 0 নয়

আমরা প্রথম শর্তটি এর সাথে গণনা করতে পারি ~y>>z&1; y টি উল্টিয়ে দিন , ডানদিকে z বিটগুলি স্থানান্তর করুন এবং কেবলমাত্র সর্বনিম্ন গুরুত্বপূর্ণ বিট নিন bit এটি এখনও 1 দেয় যদি আমরা এখনও পর্যন্ত প্রশ্নে অঙ্কটি না তৈরি করেছি, বা অন্যথায় 0

দ্বিতীয় শর্তটি প্রাথমিকভাবে নির্ণয় করা বেশ কঠিন ছিল (আমি y/zপ্রথমে উত্পন্ন করার চেষ্টা করেছিলাম NaNযদি তারা উভয়ই 0 হয়) তবে এক পর্যায়ে আমি বুঝতে পারি যে কেবল y|zকৌশলটি চালিয়ে যাবে। ফল 0 উভয় iff Y এবং z- র হয় 0 ; অন্যথায় ধনাত্মক পূর্ণসংখ্যা।

যদি এই উভয় শর্তটি সত্য হয় ( ~y>>z&1&&y|z), তবে আমরা বাকী সংখ্যাটি উত্পন্ন করি এবং জেড প্রিপেন্ড করি । বাকী নম্বরটি আবার এবং x-1এবং y|1<<z( y দিয়ে , তবে সূচক z তে 1 তে সেট করে ) দিয়ে আবার নম্বরটি তৈরি করে তৈরি করা হয় । যখন এক্স 0 পৌঁছে যায় , আমরা কেবল পুনরাবৃত্তি শেষ করতে খালি স্ট্রিংটি ফিরিয়ে দিই।


5

ClojureScript, 81 79 বাইট

#(let[a(subvec(shuffle(range 10))0 %)](if(=(a 0)0)(recur %)(int(apply str a))))

এটি একটি বেনামে ফাংশন, সুতরাং আপনার এটি এটি ব্যবহার করতে হবে:

(#(...) {arguments})

যেখানে আপনি {arguments}আপনার যুক্তি দিয়ে প্রতিস্থাপন ।

আপনি এখানে কোড চেষ্টা করতে পারেন (ClojureScript REPL)।

@cliffroot2 বাইট শেভ করার জন্য ধন্যবাদ !


প্রসারিত কোড:

(defn random-digits [n]
  (let [num-vector
        (subvec
          (shuffle (range 10))
          0 n)]
    (if (= (num-vector 0) 0)
      (recur n)
      (int (apply str num-vector)))))

ব্যাখ্যা:

আমি একের পর এক লাইন দিয়ে যাচ্ছি, এর উদাহরণ ইনপুট ব্যবহার করে 8


(defn random-digits [n] ...)

খুব সহজ, এটি ফাংশনটিকে random-digitsএকটি যুক্তির সাথে সংজ্ঞায়িত করে , ডাকা হয় n। আমার উত্তরে #(...)বাইট সংরক্ষণ করতে আমি একটি বেনাম ফাংশন ( ) ব্যবহার করেছি ।


(let [num-vector ...] ...)

ভিতরে letথেকে বাইরে থেকে পরীক্ষা করা যাক :

(shuffle (range 10))

ClojureScript (এবং Clojure) সালে (range n)পাইথন এর অনুরূপ range(n): এটা আপনার কাছ থেকে যে নম্বর দিয়ে একটি তালিকা দেয় 0করার n - 1( 9এই ক্ষেত্রে)।

shuffleএকটি তালিকা নেয় এবং ভেক্টরটি (যা একটি তালিকা থেকে কিছুটা পৃথক) এর সমস্ত উপাদানগুলিকে বদলে দেয় returns সুতরাং, আমাদের উদাহরণ ব্যবহার করে আমরা এরকম কিছু পাই:

[1 0 8 3 6 7 9 2 4 5]

(subvec {see above} 0 n)

(subvec vector start end)একটি ভেক্টর (শুধুমাত্র একটি ভেক্টর) নেয় এবং একটি ভেক্টর যা সূচি থেকে সব উপাদান রয়েছে ফেরৎ startকরতে end। এই ক্ষেত্রে, আমরা 0উপাদানটিকে ত্রিম উপাদান থেকে আর্গুমেন্টে নিয়ে যাচ্ছি random-digits। যদি আমরা এটি আমাদের উদাহরণে প্রয়োগ করি তবে আমরা পাই:

[1 0 8 3 6 7 9 2]

(if (= (num-vector 0) 0)
  (recur n)
  (int (apply str num-vector)))

এই ifবিবৃতিটি প্রথম উপাদানটি num-vectorহ'ল কিনা তা পরীক্ষা করে 0

যদি এটি হয় 0, তবে আমরা যুক্তিটি nব্যবহার করে আবার ফাংশনটি কল করি recur

যদি তা না হয় 0:


(int (apply str num-vector))

(apply function list)একটি তালিকা নেয় এবং তাদের আর্গুমেন্ট হিসাবে ফাংশনে থুথু দেয়। উদাহরণ স্বরূপ:

(apply + [2 3 4])

এতে পরিণত হয়:

(+ 2 3 4)

যার সমান 9

(str items)প্রতিটি আইটেমকে itemsস্ট্রিংয়ে পরিণত করে এবং তারপরে সেগুলি সংযুক্ত করে।intযে কোনও কিছুকে পূর্ণসংখ্যায় রূপান্তর করে। সুতরাং আমরা যদি এটি আমাদের উদাহরণটিতে প্রয়োগ করি তবে আমরা পাই:

   (int (apply str [1 0 8 3 6 7 9 2]))
=> (int (str 1 0 8 3 6 7 9 2))
=> (int "10836792")
=> 10836792

যা আমাদের চূড়ান্ত উত্তর।


2
এর (int string)পরিবর্তে অনুমতি দেওয়ার জন্য ক্লোজার স্ক্রিপ্ট পছন্দ হয়েছে (Integer/parseInt string):)
ক্লিফ্রুট

1
@ ক্লিফ্রুট আমার অর্থ, আপনি ক্লোজুরে করতে পারেন read-string, তবে এটি আরও ভাল নয় ...
ক্লিষ্টিক

2 বাইট সংরক্ষণের অংশটি প্রান্তে #(let[a(subvec(shuffle(range 10))0 %)](if(=(a 0)0)(recur %)(int(apply str a))))চলে apply strযায়, 0পরিবর্তনের পরিবর্তে \0এবং ব্যবহারের subvecপরিবর্তে takeব্যবহার করে ভেক্টরটিকে একটি ফাংশন হিসাবে ব্যবহার করার অনুমতি দেয় এবং এইভাবে অপসারণ করতে পারেfirst
ক্লিফ্রুট

@ ক্লিফরুট হু, জানেন না যে সংগ্রহটি একটিতে shuffleপরিণত হয়েছিল vec। ধন্যবাদ! যদিও একটি নতুন ব্যাখ্যা লিখতে হবে ...
ক্লিষ্টিক

5

পাইথন 2, 89 81 80 বাইট

from random import*
lambda n:choice([i for i in range(10**n)if`set(`i`)`[5*n:]])

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


আমি মনে করি না যে আপনার সীমার জন্য কোনও শুরুর মান দরকার need
ডেনিস 21 এ 21

নিস! এটি এটি ধীর করে দেবে। : ডি খুব খারাপ আমি তালিকার পরিবর্তে কোনও জেনারেটর ব্যবহার করতে পারি না।
mbomb007

শুধুমাত্র 11% দ্বারা কোড গল্ফের জন্য একটি বালতিতে ফেলে দিন।
ডেনিস

হ্যাঁ, আমার অবশ্যই ব্যবহার করা উচিত, আমি 99**nনিশ্চিত হয়েছি যে আমি সেগুলি পেয়েছি। : ডি
mbomb007

আমি এটিও এইভাবে করার দিকে চেয়েছিলাম তবে ব্যবহার করে 80 পেয়েছি if`set(`i`)`[5*n:]]
জোনাথন অ্যালান

5

আর, 45 বাইট

k=0
i=scan()
while(!k[1])k=sample(0:9)[1:i]
k

আমি মনে করি যে আপনি এটি সেট করতে পারেন k=0যেহেতু এটি দৈর্ঘ্যের একটি অন্তর্নিহিত ভেক্টর, এবং আপনি স্টিডিন থেকে একটি সংখ্যা হিসাবে ইনপুট নিতে i = স্ক্যান () ব্যবহার করতে পারেন। আমি এও নিশ্চিত নই যে অঙ্কগুলির তালিকা একটি "সঠিক" জমা দেওয়া, তবে আমি বিচারক নই।
জিউসেপে

@ জিউজ্পে ইনপুটটির জন্য ধন্যবাদ, আপনার উভয় পরামর্শকে আপডেট করেছেন (উভয় পোস্টে), ধন্যবাদ।
নীল

while(!k[1])2 বাইট সংরক্ষণ করতে কাজ করবে ?
বিএলটি

@ বিএলটি আপডেট হয়েছে, ধন্যবাদ।
নীল

3

বাশ + জিএনইউ ব্যবহারগুলি, 46

seq 1e$[$1-1] 1e$1|egrep -v '(.).*\1'|shuf -n1

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

বৃহত্তর এন - এন = 7 এর প্রায় 30s এবং প্রতিটি বর্ধনের জন্য 10 গুণ বৃদ্ধি পেতে এটি দীর্ঘ সময় নেয় , তাই সম্ভবত এন = 10 এর জন্য 8-9 ঘন্টা।


প্রশ্ন অনুযায়ী, n = 10 এমনকি এমনকি কাজ করার দরকার নেই, খুব কম দ্রুত হবে
ysth

3

জাভা 7, 150 147 145 134 বাইট

String c(int n){String r="";for(int l,x;(l=r.length())<n;)if(l<1&(x=(int)(Math.random()*10))>0|(l>0&!r.contains(""+x)))r+=x;return r;}

-2 বাইটস @TheLethalCoder ধন্যবাদ

(পুরানো) ব্যাখ্যা:

String c(int n){                           // Method with integer parameter and String return-type
  String r="";                             //  Result-String
  for(int l=0,x;l<n;l=r.length()){         //  Loop until the length of the result-String is equal to the parameter integer
    x=new java.util.Random().nextInt(10);  //   Random digit
    if((l<1&x>0)                           //   If the length is zero and the random digit is not zero
       |(l>0&!r.contains(""+x)))           //     or the length is at least 1, and the result-String does not contain this random digit yet
      r+=x;                                //    Append the random digit to the result-String
  }                                        //  End of for-loop
  return r;                                //  Return result-String
}                                          // End of method

পরীক্ষার কোড:

এখানে চেষ্টা করুন।

class M{
  String c(int n){String r="";for(int l,x;(l=r.length())<n;)if(l<1&(x=(int)(Math.random()*10))>0|(l>0&!r.contains(""+x)))r+=x;return r;}

  public static void main(String[] a){
    M m = new M();
    System.out.println(m.c(4));
    System.out.println(m.c(10));
  }
}

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

7194
8672953041

আপনি এখানে ল্যাম্বডা এক্সপ্রেশন ব্যবহার করতে পারবেন না ? অর্থাৎ n->...বা জাভা 8+?
TheLethalCoder

1
আমি যে উত্তরটি সবেমাত্র আমার উত্তরে ব্যবহার করেছি তাও আপনি ধার নিতে পারেন, তুলনা চেকের দৈর্ঘ্য নির্ধারণ করুন for(int l,x;(l=r.length())<n;)এবং আপনার একটি বাইট সংরক্ষণ করা উচিত।
TheLethalCoder

1
@ লেথলকোডার আহ অবশ্যই, ধন্যবাদ। দুর্দান্ত টিম ওয়ার্ক! ;) এবং হ্যাঁ, n->...জাভা ৮. ব্যক্তিগতভাবে আমি জাভা in-তে কোডগল্ফকে পছন্দ করি, যদিও ৮ টি সর্বদা সংক্ষিপ্ত হয়।
কেভিন ক্রুইজসেন

2

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

{(->{+[~] (^10).pick($_)}...*>9 x$_-1).tail}

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

সম্প্রসারিত:

{  # bare block with implicit parameter 「$_」
  (

    ->{  # pointy block lambda with no parameters

      +                # turn the following into a numeric
      [~]              # concatenate the following

        (^10).pick($_) # grab $_ digits at random from 0..9
    }

    ...                # keep doing that until

    * > 9 x $_-1       # one of them is big enough

  ).tail # return the last one (only valid one)
}

2

পিএইচপি, 67 বাইট

অনলাইন সংস্করণ

সমস্ত সংস্করণ 0-9 থেকে অঙ্কগুলি পরিবর্তন করে

for($a=range(0,9);!$a[0];)shuffle($a);for(;$i<$argn;)echo$a[+$i++];

71 বাইট

for($s="0123456789";!$s[0];)$s=str_shuffle($s);echo substr($s,0,$argn);

73 বাইট

for($a=range(0,9);!$a[0];)shuffle($a);echo join(array_slice($a,0,$argn));

2

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

`4Y2GZr1)48=]8M

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

ব্যাখ্যা

`        % Do...while
  4Y2    %   Push predefined literal '0123456789'
  G      %   Push input n
  Zr     %   Random sample of n unique characters from that string
  1)     %   Pick the first
  48=    %   Is it 48? This is the loop condition
]        % End. If top of the stack evaluates to true: next iteration
8M       % Push the latest random sample. Implicitly display

2

জেলি , 12 বাইট

9×!X+!Œ?’ḣƓḌ

বর্তমানে আমার অন্য জেলি উত্তর পিছনে একটি বাইট, কিন্তু আমি সত্যিই এটি পছন্দ করি।

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

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

9×!X+!Œ?’ḣƓḌ  Main link. No arguments.

9             Set the argument and the return value to 9.
  !           Yield 9!
 ×            Compute 9 × 9!.
   X          Pick; pseudo-randomly select an integer j from [1, ..., 9 × 9!].
     !        Yield 9!
    +         Compute k := j + 9!.
              The result will belong to [9! + 1, 10!].
      Œ?      Get the permutation P of R := [1, ..., r], with minimal r, such that
              P is the lexicographically k-th permutation of R.
              Since k belongs to [9! + 1, 10!], r = 10 and this generates a per-
              mutation between [2,1,3,4,5,6,7,8,9,10] and [10,9,8,7,6,5,4,3,2,1].
        ’     Subtract 1 from all integers in P.
          Ɠ   Read an integer n from STDIN and yield it.
         ḣ    Head; keep the first n digits of the permutation.
           Ḍ  Undecimal; convert from base 10 to integer.

2

এপিএল (ডায়ালগ) , 27 19 17 বাইট

প্রয়োজন ⎕IO←0অনেক সিস্টেমে পূর্বনির্ধারিত।

10⊥⊢↑{?⍨10}⍣{×⊃⍺}

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

বৈধ হওয়া পর্যন্ত অঙ্কগুলি পরিবর্তন করুন:

10⊥ বেস -10 ডিজিট থেকে নিয়মিত সংখ্যায় ডিকোড করুন,

 এন

 প্রথম উপাদান

{... }⍣{... } ফাংশন পুনরায় ...
?⍨10 প্রথম দশটা ধনাত্মক পূর্ণসংখ্যা এলোমেলো
পর্যন্ত ...
⊃⍺ শেষ চেষ্টা প্রথম অঙ্ক
× ইতিবাচক


1

পাইথন 2 , 100 93 92 90 বাইট

2 বাইট ছাঁটাই করার জন্য @ mbomb007 ধন্যবাদ

from random import*
def f(n):k=randint(10**~-n,10**n-1);return(n==len(set(`k`)))*k or f(n)

কোনওটি অনন্য অঙ্ক সহ না পাওয়া পর্যন্ত প্রয়োজনীয় সংখ্যার চেষ্টা করে। আমি বাজি ধরব এটি করার অনেক বেশি পরিষ্কার উপায় আছে, তবে কারও মনেই আসে না।



1

পাইথ , 11 বাইট

jk<{+OS9.ST
jk<{+OS9.STQ implicit Q

       9     9
      S      [1,2,3,4,5,6,7,8,9]
     O       random element

          T  10
        .S   random permutation of [0,1,2,3,4,5,6,7,8,9]

    +        add the results from the previous two paragraphs together
   {         deduplicate
  <        Q first (input) elements
jk           join by empty string

ডেনিসের উত্তরের মতো একই অ্যালগরিদম ব্যবহার করে ।

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


1

পার্ল, 48 বাইট

1until$_=1+int rand 10**$n-1,/.{$n}/&&!/(.).*\1/

ব্যাখ্যা:

বার বার 1 থেকে 10 ** * n-1 পর্যন্ত এলোমেলো পূর্ণসংখ্যার উত্পন্ন করুন, যথাযথ দৈর্ঘ্যের একটি না হওয়া পর্যন্ত তাদের প্রত্যাখ্যান করুন (সুতরাং কমপক্ষে 10 ** ($ n-1)) কোনও পুনরাবৃত্ত সংখ্যা ছাড়াই।


1

ব্যাচ, 156 বাইট

@set/af=9,r=x=0
@for /l %%i in (1,1,%1)do @call:c
@echo %r%
@exit/b
:c
@set/a"d=9-%random%%%f,e=x>>d&1
@if %e%==1 goto c
@set/a"r=r*10+d,f=10,x|=1<<d

xব্যবহৃত অঙ্কগুলির একটি বিটমাস্ক বজায় রাখে। fউপলব্ধ সংখ্যার (9 থেকে নিচে গণনা) নির্দেশ করে। অব্যবহৃত অঙ্ক না পাওয়া পর্যন্ত এলোমেলো অঙ্কগুলি তৈরি করা হয়। n=10165 বাইট জন্য সমর্থন করা যেতে পারে:

@set/af=9,r=x=0
@for /l %%i in (1,1,%1)do @call:c
@echo %r:~1%
@exit/b
:c
@set/a"d=9-%random%%%f,e=x>>d&1
@if %e%==1 goto c
@set r=%r%%d%
@set/a"f=10,x|=1<<d

( rঅতিরিক্ত গতিযুক্ত শূন্য রয়েছে কারণ এটি গল্ফায়ার হয় way) 165 বাইটের পূর্ববর্তী পদ্ধতির ক্ষেত্রে প্রথম অঙ্কটি বিশেষভাবে চিহ্নিত হয়েছিল এবং এটির সাথে কাজও হয়েছিল n=10(সংখ্যার সংস্করণটি আসলে 166 বাইট নিয়েছিল!):

@set/ar=%random%%%9+1,x=0
@for /l %%i in (2,1,%1)do @set/a"x|=1<<d"&call:c
@echo %r%
@exit/b
:c
@set/a"d=%random%%%10,e=x>>d&1
@if %e%==1 goto c
@set r=%r%%d%

১ 170০ বাইটের আসল পদ্ধতির জন্যও এটি কাজ করেছিল n=10:

@set/ar=%random%%%9+1
@for /l %%i in (2,1,%1)do @call:c
@echo %r%
@exit/b
:c
@set/ad=%random%%%10
@call set s=%%r:%d%=%%
@if not "%s%"=="%r%" goto c
@set r=%r%%d%

সদৃশ অঙ্কগুলি সনাক্ত করতে স্ট্রিং ম্যানিপুলেশন ব্যবহার করে।


1

বাশ , 66 বাইট

a=0;while [[ $a == 0* ]];do a=`shuf -i0-9 -n$1|xargs`;done;echo $a

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

সোজা ফরোয়ার্ড, শেফ ব্যবহার করুন, এক্সগার্গস লাইনগুলিতে যোগদানের জন্য ব্যবহৃত হয় এবং সংমিশ্রণটি 0 দিয়ে শুরু হওয়ার সময় চেষ্টা চালিয়ে যেতে থাকে।

অন্যান্য উত্তর থেকে 46 চর মারতে পারেননি তবে এটি দ্রুত!


1

পাইথ, 15 28 বাইট

=+YhO9VtQ#KOTI!hxYK=+YKB;jkY

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


1
পিপিসিগিতে আপনাকে স্বাগতম, এবং ব্যাট থেকে সরাসরি একটি গল্ফিং ভাষা ব্যবহার করে দুর্দান্ত কাজ :-) আমি 2 টি ছোট সমস্যা দেখছি: 1) মনে হচ্ছে দ্বিতীয় সংখ্যাটি সর্বদা 0, সুতরাং আমি মনে করি আপনি পরিবর্তন ^TttQকরতে চান ^TtQ(-1 বাইট, বোনাস!). 2) আউটপুটে সমস্ত ডিজিট অবশ্যই অনন্য হওয়া উচিত, সুতরাং আপনাকে এটি কোনওরকম ঘটতে বাধ্য করতে হবে।
ইটিএইচ প্রডাকশনগুলি

নিবন্ধন করুন যে ইশারা জন্য ধন্যবাদ। আমি এটা ঠিক করেছি।
মারিয়া

1

সি #, 127 132 128 126 125 বাইট

n=>{var s="";for(int l,r;(l=s.Length)<n;)if((l<1&(r=new System.Random().Next(10))>0)|(l>0&!s.Contains(r+"")))s+=r;return s;};

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

থেকে ধারণা ধার @ KevinCruijssen এর উত্তর র্যান্ডম ইনিশিয়ালাইজ, r, ইনif বিবৃতি 2 বাইট সংরক্ষণ করুন।

খুব নিশ্চিত যে এটি আরও গল্ফ করা যেতে পারে তবে এই মুহূর্তে আমার কাছে সময় নেই।


একটি whileলুপ ব্যবহার করে পুরানো সংস্করণ :

n=>{var s="";while(s.Length<n){int r=new System.Random().Next(10);if(s.Length<1&r>0)s+=r;else if(!s.Contains(r+""))s+=r;}return s;};

আমি এটি সঠিক মনে করি না। আসুন প্রথম র্যান্ডম পূর্ণসংখ্যাটি বলে নেওয়া যাক 0, এটি প্রথমে চেষ্টা করবে if(s.Length<1&r>0)যা কোন মিথ্যা, তবে তা এটিই করবে if(!s.Contains(r+""))যা সত্য এবং এখনও প্রথম অঙ্ক হিসাবে যুক্ত "0"হবে s
কেভিন ক্রুইজসেন

@ কেভিন ক্রুইজসেন স্থির এবং আরও গল্ফ করেছেন
TheLethalCoder

1
@KevinCruijssen আহ আমি এটা কাজ করেছি, আপনার উদাহরণে আপনি শেষ করবেন না .Next(10)... একটি সঙ্গে ;। সুতরাং সেখানে আর কোনও উন্নতি হয়নি, তবে ভাল ধারণা।
TheLethalCoder

1
আমি সবে এটি পোস্ট করেছি। ওফস, আপনি ঠিক বলেছেন আমি সেমি- n=>{var s="";for(int l=0,r;l<n;l=s.Length)if((l<1&(r=new System.Random().Next(10))>0)|(l>0&!s.Contains(r+"")))r+=x;return s;};
কোলনটি

1
@ কেভিন ক্রুইজসেন আপনার মন্তব্যটি লেখার সময় আমি কেবল আপনার উত্তর থেকে ধারণা নিয়েছি! দুর্দান্ত উন্নতির জন্য ধন্যবাদ
TheLethalCoder

1

সি (জিসিসি) , 123 122 100 95 104 103 99 97 বাইট

এটি একটি আসল এলোমেলো সংখ্যা তৈরি করে

j;f(n){for(int i,k=n,s[10]={j=0};n;s[i+=i?0:k==n]=!s[i]?j+=i*pow(10,--n):1)i=rand()%10;return j;}

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

সি (জিসিসি) , 87 85 বাইট

এখানে এটি অঙ্কের একটি স্ট্রিং মুদ্রণ করা হয়।

f(n){for(int i,k=n,s[10]={0};n;s[i+=i?0:k==n]=!s[i]?--n,putchar(48+i):1)i=rand()%10;}

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


1

পিএইচপি, 65 63 বাইট

while(count(count_chars($x=rand(1,10**$argn),1))<$argn);echo$x;

এসটিডিআইএন থেকে ইনপুট নেয়; সাথে চালানো-nR

অন্তর্ভুক্ত 1এবং 10^Nঅন্তর্ভুক্ত মধ্যে এলোমেলো সংখ্যা তৈরি করুন ;
স্বতন্ত্র অক্ষরের গণনা <হ'ল পুনরাবৃত্তি করুন N


1
while(count(count_chars($x=rand(1,10**$argn),1))<$argn);echo$x;-2 বাইটস
জার্গ হালসারম্যান

0

গণিত 65 65 বাইট

0For[a=11,Max@DigitCount@a>1,a=RandomInteger[10^{#-1,#}]]+a&

এখানে একটি দ্রুত সংস্করণ তবে 9 বাইট যুক্ত করেছে:

FromDigits@Join[f=(s=RandomSample)[r=Range@9,1],s[r/.f[[1]]->0,#-1]]&

0

জাভা 9 জেশেল, 86 বাইট

n->new Random().longs(0,10).limit(n-1).reduce(new Random().nextInt(9)+1,(a,b)->a*10+b)

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

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

jshell> Function<Integer,Long> f =
   ...> n->new Random().longs(0,10).limit(n-1).reduce(new Random().nextInt(9)+1,(a,b)->a*10+b)
f ==> $Lambda$27/633070006@5702b3b1

এবং তারপর:

jshell> f.apply(6)
$26 ==> 746202

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

আমরা পূর্ণসংখ্যা থেকে লং পর্যন্ত একটি ফাংশন সংজ্ঞায়িত করি এবং 0-9 থেকে পরিসীমাটিতে এলোমেলো দীর্ঘতার একটি অসীম প্রবাহ তৈরি করি, এটি প্রথম এন -1 আইটেমের মধ্যে সীমাবদ্ধ রাখি, তারপরে এটিকে এলোমেলো ইনট দিয়ে প্রাথমিক মান হিসাবে 1-9 থেকে হ্রাস করি এবং একটি ফাংশন যা 10 দ্বারা মানকে গুণিত করে এবং প্রবাহ থেকে পরবর্তী মান যুক্ত করে।

আমি দীর্ঘকাল ব্যবহার করেছি তাই এটি প্রায় 18 ডিজিট (n = 18) পর্যন্ত কাজ করা উচিত।


0

সি, 96 93 বাইট

f(n){char d[11],i=0,r;for(;i++^10;d[i-1]=d[r=rand()%i],d[r]=47+i);*d^48?d[n]=0,puts(d):f(n);}

প্রথম অঙ্কটি শূন্য না হওয়া অবধি ফিশার-ইয়েটস শুরুতে বদল।

অভিন্ন, ধরে rand()%iনেওয়া অভিন্ন। (যেহেতু বেশিরভাগের জন্য আমি RAND_MAX/iএকটি ছোট্ট বাকী অংশ ছেড়ে চলে যাই, তাই খুব ছোট পক্ষপাত হয় RA RAND_MAX আরও বড় হওয়ার সাথে সাথে এই পক্ষপাত ছোট হয়))

এটি অনলাইনে কাজ দেখুন ।

প্রশ্নটিতে যেমন এন 2 এর সমান হয় তার জন্য এটি সঠিক সংখ্যা উত্পন্ন করে দেখুন ।


0

অ্যাক্সিয়াম, 191 বাইট

g(a:NNI):Complex INT==(a<1 or a>9=>%i;r:List NNI:=[];b:=a;repeat(a=0=>break;d:=random()$INT rem 10;a=b and d=0=>0;~member?(d,r)=>(a:=a-1;r:=cons(d,r)));reduce(+,[r.i*10^(i-1)for i in 1..#r]))

এটি সর্বশক্তিমান, পরীক্ষার ফলাফল

-- Return one number of 'a' different random digits if 0<a<10
f(a:NNI):Complex INT==
    a<1 or a>9=>%i
    r:List NNI:=[];b:=a
    repeat
       a=0=>break
       d:=random()$INT rem 10
       a=b and d=0  =>0
       ~member?(d,r)=>(a:=a-1;r:=cons(d,r))
    reduce(+,[r.i*10^(i-1)for i in 1..#r])

(4) -> [[i,g(i)] for i in 0..10]
   (4)
   [[0,%i], [1,9], [2,76], [3,135], [4,6810], [5,48675], [6,415768],
    [7,7461539], [8,98421537], [9,825046739], [10,%i]]
                                          Type: List List Complex Integer
(5) -> [[i,g(i)] for i in [3,3,3,3,3,3,3,3,3]]
   (5)
   [[3,653],[3,128],[3,254],[3,268],[3,914],[3,594],[3,276],[3,240],[3,398]]


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