পুনরাবৃত্তি ছাড়াই এলোমেলো অ্যারে


16

আমি এখানে একটি চ্যালেঞ্জের উত্তর দিচ্ছিলাম এবং এই কাজটি চ্যালেঞ্জের অংশ ছিল। আমি জাভাস্ক্রিপ্টে একটি 73 বাইট সমাধান পেয়েছি। তবে আমি মনে করি এটি কোনও সাধারণ জিনিসের জন্য খুব বেশি।

চ্যালেঞ্জ

ইনপুট দুটি পূর্ণসংখ্যা হিসাবে দেওয়া হয়েছে:

  • N প্রত্যাশিত অ্যারের দৈর্ঘ্য
  • R বিরতিটির পরিসীমা এক থেকে শুরু: 1..R নয়0..R-1

আপনার প্রোগ্রামের প্রতিটি রানের আউটপুট / দৈর্ঘ্যের একটি পৃথক অ্যারে ফাংশন N সাথে মানগুলির মধ্যে 1..Rএমনভাবে হয় যে কোনওটির বেশি একাধিকবার ঘটে না।

আপনার অবশ্যই ব্যবহার করা উচিত R-valueআপনার কোডটি ।

বিধিনিষেধ

আপনি ধরে নিতে পারেন: 2 <= N <= R

আমি সত্যিই আমার 73৩ বাইটের চেয়ে কম জাভাস্ক্রিপ্ট সমাধান দেখতে চাই।

তবে অবশ্যই এটি সকল ভাষার জন্য উন্মুক্ত!

যদি আপনার ভাষা কোনও অ্যারে ফেরত দিতে না পারে তবে আপনি সমস্ত সংখ্যা মুদ্রণ করতে পারেন;)


2
আরেকটি বিষয়: আমি মনে করি না যে আপনি চান প্রতিটি রানের সাথে তাদের আলাদা হওয়া উচিত, তবে কেবল অভিন্ন? (অন্যথায় এটি কার্যকর হয় না R=N=1) তারপরে আমি প্রস্তাব দিচ্ছি যে 0..Rবিকল্পগুলি বিভিন্ন ক্ষেত্রে হ'ল এটি অনেক ভাষায় আরও প্রাকৃতিক।
flawr

আমি প্রতিটি ক্রমানুসারে সমানভাবে সম্ভাব্য (নিখুঁত এলোমেলোতা অনুমান করে) অন্তর্ভুক্ত করার প্রস্তাব দিই, অন্যথায় আমি করতে পারিshuffle(0..N)
নাথান মেরিল

আপনি নিজের নিয়ম পরিবর্তন করার আগে আমি অ-ইউনিফর্ম র্যান্ডম মানের আমার উত্তর পোস্ট করেছি।
কনর ও'ব্রায়েন

1
আপনি একটি অভিন্ন র্যান্ডম সমাধান বলছেন, তবে new Dateঅ-অভিন্ন মান দেয় values আরও, আমি বিশ্বাস করি যে আপনি এটি গল্ফ করতে পারেন new Date%r+1;)
কনর ও'ব্রায়ান

আউটপুট অ্যারের পূর্ণসংখ্যা হওয়া দরকার? সুস্পষ্ট বলে মনে হচ্ছে, তবে আমি এটি স্পষ্টভাবে বলে দেখছি না
চার্লি উইন

উত্তর:


16

ডায়ালগ এপিএল, 1 বাইট

?

শুধু একটি বিল্টিন এখানে চেষ্টা করুন


3
এর মতো একটি উত্তরের সাথে, আমাকে আবার স্ক্রোল করে দেখতে হয়েছিল যে আপনি ওপি ছিলেন
lbstr

2
@lbstr এখন আপনি এটি উল্লেখ করেছেন, আমার পরিচয়টি ওপি'র সাথে বেশ মিল।
lirtosiast

9

জাভাস্ক্রিপ্ট (ES6), 68 66 বাইট

n=>r=>G=(s=new Set)=>s.size<n?G(s.add(Math.random()*r+1|0)):[...s]

বলা হয় F(N)(R)(), কোথায় Fফাংশন অ্যাসাইনমেন্ট, এবং N/ Rমানগুলি।

আপনি জেএসে 73 বাইটের চেয়ে কম চেয়েছিলেন;)

সম্পাদনা: @ C5H8NNaO4 সত্য যে নিয়ম মান নির্দিষ্ট না জুড়ে অভিন্ন হতে হবে মধ্যে কাজ করে দ্বারা উত্তর 1..R। দেওয়া হয়েছে, এখানে একটি সংস্করণ by৩ বাইটে কাজ করে (যাকে বলা হয় F(R)(N)):

r=>G=(n,s=[])=>n--?G((s[n]=n+1,n),s):s.sort(a=>new Date/a%1-.5)

মানুষ, এটা চিত্তাকর্ষক !! +1
সরানো হয়েছে

টুইটারে
Mwr247

7

অষ্টাভে, 22 19 9 বাইট

@randperm

randperm(r,n)অনুরোধ করা ঠিক কি করে। মনে রাখবেন যে মতলব এ (কমপক্ষে পুরানো সংস্করণগুলিতে নয়) কাজ করে না।


1
@(n,r)randperm(r,n)
লুইস মেন্ডো

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

ওহ আমি ব্যবহার করতে পারি @randperm=)
flawr

5

টিআই -৪৪ বেসিক ওএস ৪.০, ১২ বাইট

Prompt N,R:randIntNoRep(1,R,N

টিআই -৪৪ + সিএসই (২০১৩) এবং সিই (২০১৫) মূলত টিআই -৪৪+ হিসাবে একই সীমিত বেসিক উপভাষা, তবে কয়েকটি নতুন বৈশিষ্ট্য রয়েছে। এর মধ্যে একটি হ'ল র্যান্ডইন্টনোরপের তৃতীয় যুক্তি।


1
সত্যি বলতে কী, এ ধরণের নির্বোধ যে তারা প্রথম থেকেই সেই বৈশিষ্ট্যটি অন্তর্ভুক্ত করেনি।
সুপারজেডি

এই চ্যালেঞ্জটি দেখে আমি তত্ক্ষণাত্ টিআই-বেসিক ভেবেছিলাম :)
টিমটেক

5

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

Zr

ইনপুটগুলি হ'ল: প্রথমে R, তারপর N

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

ব্যাখ্যা

ফাংশনটি Zrদুটি ইনপুট নেয় (এই ক্ষেত্রে স্পষ্টতই) এবং প্রতিস্থাপন ছাড়াই এলোমেলো নমুনা করে। প্রথম ইনপুট,, Rজনসংখ্যা যে নির্দিষ্ট করে [1,2,...,R]; এবং দ্বিতীয় ইনপুট, Nজনসংখ্যা থেকে নেওয়া নমুনার সংখ্যা নির্দেশ করে।


4

জে, 4 3 বাইট

একটি বাইট জগারবকে ধন্যবাদ রক্ষা করেছে! ( চারটি ক্রস করা এখনও নিয়মিত চারটি: ডি )

1+?

N (1+?) Rযেমন কল , যেমন 3 (1+?) 10। এটি "রোল" অপারেটরটি ব্যবহার করে এবং নীচে বাদে বর্ণিত বর্ণিত হুবহু কাজ করে 0...n-1। যদি আমাদের এটি করার অনুমতি দেওয়া হয় তবে উত্তরটি হবে 1 বাইট,

?


@ টাক আহ, গটকাঃ
ও'ব্রায়ান

4

পাইথ, 6 বাইট

<.SSQE

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

ব্যাপ্তি প্রথম লাইনে এবং দ্বিতীয়টি দৈর্ঘ্যে আসে।

ব্যাখ্যা

<। এসএসকিউ # কিউ = ব্যাপ্তি, ই = দৈর্ঘ্য

   এসকিউ # এর পরিসীমা 1 তৈরি করে ... কিউ
 .S # তালিকাটি পরিবর্তন করুন
<E # প্রথম E উপাদান গ্রহণ করুন

অ-প্রতিযোগিতামূলক 5-বাইট সংস্করণ

পাইথের সর্বশেষতম সংযোজন Qপ্রয়োজন হলে প্রোগ্রামের শেষে অন্তর্নিহিত সংযুক্ত করে । আমরা ইনপুট ফর্ম্যাটটিকে উল্টিয়ে এখানে এটি ব্যবহার করতে পারি, সুতরাং দৈর্ঘ্যটি প্রথমে এবং তারপরে পরিসীমাটি আসে।

<.SSE

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

এখানে Eএমন ব্যাপ্তি রয়েছে যা আমরা 1-ভিত্তিক তালিকার সাথে Sএটি পরিবর্তন করব .Sএবং এটি দিয়ে প্রথম Qউপাদানগুলিকে নিয়ে যাই <<একটি পূর্ণসংখ্যা প্রত্যাশা করে যা স্পষ্টভাবে a এর সাথে যুক্ত হয় Q


4

রেং v.2.1, 140 103 98 97 বাইট

এটি আগের সংস্করণগুলিতেও কাজ করা উচিত।

v      v      $/$'l#y0#z>(:)):(ez+#z zt>a$;!
>i#ci#x>cu1+lxetv    j21\!q   yy#-1y($/^
>n?~v
^oW <

আপনি এটি এখানে চেষ্টা করতে পারেন! ইনপুট maximum lengthযেমন 10 3,।

আমি এ নিয়ে খুব গর্বিত, আপনি জানেন না। যদি কেউ জাভা উত্তর দিয়ে আমাকে মারধর করে তবে তা আমার দিনকে পরিণত করবে। যদি আমি একটি জাভা উত্তর মারি, আমার দিন হিসাবে তৈরি বিবেচনা।

আমি আরও সুস্থ হয়ে উঠলে আরও পরে এটি ব্যাখ্যা করব। সাধারণত, যদিও:

v         v      $/$r$
>i#bbi1+#x>:u1+lxet

এটি এলোমেলো সংখ্যা উত্পন্ন করে। অন্য অংশটি নকল আছে কিনা তা পরীক্ষা করে এবং যদি থাকে তবে প্রক্রিয়াটি পুনরাবৃত্তি হয়। অন্যথায়, ফলাফলগুলি মুদ্রিত হয়, ফাঁকা ফাঁকে ফলাফলগুলিতে যোগদান করা হয়।

এখানে কিছু উদাহরন:

দীর্ঘ জিআইএফ


3

সিজেম, 8 বাইট

{,:)mr<}

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

এটি একটি নামবিহীন ব্লক যা স্ট্যাকের শীর্ষে এবং নীচে দৈর্ঘ্যটি আশা করে এবং স্ট্যাকের উপরে একটি তালিকা ছেড়ে দেয়।

ব্যাখ্যা

, ই # 0-ভিত্তিক ব্যাপ্তি
:) এবং # তালিকার প্রতিটি উপাদানকে ইঙ্ক্রেমেন্ট তাই এটির 1-ভিত্তিক
মিঃ ই # তালিকাটি পরিবর্তন করুন
<ই # প্রথম এন উপাদানগুলি নিন

এটি একটি হ্যাপি প্রোগ্রাম :)
কনর ও'ব্রায়ান

1
@ সিও'বাʀɪᴇɴ আমি আরও খুশি হব যদি সিজোমের 1-ভিত্তিক রেঞ্জগুলির জন্য একটি অন্তর্নির্মিতা থাকে, সুতরাং আমার এই বাঁধাগ্রস্ত হাসির প্রয়োজন হবে না: পি
ডেনকার

2

কমন লিস্প, 90

52 শুধুমাত্র অভিব্যক্তির জন্য

(use-package :alexandria)(lambda(R N)(coerce(subseq(shuffle(iota R :start 1))0 N)'vector))

Ungolfed

;; Well known library
(use-package :alexandria)

(lambda(R N)
  (coerce                   ; make a vector from a list 
    (subseq                 ; take the sublist from 0 to N
      (shuffle              ; shuffle a list
        (iota R :start 1))  ; build a list from 1 to R
    0 N)
    'vector))

অন্যান্য উত্তরের মতো, যদি আমি ব্যবহার-প্যাকেজ এবং ল্যাম্বদা গণনা করি না , তবে বাকী প্রকাশটি(coerce(subseq(shuffle(iota R :start 1))0 N)'vector) 52 বাইটের জন্য।


2

রুবি, 27 23 বাইট

বেনামে ফাংশন, যুক্তিযুক্ত সংক্ষিপ্ত এবং মিষ্টি।

@ Manatwork থেকে -4 বাইট

->n,r{[*1..r].sample n}

->n,r{[*1..r].sample n}দয়া করে ইনলাইন কোড মার্কআপের পরিবর্তে কোড ব্লক মার্কআপ ব্যবহার করুন, সুতরাং কোড গল্ফ ব্যবহারকারীস্ক্রিপ্ট এনহান্সমেন্ট প্যাকের মতো স্ক্রিপ্টগুলি এর পাশের কোডের আকারটি সন্নিবেশ করতে পারে।
manatwork

ঠিক আছে, এখনই ঠিক হয়ে গেছে।
মান কালি


2

বাশ + কোর্টিলস, 16

আমি মনে করি এটি স্ব-ব্যাখ্যামূলক:

seq $2|shuf -n$1

ইনপুট Nএবং Rকমান্ড-লাইন পরামিতি হিসাবে।

অথবা @rici একই স্কোর হিসাবে দেখায়:

shuf -n$1 -i1-$2

Ideone।


1
বা shuf -n$1 -i1-$2(একই দৈর্ঘ্য, যদিও)।
ধনী

@rici খুব সুন্দর। খুব পরিষ্কার :)
ডিজিটাল ট্রমা

1

পাওয়ারশেল ভি 2 +, 30 বাইট

param($n,$r)1..$r|Random -c $n

ইনপুট নেয় $nএবং $r, একটি পরিসীমা তৈরি করে 1..$r, Get-Randomএকটি -Cপাইপগুলিকে একটি পরিমাণের সাথে পাইপ দেয় $nযা $nপরিসীমা থেকে অনন্য উপাদানগুলি নির্বাচন করবে । অন্তর্নির্মিত অ্যারে হিসাবে পাইপলাইনে আউটপুট ছেড়ে যায়।



1

ক্লোজার, 38 বাইট

#(take %1(shuffle(map inc(range %2))))

একটি বেনামী ফাংশন এন প্রথম এবং আর দ্বিতীয় গ্রহণ।



1

পাইথন 3.5 - 54 53 বাইট:

from random import*;lambda a,c:sample(range(1,c+1),a)

এটি sample()পরিসরের মধ্যে এলোমেলো, অনন্য উপাদান সমন্বিত দৈর্ঘ্য "a" সহ একটি অ্যারে ফেরত দিতে এলোমেলো মডিউলের ফাংশন ব্যবহার করে 1 => c


1

ডি, ২৯ বাইট (কেবল প্রকাশ)

ধরে নিই যে std.random এবং std.range আমদানি করা হয়েছে এবং যে এন এবং আর ভেরিয়েবল হিসাবে সংজ্ঞায়িত হয়েছে, প্রোগ্রামটি একক এক্সপ্রেশনে সমাধান করা যেতে পারে:

iota(1,r).randomCover.take(n)

1

ES6, 72

r=>n=>[...Array(-~r).keys()].sort(a=>new Date/a%1-.5).filter(a=>a&&n-->0)

মধ্যে @ Mwr247 এর মতো উত্তর , আপনি এটি দিয়ে কল করতে পারেন F(R)(N), Fফাংশন অভিব্যক্তি হচ্ছে


0

ম্যাথক্যাড, 67 "বাইট"

1. আরআর মধ্যে ধারাবাহিক পূর্ণসংখ্যার একটি কলাম ভেক্টর তৈরি করে, এটিকে (ইউনিফর্মের) এলোমেলো সংখ্যার দৈর্ঘ্যের কলাম ভেক্টরের সাথে যুক্ত করে, এলোমেলো সংখ্যা কলামে ফলাফল প্রাপ্ত Rx2 ম্যাট্রিক্সকে সাজায় এবং তারপরে প্রথম এন সংখ্যাগুলি বের করে পূর্ণসংখ্যার এলোমেলো কলাম।

এখানে চিত্র বর্ণনা লিখুন


আমরা পরীক্ষা করতে পারি এমন কোন জায়গা আছে কি?
কনর ও'ব্রায়েন

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

ট্রায়াল সংস্করণগুলি এখানে রয়েছে: ম্যাটক্যাড 15 - ptc.com/engineering-math-software/mathcad/free-Trial ; ম্যাথক্যাড প্রাইম ৩.১ - ptc.com/engineering-math-software/mathcad/free-download
স্টুয়ার্ট ব্রুফ

এবং আপনি এই বাইটগুলি কীভাবে গণনা করবেন?
Rɪᴋᴇʀ

ব্যবহারকারীর ইনপুট দৃষ্টিকোণ থেকে এটি দেখে এবং একটি ম্যাথক্যাড ইনপুট অপারেশন (সাধারণত কীবোর্ড, কেবিডি শর্টকাট না হলে সরঞ্জামদণ্ডে মাউস-ক্লিক করুন) একটি অক্ষরে এবং এটিকে বাইট হিসাবে ব্যাখ্যা করে। অন্যান্য ভেরিয়েবল / ফাংশনের নাম যেমন চর-বাই-চারে টাইপ করা হয় তেমন সিএসোর্ট = 5 বাইট। অপারেটরটি হ'ল একটি বিশেষ নির্মাণ যা 11 টি অক্ষর (3 ফাঁকা "স্থানধারক" এবং 3 টি ফাঁকা স্থান সহ) দখল করে তবে ctl-shft- # দ্বারা প্রবেশ করে, সুতরাং = 1 বাইট (কিছু ভাষায় টোকেনের সমান)। টাইপিং '(উদ্ধৃতি) সুষম বন্ধনী তৈরি করে (সাধারণত) তাই 1 বাইট হিসাবে গণনা করা হয়। ইনডেক্সিং ভি = 3 বাইট (টাইপ ভি [কে)।
স্টুয়ার্ট ব্রুফ

0

পাইথন, 56 (স্পষ্ট উপায়)

lambda N,R:__import__('random').sample(range(1,R+1),k=N)

from random import*;lambda N,R:sample(range(1,R+1),k=N)একটি বাইট দ্বারা সংক্ষিপ্ত
মেগো

হু, আমি বিবেচনা করেছিলাম from random import*, অবশ্যই গণনা ভুল করে ফেলতে হবে।
shooqie

0

পার্ল 5, 51 43 বাইট

sub{@a=1..pop;map{splice@a,rand@a,1}1..pop}

খুব সোজা অনামী সাব যা 1 থেকে আর তে একটি অ্যারে তৈরি করে এবং তারপরে এটি থেকে N এলোমেলো উপাদানগুলি স্প্লাইস করে। সাথে কল ->(N, R)


0

টিআই -৪৪ বেসিক, 21 বাইট

Prompt R,N:randIntNoRep(1,R→A:N→dim(ʟA:ʟA

কেউ আর ব্যবহার করতে পারে না Ansসাম্প্রতিক মেটা পোস্ট অনুযায়ী ইনপুট হিসাবে করা ।
কনর ও ব্রায়ান

@ সিওওবি ... না কেন?
সুপারজেডি ২২৪

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