বোগোসর্ট প্রয়োগ করুন


29

সুদোকু সমাধান করা কি খুব শক্ত? এমনকি নিষ্ঠুর বল সংস্করণ? এখানে একটি কোডিং অনুশীলন যা কিছুটা সহজ। আমি আশা করি. :-P

বোগোসর্ট বাস্তবায়নের জন্য সবচেয়ে সংক্ষিপ্ত ফাংশন লিখুন। নির্দিষ্টভাবে, আপনার ফাংশনটি হওয়া উচিত:

  • ইনপুট হিসাবে একটি অ্যারে (বা আপনার ভাষার সমতুল্য) নিন
  • এর উপাদানগুলি সাজানো ক্রমে কিনা তা পরীক্ষা করুন; যদি তা হয় তবে অ্যারেটি ফিরিয়ে দিন
  • যদি তা না হয় তবে উপাদানগুলি বদল করুন এবং আবার শুরু করুন

স্বল্পতম এন্ট্রি জিতল। টাইয়ের ক্ষেত্রে, একটি ফাংশন যা একটি কাস্টম তুলনামূলক (এবং / অথবা সিউডোর্যান্ডম নম্বর জেনারেটর) সমর্থন করে। পূর্ববর্তী জমা দেওয়ার পক্ষে অন্য যে কোনও সম্পর্কগুলি সমাধান করা হয়।


স্পষ্টতা: আপনি যে কোনও উপাদান ধরণের পছন্দ করতে পারেন, যতক্ষণ না তাদের অর্ডার দেওয়ার কোনও উপায় রয়েছে অবশ্যই। এছাড়াও, এলোমেলোভাবে অভিন্ন হতে হবে; এগুলির কোনওটিই "আমি এটিকে সবেচর করব এবং এটিকে" শিফल्ड "বলব। :-)


উপাদান কী কী? ইন বা স্ট্রিং?
আলেকজান্দ্রু

@ আলেকজান্দ্রু: হয় ভাল আছে। আপনি পছন্দ করুন.
ক্রিস জেস্টার-ইয়ং

একটি কাস্টম তুলক যুক্ত করার ফলে কোডের দৈর্ঘ্য বাড়বে তাই কোনও বিজয়ী এন্ট্রিতে একটি কাস্টম তুলনাকারী থাকবে না। আমি মনে করি টাই ভাঙা মানে না।
আলেকজান্দ্রু

1
এটি সম্ভব যে সিউডো এলোমেলো জেনারেটর ব্যবহার করার সময় এই অ্যালগরিদম ব্যর্থ হতে পারে। উদাহরণস্বরূপ, যখন তালিকার দৈর্ঘ্য 2000 বলতে ছাড়িয়ে যায়, 2000 থাকে! তালিকার জন্য রাজ্যগুলি যা prng এর ইন্টিরিয়াল রাজ্যের সংখ্যা অতিক্রম করতে পারে।
gnibbler

2
হ্যাঁ, উইকিপিডিয়া থেকে প্রাসঙ্গিক উক্তি "তবে, যদি একটি ছদ্মবেশী সংখ্যা জেনারেটর একটি এলোমেলো উত্সের জায়গায় ব্যবহার করা হয় তবে এটি কখনও শেষ হতে পারে না, যেহেতু এই দীর্ঘমেয়াদি চক্র আচরণ প্রদর্শন করে।"
gnibbler

উত্তর:


8

এপিএল (ডায়ালগ), 20

{⍵≡⍵[⍋⍵]:⍵⋄∇⍵[?⍨⍴⍵]}

ব্যাখ্যা

(ডানদিকে) যুক্তি
⍵≡⍵[⍋⍵]: বাছাই করা হয়েছে কিনা তা নিজের সমান
:⍵: যদি হ্যাঁ, তবে ফিরে
∇⍵[?⍨⍴⍵]আসুন: অন্যথায়, এলোমেলো ক্রমে 1 থেকে ⍴⍵(দৈর্ঘ্যের ) অ্যারে তৈরি করুন, সেই ( ⍵[...]) অনুসারে পুনঃক্রম করুন এবং এতে ফাংশনটি প্রয়োগ করুন ( )


হঠাৎ করে এই সমস্যাটি আবার দেখা হচ্ছে এবং ...

এপিএল (ডায়ালগ), ১৯

{∧/2≤/⍵:⍵⋄∇⍵[?⍨⍴⍵]}

কেবলমাত্র চেকটিতে একটি অ্যারে বাছাই করার বিষয়ে চিন্তা করা এটিকে এক ধরণের অর্থহীন করে তোলে (বোগোসোর্টটি অর্থবহ তা না বলে), আরও সঠিক বাস্তবায়ন হবে ∧/2≤/⍵এবং এটি চরের গণনা কমিয়ে আনতে ঘটবে।


15

পার্ল 6: 23 অক্ষর

@s.=pick(*)until[<=] @s

1
এই পার্ল একটি ফাংশন? দেখতে সুন্দর
লাগছে

1
যদি আপনি না জানেন [<=]তবে তালিকাটি বাছাই করা হয়েছে কিনা তা পরীক্ষা করে: [<=] (1, 2, 3,) == (1 <= 2 <= 3) == (1 <= 2) and (2 <= 3)এবং .pick(n)তালিকা থেকে এন এলোমেলো উপাদান বেছে নেয় এবং .pick(*)পার্লকে সমস্ত উপাদান বাছাই করতে দেয়। use.perl.org/~masak/j Journal
মিং-টাং

এই পার্ল 6. আমি কখনোই থাকেন দেখা হওয়া আবশ্যক pickআগে ব্যবহৃত, একা থাকতে দাও [<=]। ডকুমেন্টেশনে সেগুলি কোথায়?
মিঃ লালমা

@ গিগাওয়াট এটি পার্ল 6 (পার্ল 5 নয়)। []অপারেটর হ্রাস করা হয় যা বর্গাকার বন্ধনীগুলির মধ্যে অপারেটর নেয়। উদাহরণস্বরূপ, [<=] 1, 2, 3হ'ল 1 <= 2 <= 3(এবং হ্যাঁ, আপনি পার্ল 6-তে এরকম ব্যাপ্তি করেন)। এই ক্ষেত্রে, এটি উপাদানগুলি ক্রমযুক্ত কিনা তা নির্ধারণ করতে ব্যবহৃত হয়। .pick(*)পদ্ধতি তালিকাটি বদল করে ( তালিকা থেকে উপাদানগুলিকে pick(N)বাছাই Nকরে)। .=পদ্ধতি কল, এবং পরিবর্তনশীল যাও ফলাফল নির্ধারিত। ডকুমেন্টেশন হিসাবে - ভাল, এখন জন্য শুধুমাত্র পার্ল 6 নির্দিষ্টকরণ বিদ্যমান - feather.perl6.nl/syn , কিন্তু এটি বিদ্যমান।
কনরাড বোরোস্কি

7

এপিএল (22)

{(⍳X←⍴⍵)≡⍋⍵:⍵⋄∇⍵[X?X]}

ব্যবহার:

    {(⍳X←⍴⍵)≡⍋⍵:⍵⋄∇⍵[X?X]} 3 2 1
1 2 3

ব্যাখ্যা:

  • ⍋⍵: সাজানো ক্রমে আইটেমের সূচকগুলি ফেরত ⍋30 10 20দেয় , তাই দেয়2 1 3
  • (⍳X←⍴⍵)≡⍋⍵:⍵এক্স ইনপুট তালিকার দৈর্ঘ্য সঞ্চয় করুন তাহলে পরিসীমা [1..X]সাজানো সূচক অর্ডার সমান তালিকা অনুসারে বাছাই করা হয়, তাই এটি ফিরে।
  • ⋄∇⍵[X?X]: যদি এটি না হয় তবে এলোমেলো অ্যারে দিয়ে পুনরাবৃত্তি করুন।

7

রুবি - 33 টি অক্ষর

g=->l{l.shuffle!!=l.sort ?redo:l}

1 চর কম:g=proc{|l|0until l.sort==l.shuffle!}
এশেলি

@ শ্যাসি, আপনার সংস্করণটি কাজ করে না। আমার সংস্করণ (5 টি কম কম) f=->l{l.sort!=l.shuffle!?redo:l}(রুবি 1.9)
হাউলেথ

কেউ দয়া করে আমাকে ব্যাখ্যা করতে পারেন কেন একটি ক্লাসিক পদ্ধতিতে না redoদিয়ে procতবে কাজ করে def...end? আমি ভেবেছি redoশুধু লুপ নিয়ে কাজ করে?
প্যাট্রিক অসিটি

1
কিছু মনে করবেন না, আমি 'রুবি প্রোগ্রামিং ল্যাঙ্গুয়েজ' বইয়ে কিছু পেয়েছি: " redo[…] স্থানান্তর নিয়ন্ত্রণটি প্র্যাক বা ল্যাম্বদা শুরুতে ফিরে আসে"। এটা সহজভাবে যে উপায়।
প্যাট্রিক অসিটি

6

গণিত , 40 37

NestWhile[RandomSample,#,Sort@#!=#&]&

সাদা স্থান সহ:

NestWhile[RandomSample, #, Sort@# != # &] &

আপনি যদি ত্রুটিগুলি উপেক্ষা করেন তবে আপনি তিনটি বাইট সংরক্ষণ করতে পারবেন#//.l_/;Sort@l!=l:>RandomSample@l&
মার্টিন এেন্ডার

ম্যাথমকায় 13 শ বাইটস।
মাইকেল স্টার্ন

5

জে - 34 27

f=:({~?~@#)^:(1-(-:/:~))^:_

উদাহরণ:

f 5 4 1 3 2
1 2 3 4 5

f 'hello'
ehllo

? {~ ~ @ # অংশ ইনপুট shuffles:

({~ ?~@#) 1 9 8 4
4 8 9 1
({~ ?~@#) 'abcd'
bdca

3

পাইথন 61

জায়গায় সাজানো।

import random
def f(l):
 while l!=sorted(l):random.shuffle(l)

আপনার ফাংশন সাফল্যের অ্যারে ফিরিয়ে দেয় না।
হলভাবো

জায়গায় সাজানো। উত্তীর্ণ অ্যারে পরিবর্তন করা হয়েছে।
আলেকজান্দ্রু

প্রশ্নটি বলছে যে ফাংশনটি অ্যারে ফিরিয়ে নেবে বলে মনে করা হচ্ছে - এমনকি ফলাফলটি পাওয়ার জন্য প্রযুক্তিগতভাবে প্রয়োজনীয় না হলেও।
জোনাথন এম ডেভিস

1
from random import*একটি চর সংরক্ষণ করতে পারেন
ugoren

1
এটি সর্বদা কার্যকর না হতে পারে: (পাইথন এলোমেলো মডিউল ডকুমেন্টেশন থেকে): "নোট করুন যে ছোট লেনের জন্য (এক্স), মোট র‌্যান্ডম সংখ্যার জেনারেটরের সময়কালের চেয়ে মোট এক্স ক্রমের পরিমাণও বড়; এটি বোঝায় যে এর বেশিরভাগ অনুমতি একটি দীর্ঘ ক্রম কখনও উত্পন্ন করা যায় না। "
ম্যাট

3

পাইথন 94

from itertools import*
def f(a):return [x for x in permutations(a) if x==tuple(sorted(a))][0]

অন্যান্য অজগর উত্তর র্যান্ডম.শ্যাফেল () ব্যবহার করে। পাইথন এলোমেলো মডিউলের ডকুমেন্টেশনটিতে বলা হয়েছে:

মনে রাখবেন যে এমনকি ছোট লেন (এক্স) এর জন্য, এক্স এর মোট ক্রম সংখ্যাটি বেশিরভাগ এলোমেলো সংখ্যার জেনারেটরের সময়ের চেয়ে বড়; এটি সূচিত করে যে দীর্ঘ ক্রমের বেশিরভাগ ক্রিয়াকলাপ কখনই উত্পন্ন করা যায় না।


পরিবর্তে একটি ল্যাম্বডা করুন; আমি মনে করি এটি আরও কম হবে। এছাড়াও মনে রাখবেন যে আপনি এর return[x...বিপরীতে যেমন করতে পারেন return [x...। একই সাথে permutations(a) if- এটা হতে পারে permutations(a)if
0WJYxW9FMN

lambda a: [x for x in __import__("itertools").permutations(a) if x==tuple(sorted(a))][0]88 বাইট
1622

3

কে, 31 25

{while[~x~x@<x;x:x@(-#x)?#x];x}

{x@(-#x)?#x}/[{~x~x@<x};]

k){x@(-#x)?#x}/[{~x~x@<x};] 3 9 5 6 7 9 1
`s#1 3 5 6 7 9 9

k){x@(-#x)?#x}/[{~x~x@<x};] "ascsasd"
`s#"aacdsss"

2

পাইথন (69 টি চর)

from random import*
def f(a):
 while a>sorted(a):shuffle(a)
 return a

সংখ্যার ক্রম বাড়ানোর জন্য পূর্ণসংখ্যা সাজান। নোট করুন যে পুনরাবৃত্ত সমাধানগুলি, পছন্দ করে

from random import*;f=lambda a:a>sorted(a)and(shuffle(a)or f(a))or a

এমনকি ছোট ইনপুটগুলির জন্য স্ট্যাক ওভারফ্লোর কারণে ব্যর্থ হবে (এন> 5 বলুন), কারণ পাইথন টেল-কল অপ্টিমাইজেশন করে না।


2

কাস্টম তুলনা ছাড়াই ডি: 59 টি অক্ষর

R f(R)(R r){while(!isSorted(r))r.randomShuffle();return r;}

আরও সুস্পষ্টভাবে:

R f(R)(R r)
{
    while(!r.isSorted)
        r.randomShuffle();

    return r;
}

কাস্টম তুলনামূলক সঙ্গে ডি: 69 টি অক্ষর

R f(alias p,R)(R r){while(!isSorted!p(r))r.randomShuffle();return r;}

আরও সুস্পষ্টভাবে:

R f(alias p, R)(R r)
{
    while(!isSorted!p(r))
        r.randomShuffle();

    return r;
}

2

স্কেল 73:

def s(l:Seq[Int]):Seq[Int]=if(l==l.sorted)l else s(util.Random.shuffle l)

স্কেলায়, আমরা কম্পাইলারটি একটি টেল-কল অপ্টিমাইজেশন করেছে কিনা তা পরীক্ষা করতে পারি:

@annotation.tailrec
def s(l:Seq[Int]):Seq[Int]=if(l==l.sorted)l else s(util.Random shuffle l)

এবং হ্যাঁ, এটা হয়েছে। তবে, 100 টি মানের একটি সংক্ষিপ্ত তালিকার জন্য:

val rList = (1 to 100).map(x=>r.nextInt (500))
s(rList) 

সম্পূর্ণ হতে প্রায় 4 মাস সময় নিয়েছে। ;)


2

সি # (184 টি অক্ষর)

T[]S<T>(T[]i)where T:IComparable<T>{T l=default(T);while(!i.All(e=>{var r=e.CompareTo(l)>=0;l=e;return r;})){i=i.OrderBy(a=>Guid.NewGuid()).ToArray();l=default(T);}return i.ToArray();}

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

এটিকে আরও ভাল করার জন্য কেউ কি কোনও টিপস পেয়েছে?

সংস্করণ সম্পাদনা করুন যা কেবল ইনট (134 অক্ষর) সাজায়:

int[]S(int[]i){var l=0;while(!i.All(e=>{var r=e>=l;l=e;return r;})){i=i.OrderBy(a=>Guid.NewGuid()).ToArray();l=0;}return i.ToArray();}

2

জিএনইউ / বেস 65

b(){ IFS=$'\n';echo "$*"|sort -C&&echo "$*"||b $(shuf -e "$@");}

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

2

সি ++ 11, 150 টি অক্ষর

#include<deque>
#include<algorithm>
void B(std::deque &A){while(!std::is_sorted(A.begin(),A.end())std::random_shuffle(myvector.begin(),myvector.end());}

শুধু .. মজা করার জন্য তৈরি।


1
std :: এলোমেলো_স্যাফল একরকম নয়।
স্পেসিফিকেশনে

ঠিক আছে ... আমি জানতাম না এটি অভিন্ন ছিল না।

এটি র‌্যান্ডের উপর নির্ভর করে (যা অভিন্ন নয় - ওপেন-std.org/jtc1/sc22/wg21/docs/papers/2014/n3924.pdf দেখুন । অন্যান্য অনেক লোক অনুসরণ করছেন বলে মনে হচ্ছে না তাই মেহ আমার ধারণা এটি কোনও বড় বিষয় নয়।
STDQ

সুতরাং আমি যদি শ্রেনড (সময় (0)) ব্যবহারের মতো একটি সম্পূর্ণ র্যান্ডম ব্যবহার করি তবে তা গণনা করা যায় না?

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

2

পাইথন - 61 টি অক্ষর

রিকার্সিভ

from random import*;f=lambda l:l==sorted(l)or shuffle(l)>f(l)

আপনার ফাংশনটি সত্য বা মিথ্যা প্রদান করে, অ্যারে নয় ray
হলভাবো

2
এছাড়াও নোট করুন যে পুনরাবৃত্তির সমাধানগুলি এমনকি ছোট ইনপুটগুলির জন্য ব্যর্থতার জন্যও নিয়মিত।
হলভাবো

1
@ হালভাবো: আমি আসলে স্কিমে একটি লেজ-পুনরাবৃত্তি সমাধান লিখতে চাই, যা অবশ্যই আপনার স্ট্যাকটি হ্রাস করবে না।
ক্রিস জেস্টার-ইয়ং

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

from random import*সংক্ষিপ্ত হতে পারে।
0WJYxW9FMN

2

পাওয়ারশেল , 85 82 56 55 52 বাইট

-26 মাইজির পরামর্শের জন্য বাইটস ধন্যবাদ
-1 বাইট অ্যাডমবর্কবার্ক
-3 বাইট ধন্যবাদ ম্যাজি

for($l=$args;"$l"-ne($l|sort)){$l=$l|sort{random}}$l

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

পাওয়ারশেলে স্ট্রিং এ কাস্ট করে এবং এটির তুলনা করে তুলনামূলকভাবে কম অ্যারে তুলনা করা হয়।


2
আপনার সরান paramআরম্ভের আপনার মধ্যে for- আরম্ভের একটি বাইট সংরক্ষণ করতেfor($l=$args;
AdmBorkBork

1
সুন্দর। -neবাম অপারেটরের একটি স্কেলার প্রকারে ডান অপারেটরটিকে কাস্ট করে। সুতরাং, আপনি কয়েকটি বাইট সংরক্ষণ করতে পারেন: এটি অনলাইন চেষ্টা করুন!
mazzy

1

জাভাস্ক্রিপ্ট 291 টি অক্ষর

সর্বনিম্ন

function f(e){var t=[].concat(e).sort();t.e=function(e){var n=true;t.forEach(function(t,r){if(t!=e[r])n=false});return n};while(!t.e(e.sort(function(){return Math.floor(Math.random()*2)?1:-1}))){console.log(e)}return e}

আন-মিনিট

function f(a) {
var b = [].concat(a).sort();
b.e = function (z) {
    var l = true;
    b.forEach(function (v, i) {
        if (v != z[i]) l = false;
    });
    return l
};
while (!b.e(a.sort(function () {
    return Math.floor(Math.random() * 2) ? 1 : -1;
}))) {
    console.log(a);
}
return a;
}

আমার একটা অনুভূতি আছে যা আমি এটি আগে বলেছি তবে আপনি সমস্ত varগুলি মুছে ফেলতে পারেন । এগুলি সমস্ত নিখুঁত গ্লোবালগুলি তৈরি করুন, কোডটি যতটা সম্ভব সংক্ষিপ্ত করে তোলা।
gcampbell

1

মতলব, 59 বাইট

তুলনামূলকভাবে সোজা এগিয়ে এগিয়ে যাওয়া:

x=input('');while~issorted(x);x=x(randperm(numel(x)));end;x

1

জে, 22 বাইট

$:@({~?~@#)`]@.(-:/:~)

এটি একটি এজেন্ডা ব্যবহার করে পুনরাবৃত্তকারী, স্বচ্ছন্দ মোনাড। এখানে কিভাবে এটা কাজ করে:

yআমাদের তালিকা হতে দিন । প্রথমত, কর্মসূচির ডানদিকে ক্রিয়াটি হয় -:/:~। এটি একটি ক্রিয়া কৃপণভাবে Leaky নুন দ্বারা সরবরাহ করা । এটি ( -:) /:~মেটাডিক হুক ব্যবহার করে ইনপুটটি বাছাই করা হয় কিনা ( ) এর সাথে মেলে । ( (f g) y = y f (g y)) এটি সেই অনুযায়ী এক বা একটি শূন্য প্রদান করে। এজেন্ডার বাম দিকে দুটি ক্রিয়া সংঘটিত হয়: ডানদিকে সনাক্তকরণ ক্রিয়া ]এবং বামদিকে যেখানে পুনরাবৃত্তি ঘটে। বিষয়সূচি নির্বাচন পারেন অবস্থানে ক্রিয়া পরিচয় 1যদি তালিকা করা হয় সাজানো, এবং ক্রিয়া আর অবস্থানে 0যদি তালিকা করা হয় না সাজানো।

$:@({~?~@#)কলগুলি $:(এটি দীর্ঘতম ক্রিয়াতে অন্তর্ভুক্ত) {~?~@#অন ফলাফলের শীর্ষে y। এই shuffles তালিকা, যেমন ?~@#দৈর্ঘ্য একাধিক বিন্যাসন লাগে y, এর এলোমেলোভাবে সাজানো সূচকের হচ্ছে y{~, একটি মোনাডিক হুক মধ্যে, একটি তালিকা ফিরে আসে yযার সূচকগুলি সঠিক আর্গ হয় ar এই পরিবর্তিত তালিকাটি আবার এজেন্ডা সহ কল ​​করা হয়, এবং এটি বাছাই না করা পর্যন্ত পুনরাবৃত্তি করে।


1

সি ++ 14, 158 বাইট

#include <algorithm>
#include <random>
[](int*a,int s){std::random_device r;for(std::knuth_b g(r());!std::is_sorted(a,a+s);std::shuffle(a,a+s,g));return a;};

1

জেলি , 6 বাইট, ভাষা পোস্টডেটস চ্যালেঞ্জ

ẊŒ¿’$¿

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

ব্যাখ্যা

ẊŒ¿’$¿
     ¿  While
 Œ¿’$     the input is not in its earliest possible permutation (i.e. sorted)
Ẋ       shuffle it

Œ¿তালিকার প্রতিটি অনুক্রমের জন্য একটি সংখ্যা নির্ধারণ করে; 1 অনুসারে বাছাই করা হয়, 2 টি শেষ দুটি উপাদান ইত্যাদির বিনিময় করে থাকে ইত্যাদি তালিকার দৈর্ঘ্যের ফ্যাকটোরিয়াল (যা বিপরীত ক্রমের তালিকায় থাকে) অবধি। বাছাই করা তালিকার জন্য, এর মান 1 রয়েছে এবং একটি "বাছাই করা নয়" পরীক্ষা তৈরি করতে আমরা এটি হ্রাস করতে পারি যা কিছুক্ষণ লুপ অবস্থায় বুলিয়ান হিসাবে ব্যবহারযোগ্য us $দল হিসেবে পার্স করতে শর্ত কারণ হয়।


1

সি ++, 166 বাইট

সাধরণ।

#import<algorithm>
#import<random>
#define r b.begin(),b.end()
template<class v>
v f(v b){auto a=std::mt19937();while(!std::is_sorted(r))std::shuffle(r,a);return b;}

এটি যে সমস্ত এসটিএল কনটেইনার রয়েছে begin()এবং তার উপর কাজ করা উচিত end()

Ungolfed:

#include <algorithm>
#include <random>
template <class v>
v f(v b) {
    auto a = std::mt19937();
    while (!std::is_sorted(b.begin(),b.end()))
        std::shuffle(b.begin(),b.end(),a);

    return b;
}


1

ব্র্যাচল্যাগ , 5 বাইট

∈&ṣ≤₁

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

আমি যখন প্রথম প্রথম আইআইএস ২৩৩ এর ব্র্যাচ্ল্যাগ উত্তরটি দেখতে পেলাম (তার জেলি উত্তরটির বিপরীতে, কারণ যদি আমি ভুল করেও ব্যবহারকারী না হই তবে 21১১১১ তারও ছিল), আমি ভাবলাম, যদি এটি পুনরাবৃত্তির পরিবর্তে ব্যাকট্র্যাকিং ব্যবহার করে? তাই প্রথমে চেষ্টা করেছি ṣ≤₁। দেখা যাচ্ছে, এলোমেলোভাবে কিছু বাছাই করা একাধিক আউটপুট উত্পাদন করে না কারণ এটি কেবলমাত্র একটি আউটপুটকে নির্ধারিতভাবে উত্পাদন করে, এলোমেলো সাফিকেটটি ব্যাকট্র্যাক করা যায় না, তাই চলমান যে ব্যর্থ হবে যদি না আপনি সঠিকভাবে এলোমেলোভাবে যথেষ্ট ভাগ্যবান না হন তবে প্রথম চেষ্টা। এর পরে, আমি চেষ্টা করেছিলাম pṣ≤₁, যা বেশিরভাগ সময় কাজ করে, তবে যেহেতু একটি চূড়ান্ত দীর্ঘ তালিকায় চূড়ান্তভাবে অনেক অনুমান রয়েছে, এটি এখনও কখনও কখনও এলোমেলোভাবে ব্যর্থ হয়েছিল। দৈর্ঘ্য হ্রাস অর্জনের লক্ষ্যটি পরিত্যাগ করার পরে, অবশেষে আমি এটি নিয়ে এসেছি:

         The input
∈        is an element of
         an unused implicit variable,
 &       and the input
  ṣ      shuffled randomly
   ≤₁    which is increasing
         is the output.

(এলোমেলোভাবে প্রদর্শন)

যদিও আমরা I / O এর সাথে কিছুটা স্বাধীনতা নিলে তা আসলে কিছুটা খাটো হতে পারে ...

ব্র্যাচল্যাগ , 4 বাইট

⊆ṣ≤₁

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

আউটপুটটি কার্যকর হওয়ার জন্য, ইনপুটটিতে কোনও নকল উপাদান থাকতে হবে না, কারণ ইনপুটটি বাছাই করা ছাড়াও, এই বোগোসর্ট প্রিকেটটি এলোমেলোভাবে নকল উপাদান এবং জিরো যুক্ত করে adds (হাইপোথিটিক্যালি, এটি কোনও কিছুতে যুক্ত করতে পারে তবে এটি কেবল এক ধরণের নয়)) সাধারণত আমি সঠিকভাবে কাজ করা থেকে এতদূর কিছু উল্লেখ করা বিরক্ত করব না তবে আমি মনে করি এটি চ্যালেঞ্জের চেতনায় রয়েছে in

⊆        An ordered superset of the input
 ṣ       shuffled randomly
  ≤₁     which is increasing
         is the output.

1

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

{({.pick(*)}...~.sort).tail}

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

অজ্ঞাতনামা কোড ব্লক যা বাছাই না করা অবধি তালিকাটি বদলে দেয়। নোট করুন যে এটি অন্তত একবারে তালিকাটি সাজায়, যা অনুমোদিত allowed এবং না, এর {.pick(*)}সাথে প্রতিস্থাপন করা যাবে না*.pick(*)


1

পাইথ , 11 বাইট

Wn=Q.SQSQ;Q

এতে খুব খুশি, সম্ভবত আরও কিছুটা গল্ফ করা যেতে পারে

ব্যাখ্যা


Wn=Q.SQSQ;Q
W    While
  =Q.SQ    Variable Q (input variable) shuffled 
 n  Does not equal
       SQ    Variable Q sorted
             ;  Do nothing (loop ends)
              Q    And output variable Q

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


আপনি -1 বাইটে সংক্ষিপ্ত =Q.SQকরতে পারেন =.SQ(অন্যান্য অপারেটরের সাথেও কাজ করে =QhQ- যেমন > =hQ)
ar4093


1

ব্র্যাচল্যাগ (ভি 2), 5 বাইট

≤₁|ṣ↰

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

ফাংশন জমা। (টিআইও লিঙ্কটি একটি কমান্ড-লাইন আর্গুমেন্ট ব্যবহার করে যা কোনও ফাংশনটি স্বয়ংক্রিয়ভাবে একটি সম্পূর্ণ প্রোগ্রামে আবৃত করে))

ব্যাখ্যা

≤₁|ṣ↰
≤₁      Assert that {the input} is (nonstrictly) sorted in ascending order
  |     Output it
  |     Exception handler: if an assertion fails:
   ṣ      Randomly shuffle {the input}
    ↰     and run this function recursively on it, {outputting its output}

প্রোলোগ (ব্র্যাচল্যাগ যে ভাষায় সংকলন করে) লেজটি পুনরাবৃত্ত হয়, সুতরাং এই ফাংশনটি একটি টান লুপে সংকলিত হয়ে শেষ হয়।


0

সি (203 টি অক্ষর, কোনও ইনপুট লুপ নেই: কেবল ফানক)

#include <stdio.h>
#define P (int*a,int n){
#define F for(i=0;i<n;i++){
int i,j,v;s P F if(a[i]>a[i+1])return 0;}return 1;}void h P F v=a[i];a[i]=a[j=rand()%n];a[j]=v;}}void b P while(!s(a,n-1))h(a,n);}

এটি নীচের মতোই, যেখানে আমরা স্টিডিন থেকে অ্যারেও পড়ি এবং সাজানো অ্যারেটি লিখি। যেহেতু কিউ পুরো কর্মসূচির জন্য নয়, এই ফাংশনটির জন্য বলেছে ...

সি (২৯6 টি অক্ষর)

#include <stdio.h>
#define P (int*a,int n){
#define F for(i=0;i<n;i++){
int i,j,n,v,x[999];s P F if(a[i]>a[i+1])return 0;}return 1;}void h P F j=rand()%n;v=a[i];a[i]=a[j];a[j]=v;}}void b P while(!s(a,n-1))h(a,n);}main(){while(scanf("%d",&v)==1)x[n++]=v;if(!s(x,n))b(x,n);F printf("%d\n",x[i]);}}

সংকলন সতর্কতা দিতে পারে (অন্তর্নিহিত ঘোষণা)। 999 টি উপাদানের হার্ডডকোডযুক্ত অ্যারে আকার সীমা। ভঙ্গুর.

অ্যারে বাছাই করা হয়েছে কিনা তা যদি প্রাক-চেক করার প্রয়োজন নেই, তবে এটি 284-এ করা যেতে পারে।

সি (২৫১ টি অক্ষর ছিল ২৮৪)

#include <stdio.h>
#define F for(i=0;i<n;i++){
int i,j,n,v,a[999];s(int n){F if(a[i]>a[i+1])return 0;}return 1;}void h(){F v=a[i];a[i]=a[j=rand()%n];a[j]=v;}}void b(){while(!s(n-1))h();}main(){while(scanf("%d",&a[n++])>0);b();F printf("%d\n",a[i]);}}

(ফাংশন আরোগুলির পরিবর্তে গ্লোবাল ব্যবহার করা)।

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