একটি পূর্ণসংখ্যা তালিকা বাছাই করুন


22

চ্যালেঞ্জ

এটি সত্যিই বেশ সহজ, সংখ্যার একটি তালিকা সাজান।

বিস্তারিত

কোনও বিল্ট-ইন বাছাই করা ফাংশন / লাইব্রেরি / ইত্যাদি ব্যবহার না করে আপনাকে ( list.sort()অবশ্যই পাইথনে) সন্নিবিষ্ট সংখ্যাগুলির একটি তালিকা অবশ্যই বাছাই করতে হবে ।

ইনপুট / আউটপুট আপনার চয়ন করা যে কোনও পদ্ধতিতে করা যেতে পারে, যতক্ষণ না এটি মানুষের পাঠযোগ্য।

স্ট্যান্ডার্ড লুফোলগুলি বরাবরের মতো অনুমোদিত নয়।

বাইটস মধ্যে সংক্ষিপ্ত কোড।

আপনি কোন ধরণের পদ্ধতি ব্যবহার করেছেন তা আপনাকে ব্যাখ্যা / তালিকাবদ্ধ করতে হবে (বুদ্বুদ, সন্নিবেশ, নির্বাচন ইত্যাদি)

ইনপুটটিতে সদৃশ থাকবে না।

নমুনা ইনপুট / আউটপুট

ইনপুট: 99,-2,53,4,67,55,23,43,88,-22,36,45

আউটপুট: -22,-2,4,23,36,43,45,53,55,67,88,99

দ্রষ্টব্য: সংখ্যার তালিকাগুলির বাছাইয়ের একেবারে সরাসরি বিপরীত


8
আমি খুব অবাক হই যদি এটি সদৃশ না হয় তবে আমার চেক করার সময় নেই। যাইহোক, "অন্তর্নির্মিত বাছাই ফাংশন" আরও ভাল সংজ্ঞা দেওয়া উচিত। আপনি কি এমন কোনও ফাংশন ব্যবহার করতে পারেন যা সমস্ত মানকে সূচক করে? [7 2 4 1] -> [4 2 3 1]। এছাড়াও, CSV তালিকাটি বন্ধনীগুলির মধ্যে থাকতে পারে? এছাড়াও, নির্দিষ্ট ইনপুট ফর্ম্যাটটি কিছু ভাষার জন্য খুব উপযুক্ত এবং অন্যের পক্ষে খারাপ। এটি কিছু জমা দেওয়ার জন্য ইনপুটকে একটি বড় অংশ পার্সিং করে এবং অন্যদের জন্য অপ্রয়োজনীয় করে তোলে।
স্টিভি গ্রিফিন

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

এই হল খুব অনুরূপ, কিন্তু একটি হে (Nlog (এন)) সীমাবদ্ধতা রয়েছে।
নাথান মেরিল

2
এই প্রশ্নের সাথে খুব ঘনিষ্ঠভাবে সম্পর্কিত , তবে যেহেতু এখানে কিছু উত্তর (যেমন ডেনিসের রেঞ্জ ফিল্টারিং) এর জন্য ইনপুটটির পূর্ণসংখ্যার প্রয়োজন হয় আমি ডুপ হিসাবে বন্ধ করতে ভোট দেব না।
পিটার টেলর

প্রাসঙ্গিক: youtube.com/user/AlgoRythmics/videos - একটি ইউটিউব চ্যানেল যা হাঙ্গেরিয়ান নৃত্যের মাধ্যমে অ্যালগরিদমকে বাছাই করার শিক্ষা দেয়!
সার্জিওল

উত্তর:


23

05 এ বি 1 , 2 বাইট

কোড:

ϧ

জেলি উত্তর হিসাবে একই অ্যালগরিদম । ইনপুটটির সমস্ত ক্রমশক্তি গণনা করে এবং ক্ষুদ্রতমটি খুঁজে বের করে।

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


আরও কার্যকর পদ্ধতি হ'ল:

E[ß,Ž

সঞ্চালিত নির্বাচন সাজানোর । ব্যবহার সিপি-1252 এনকোডিং।

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


6
এই অস্থায়ীভাবে গ্রহণ করা কারণ আমি দেখছি যে কেউ 2 এর চেয়ে কম পাচ্ছে না
মাইচেলফ্রান্সিস বুস্টিলোস

6
@ মিশেলফ্রান্সিস বুস্টিলোস ভাল, তারা যদি তা করে থাকে তবে এটি একটি বিল্টিনই হত, তাই না?
ধ্বংসাত্মক লেবু

আমি এক মিনিট আগে সবে 05AB1E / বেসের দিকে চেয়েছিলাম এবং তারপরে আমি এটির দিকে নজর রেখেছি। কাকতালীয়?
ফেসপাম 42

17

জেলি, 3 বাইট

Œ!Ṃ

এটি ইনপুট তালিকার সমস্ত ক্রিয়াকলাপ উত্পন্ন করে, তারপরে লেক্সোগ্রাফিকভাবে ক্ষুদ্রতম ক্রমান্বয়ে নির্বাচন করে। খুব দক্ষ।

স্বাধীনভাবে একই ধারণা ছিল যারা @ আদনান ক্রেডিট।

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


জেলি, 4 বাইট

ṂrṀf

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

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

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

ṂrṀf  Main link. Argument: A (list/comma-separated string)

Ṃ     Compute the minimum of A.
  Ṁ   Compute the maximum of A.
 r    Yield the inclusive range from the minimum to the maximum.
   f  Filter the range by presence in A.

ও ( খুব ) অনেক ধরণের ব্যবহার করে।
mbomb007

22
সুতরাং ও খুব ব্যবহার। অনেক ধরণের বিস্ময়াবিষ্ট! (দুঃখিত, কি?)
ডেনিস

আমি অ্যালগরিদমের জটিলতায় দুর্দান্ত নই, এটি কি ও (এন!) হবে?
ফ্লিপট্যাক

2
পছন্দ করুন দৈর্ঘ্য অ্যারে এন
ডেনিস

1
কেবলমাত্র ক্ষুদ্রতম লেক্সোগ্রাফিকভাবে নির্বাচন করা হ'ল এন (এন * এন!) প্রতিটি এন থেকে! অ্যারেগুলি অবশ্যই ধারাবাহিকভাবে তুলনা করতে হবে এবং লেক্সোগ্রাফিকাল তুলনা হ'ল (এন)। জেনারেশন ও (এন * এন!)
এও করা

12

পাইথন, 46 45 বাইট

lambda l:[l.pop(l.index(min(l)))for _ in 1*l]

সাধারণ নির্বাচনের বাছাই।


4
l[:]পারে1*l
feersum

9

ব্র্যাচল্যাগ , 12 7 বাইট

p.'(s>)

এটি ক্রমবর্ধমান বাছাই ব্যবহার করে যা স্পষ্টতই ভয়ঙ্কর, তবে ওহে এটি পাইথের চেয়ে কম!

ব্যাখ্যা

p.       Unifies the output with a permutation of the input
  '(  )  True if what's inside the parentheses cannot be proven, else backtrack and
         try with another permutation of the input.
    s    Take an ordered subset from the output
     >   True if the first element is bigger than the second (hence not sorted)
         We don't need to check that the subset is 2 elements long because > will be false
         for inputs that are not 2 elements long anyway

9

হাস্কেল, 38 বাইট

h%t|(a,b)<-span(<h)t=a++h:b
foldr(%)[]

বাইনারি ফাংশন %একটি নতুন উপাদান সন্নিবেশ hএকটি সাজানো তালিকায় tপার্টিশন দ্বারা tএকটি উপসর্গ মধ্যে aউপাদানের <hএবং একটি প্রত্যয় bউপাদানের >h, এবং লাঠিh তাদের মধ্যে।

অপারেশন foldr(%)[] ইনপুট তালিকা থেকে বারবার উপাদান প্রবেশ করে খালি থেকে বাছাই করা তালিকা তৈরি করে।

এটি প্রত্যক্ষ পুনরাবৃত্তির প্রয়োগের চেয়ে এক বাইট কম

f(h:t)|(a,b)<-span(<h)$f t=a++h:b
f x=x

41 বাইটের জন্য অন্য কৌশল:

f[]=[]
f l|x<-minimum l=x:f(filter(/=x)l)

সুতরাং এটি এন.ইউইকিপিডিয়া.আর্গ / উইকি / ইন্সারেশন_সোর্ট , অন্তর্ভুক্তকরণের %অভ্যন্তরীণ লুপ foldrহিসাবে এবং এটিকে বাইরের লুপ হিসাবে প্রয়োগ করা।
পিটার

8

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

a=>a.map(_=>m=Math.min(...a.filter(e=>e>m)),m=-1/0)

প্রতিটি লুপ সর্বাধিক সংখ্যক সন্ধান করে যা এখনও অবধি পাওয়া যায় নি।


এই কল করা হচ্ছে [1,2,3,4,5,4,3,2,1]উৎপন্ন[1, 2, 3, 4, 5, Infinity, Infinity, Infinity, Infinity]
বেঞ্জামিন Gruenbaum

"ইনজামে নকল থাকবে না"
নীল

আমার কাছে অন্যরকম পদ্ধতির সাথে হুবহু একই উপাখ্যান রয়েছে
বিলিন্ট

আসলে, 1 বাইট কম
বেলিন্ট

এই অ্যালগরিদমটি একটি এন.ইউইকিপিডিয়া.org
পিটার

8

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

def f(s):m=min(s);print m;f(s-{m})

সেট হিসাবে ইনপুট নেয়, ক্রমবর্ধমান ক্রমে এর উপাদানগুলি মুদ্রণ করে, ত্রুটি দিয়ে শেষ করে।

একটি পরিষ্কার সমাপ্তি 41 বাইটে করা যেতে পারে:

def f(s):
 if s:m=min(s);print m;f(s-{m})

অথবা

l=input()
while l:m=min(l);print m;l-={m}

ইনপুটটি 39 বাইট, বা পাইথন 3.5 তে 38 বাইটের তালিকা হিসাবে নেওয়া যেতে পারে:

def f(l):m=min(l);print m;f(set(l)-{m})
def f(l):m=min(l);print(m);f({*l}-{m})

এটি একটি এন.ইউইকিপিডিয়া.আর্গm=min(s) / উইকি / সিক্লেশন_সোর্ট , অরসেটেডs - (m) উপাদানগুলি থেকে মিনিট সন্ধান করতে এবং সরিয়ে আনতে অভ্যন্তরীণ লুপ হিসাবে / ব্যবহার করে এবং বাহ্যিক হিসাবে পুনরাবৃত্তি।
পিটার

8

হাস্কেল, 42 41 38 বাইট

f u=filter(`elem`u)[(minBound::Int)..]

সমস্ত পূর্ণসংখ্যার মধ্য দিয়ে লুপ (আমার মেশিনে স্বাক্ষরিত 64 বিট) এবং এতে থাকাগুলি রাখে u । অবশ্যই এটি যুক্তিসঙ্গত সময়ে শেষ হয় না।

পূর্ববর্তী সংস্করণটি লুপ করা হয়েছে [minimum u..maximum u]যার মধ্য দিয়ে চলমান সময়টি একই রকম খারাপ worst

সম্পাদনা করুন: @ এক্সনর একটি বাইট সংরক্ষণ করেছেন। ধন্যবাদ!


filterএকটি খাটো:f u=filter(`elem`u)[minimum u..maximum u]
xnor

কতটা নিষ্ঠুর শক্তি! না [minimum u..]টাইপ কারণে কাজ করে না?
xnor

@ এক্সনর: আমারও তাই মনে হয়। কল করার সময়, যাক f [1,3,0], যে উপাদানগুলি Integerআনবাউন্ড টাইপ করতে ডিফল্ট হয় , তাই ..কখনই শেষ হয় না। যদি আপনি এটির মতো কল করতে চান f ([1, 3, 0]::[Int])তবে আমার অনুমান, টীকা টীকাটি বাইট গণনায় অন্তর্ভুক্ত করতে হবে।
নিমি

এটি একাধিকবার সংঘটিত উপাদানগুলি কীভাবে সনাক্ত করে?
ফেয়ারস

1
@ ফেয়ারসাম: এটি হয় না, তবে চ্যালেঞ্জটি বলে: "ইনপুটটিতে নকল থাকবে না"।
নিমি

8

ওরাকল এসকিউএল 11.2, 205 বাইট

WITH s AS(SELECT COLUMN_VALUE||''e FROM XMLTABLE(('"'||REPLACE(:1,',','","')||'"'))),v(p,f)AS(SELECT e,e FROM s UNION ALL SELECT p||','||e,e FROM v,s WHERE e+0>f)SELECT p FROM v WHERE LENGTH(p)=LENGTH(:1);         

আন golfed

WITH 
s AS  -- Split the string using ',' as separator
(     -- ||'' cast the xml type to varchar
  SELECT COLUMN_VALUE||''e FROM XMLTABLE(('"'||REPLACE(:1,',','","')||'"'))
),  
v(p,f) AS  -- Recursive view : p = sorted string, f last number added
(
  SELECT e,e FROM s -- use each number as seed
  UNION ALL         -- only add a number if it is > the last added
  SELECT p||','||e,e FROM v,s WHERE e+0>f  -- +0 is needed to compare int and not strings
)  
-- The valid string has the same length as the input
SELECT p FROM v WHERE LENGTH(p)=LENGTH(:1)          

এটি কী ধরণের পদ্ধতি তা সম্পর্কে, আমার কোনও ধারণা নেই, ORDER BYনিশ্চিত হয়েছি যে আমি সেগুলি ভুলে গিয়েছি।


আমি সবেমাত্র এসকিউএলকে জানি, তবে আপনার মন্তব্যগুলি থেকে আমি মনে করি আপনি বাকী ছাঁটাই থাকা উপাদানগুলি থেকে ন্যূনতম বা সর্বাধিকটি নির্বাচন করছেন এবং এটি একটি সাজানো তালিকার শেষে যুক্ত করছেন। এটি এটিকে একটি এন.ইউইকিপিডিয়া.আর / উইকি / নির্বাচন নির্বাচন_সোর্ট করে তোলে ।
পিটার

8

x86-16 মেশিন কোড (বুদ্বুদর্ট int8_t), 20 19 বাইট

x86-64 / 32 মেশিন কোড (জাম্পডাউনসর্ট) 21 19 বাইট

পরিবর্তণের:

  • lodsb/ পেডিয়াগুলি / cmp [si],alআইডিয়াটির জন্য ধন্যবাদ , এবং এটি যে পয়েন্টার ইনক্রিমেন্ট / রিসেটের সাথে একসাথে রেখেছি যা আমি দেখছিলাম । প্রয়োজন নেই al/ ahবৃহত্তর পূর্ণসংখ্যার জন্য আমাদের প্রায় একই কোডটি ব্যবহার করতে দেয়।

  • নতুন (তবে সম্পর্কিত) অ্যালগরিদম, অনেকগুলি প্রয়োগ পরিবর্তন হয়: বুবলি সিলেকশনসোর্ট বাইটস বা ডিফোর্ডের জন্য একটি ছোট x86-64 প্রয়োগের অনুমতি দেয়; বিরতি এমনকি x86-16 এ (বাইট বা শব্দ)। আমার বাবলসার্টের আকার = 1 তে থাকা বাগটিও এড়িয়ে চলে। নিচে দেখ.

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


স্থানটিতে 8-বিট স্বাক্ষরিত পূর্ণসংখ্যার সাজান । (সাইন করা হয়নি একই কোড আকার, শুধু পরিবর্তন jgeএকটি থেকে jae)। সদৃশ কোন সমস্যা নয়। আমরা 8-এর (একটি স্মৃতির গন্তব্য সহ) 16-বিট ঘোরানো ব্যবহার করে অদলবদল করি।

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

আমি কোনও অদলবদলে প্রাথমিক সমাপ্তি বাদ দিয়েছি । আমি উইকিপিডিয়ায় "অপ্টিমাইজড" বাবলসোর্ট লুপটি ব্যবহার করেছি যা এটির n − 1জন্য দৌড়ানোর সময় শেষ আইটেমগুলির দিকে নজর দেওয়া এড়িয়ে যায়n সময় , সুতরাং বাইরের লুপের কাউন্টারটি অভ্যন্তরীণ লুপের জন্য উপরের আবদ্ধ।

এনএএসএম তালিকা ( nasm -l /dev/stdout), বা সরল উত্স

 2 address  16-bit       bubblesort16_v2:
 3          machine      ;; inputs: pointer in ds:si,  size in in cx
 4          code         ;; requires: DF=0  (cld)
 5          bytes        ;; clobbers: al, cx=0
 6                       
 7 00000000 49               dec     cx          ; cx = max valid index.  (Inner loop stops 1 before cx, because it loads i and i+1).
 8                       .outer:                 ; do{
 9 00000001 51               push    cx          ;   cx = inner loop counter = i=max_unsorted_idx
10                       .inner:                 ;   do{
11 00000002 AC               lodsb               ;     al = *p++
12 00000003 3804             cmp     [si],al     ;     compare with *p (new one)
13 00000005 7D04             jge     .noswap
14 00000007 C144FF08         rol     word [si-1], 8    ; swap
15                       .noswap:
16 0000000B E2F5             loop    .inner      ;   } while(i < size);
17 0000000D 59               pop     cx          ;  cx = outer loop counter
18 0000000E 29CE             sub     si,cx       ;  reset pointer to start of array
19 00000010 E2EF             loop    .outer      ; } while(--size);
20 00000012 C3               ret

22 00000013  size = 0x13 = 19 bytes.

cxঅভ্যন্তরীণ লুপের চারপাশে ধাক্কা / পপ মানে এটি cx= বহিরাগত_কেক্সের সাথে 0 অবধি চলে।

নোট করুন যে rol r/m16, imm8কোনও 8086 নির্দেশ নয়, এটি পরে যুক্ত হয়েছিল (186 বা 286), তবে এটি 8086 কোড হওয়ার চেষ্টা করছে না, কেবল 16-বিট x86। যদি এসএসই 4.1 phminposuwসহায়তা করে, আমি এটি ব্যবহার করব।

এটির একটি 32-বিট সংস্করণ (এখনও 8-বিট ইন্টিজারে কিন্তু 32-বিট পয়েন্টার / কাউন্টার সহ অপারেটিং) 20 বাইট (অপারেন্ড-আকারের উপসর্গ চালু rol word [esi-1], 8)

বাগ: আকার = 1 কে আকার = 65536 হিসাবে বিবেচনা করা হয়, কারণ কোনও কিছুই আমাদের সিএক্স = 0 সহ বাইরের ডো / তে প্রবেশ করতে বাধা দেয় না। (আপনি সাধারণত jcxzএটির জন্য ব্যবহার করতেন )) তবে সৌভাগ্যক্রমে 19 বাইট জাম্পডাউন সাজানটি 19 বাইট এবং এতে সমস্যা নেই।


আসল x86-16 20 বাইট সংস্করণ ( পেড 7 জি এর ধারণা ব্যতীত)। স্থান বাঁচাতে অনুমতি দেওয়া হয়েছে, বর্ণনার সাথে এর সম্পাদনা ইতিহাস দেখুন ।


কর্মক্ষমতা

আংশিক-ওভারল্যাপিং স্টোর / পুনরায় লোড (মেমরি-গন্তব্য ঘোরানোর ক্ষেত্রে) আধুনিক x86 সিপিইউগুলিতে (অর্ডার অ্যাটম ব্যতীত) স্টোর-ফরওয়ার্ডিং স্টল তৈরি করে। যখন কোনও উচ্চ মানের উপরের দিকে বুদবুদ হয়, তখন এই অতিরিক্ত লম্বাটি লুপ বহনকারী নির্ভরতা শৃঙ্খলার অংশ। স্টোর / পুনরায় লোড প্রথম স্থানে চুষে পায় (হাসওলে 5 টি চক্রের স্টোর-ফরোয়ার্ডিং ল্যাটেন্সির মতো) তবে একটি ফরোয়ার্ডিং স্টল এটিকে 13 টি চক্রের মতো আরও উপরে নিয়ে আসে। আউট-অফ-অর্ডার এক্সিকিউশনে এটি লুকিয়ে রাখতে সমস্যা হবে।

আরও দেখুন: স্ট্যাক ওভারফ্লো: একই রূপায়নের সাথে এর সংস্করণটির জন্য স্ট্রিং বাছাইয়ের জন্য বুদ্বুদ সাজান , তবে কোনও অদলবদল প্রয়োজন না হলে প্রাথমিক পর্যায়ে। এটি অদলবদল করার জন্য xchg al, ah/ mov [si], axব্যবহার করে যা 1 বাইট দীর্ঘ এবং কিছু সিপিইউতে আংশিক-নিবন্ধক স্টল তৈরি করে। (তবে এটি মেমরি-ডিএসটি ঘোরার চেয়ে আরও ভাল হতে পারে, যার আবার মানটি লোড করা দরকার)। আমার মন্তব্যে কিছু পরামর্শ আছে ...


x86-64 / x86-32 জাম্পডাউন বাছাই করুন, 19 বাইট (প্রকরণ 32_t সাজান)

X86-64 সিস্টেম ভি কলিং কনভেনশন
int bubblyselectionsort_int32(int dummy, int *array, int dummy, unsigned long size); (রিটার্ন মান = সর্বোচ্চ (অ্যারে [])) হিসাবে সি ব্যবহার করে কল করা ।

এটি https://en.wikedia.org/wiki/Selection_sort , তবে ন্যূনতম উপাদানটির অবস্থান মনে রাখার পরিবর্তে বর্তমান প্রার্থীকে অ্যারেতে অদলবদল করুন । আপনি একবার ন্যূনতম (অর্ডারডড_রিগেশন) সন্ধান করলে, এটি সাধারণ বাছাই বাছাইয়ের মতো সাজানো অঞ্চলের শেষে সংরক্ষণ করুন। এটি একের পর এক সাজানো অঞ্চল বাড়ায়। ( rsiকোডটিতে, বাছাই করা অঞ্চলের শেষের এক দিকে ইঙ্গিত করে; lodsdএটি অগ্রসর হয় এবং মিনিটটি এটিতে mov [rsi-4], eaxআবার জমা করে দেয়))

জাম্প ডাউন সাজান নামটি বুদ্বুদ সাজানোর ক্ষেত্রে ব্যবহৃত হয় : একটি প্রত্নতাত্ত্বিক অ্যালগরিদমিক বিশ্লেষণ । আমি অনুমান করি আমার সাজানটি সত্যিই একটি জাম্প আপ বাছাই, কারণ উচ্চ উপাদানগুলি উপরের দিকে লাফ দেয়, নীচের অংশটিকে সাজানো হয় না, শেষ হয়।

এই এক্সচেঞ্জ ডিজাইনের ফলে অ্যারের অরসোর্টড অংশটি বেশিরভাগ বিপরীত সাজানো ক্রমে শেষ হয়, পরে প্রচুর অদলবদল হয়। (কারণ আপনি একটি বড় প্রার্থী দিয়ে শুরু করেছেন, এবং নিম্ন এবং নিম্ন প্রার্থী দেখতে থাকুন, তাই আপনি অদলবদল করতে থাকুন)) আমি এটিকে "বুদ্বি" বলেছি যদিও এটি উপাদানগুলি অন্য দিক থেকে সরিয়ে দেয়। এটি উপাদানকে যেভাবে সরায় তা পিছনে সন্নিবেশ-সাজানোর মতো কিছুটা। এটি কার্যকরভাবে দেখতে, জিডিবি ব্যবহার display (int[12])bufকরুন, অভ্যন্তরীণ loopনির্দেশের উপর একটি ব্রেকপয়েন্ট স্থাপন করুন এবং ব্যবহার করুন c(চালিয়ে যান)। পুনরাবৃত্তি করতে রিটার্ন টিপুন। ("ডিসপ্লে" কমান্ডটি প্রতিবার ব্রেকআপপয়েন্টে চাপলে পুরো অ্যারে রাজ্য মুদ্রণ করতে জিডিবি পায়))

xchgমেমের সাথে একটি অন্তর্নিহিত lockউপসর্গ রয়েছে যা এটি অতিরিক্ত ধীর করে তোলে। সম্ভবত একটি দক্ষ লোড / স্টোর অদলবদলের চেয়ে ধীর গতি বাড়ানোর ক্রম সম্পর্কে; xchg m,rস্কাইলেকে 23 সি থ্রুটপুট প্রতি এক, তবে একটি দক্ষ অদলবস্থার (রেজি, মেমি) জন্য একটি টিএমপি রেগের সাথে লোড / স্টোর / মুভি লোড / স্টোর / মুভ প্রতিটি ঘড়ি প্রতি এক উপাদান স্থানান্তর করতে পারে। এটি একটি এএমডি সিপিইউতে আরও খারাপ অনুপাত হতে পারে যেখানে loopনির্দেশটি দ্রুত হয় এবং ততটা অভ্যন্তরীণ লুপকে বাধা দেয় না, তবে শাখা মিসগুলি এখনও একটি বড় বাধা হয়ে দাঁড়াবে কারণ অদলবদলগুলি সাধারণ (এবং অদৃশ্য অঞ্চলটি ছোট হওয়ার সাথে সাথে আরও সাধারণ হয়ে উঠবে) )।

 2 Address               ;; hybrib Bubble Selection sort
 3        machine         bubblyselectionsort_int32:   ;; working, 19 bytes.  Same size for int32 or int8
 4        code               ;; input: pointer in rsi, count in rcx
 5        bytes              ;; returns: eax = max
 6                       
 7                           ;dec  ecx           ; we avoid this by doing edi=esi *before* lodsb, so we do redundant compares
 8                                               ; This lets us (re)enter the inner loop even for 1 element remaining.
 9                       .outer:
10                           ; rsi pointing at the element that will receive min([rsi]..[rsi+rcx])
11 00000000 56               push   rsi
12 00000001 5F               pop    rdi
13                           ;mov    edi, esi     ; rdi = min-search pointer
14 00000002 AD               lodsd
16 00000003 51               push   rcx          ; rcx = inner counter
17                       .inner:                   ; do {
18                           ; rdi points at next element to check
19                           ; eax = candidate min
20 00000004 AF               scasd                 ; cmp eax, [rdi++]
21 00000005 7E03             jle  .notmin
22 00000007 8747FC           xchg   [rdi-4], eax   ; exchange with new min.
23                         .notmin:
24 0000000A E2F8             loop  .inner          ; } while(--inner);
26                           ; swap min-position with sorted position
27                           ; eax = min.  If it's not [rsi-4], then [rsi-4] was exchanged into the array somewhere
28 0000000C 8946FC           mov    [rsi-4], eax
29 0000000F 59               pop   rcx           ; rcx = outer loop counter = unsorted elements left
30 00000010 E2EE             loop  .outer        ; } while(--unsorted);
32 00000012 C3               ret

34 00000013 13           .size: db $ - bubblyselectionsort_int32
           0x13 = 19 bytes long

জন্য একই কোড আকার int8_tব্যবহার: lodsb/ scasb, AL, এবং পরিবর্তন [rsi/rdi-4]করার -1। একই মেশিন কোডটি 8/32-বিট উপাদানগুলির জন্য 32-বিট মোডে কাজ করে। 8/16-বিট উপাদানগুলির জন্য 16-বিট মোডে অফসেট পরিবর্তিত হয়ে পুনরায় তৈরি করা দরকার (এবং 16-বিট অ্যাড্রেসিং মোডগুলি আলাদা এনকোডিং ব্যবহার করে)। তবে এখনও সবার জন্য 19 বাইট।

এটি dec ecxএগিয়ে যাওয়ার আগে যে উপাদানটি সবেমাত্র লোড হয়েছিল তার সাথে তুলনা করে প্রাথমিকটি এড়িয়ে চলে । বাইরের লুপের শেষ পুনরাবৃত্তিতে এটি শেষ উপাদানটি লোড করে, এটি নিজের চেয়ে কম কিনা তা পরীক্ষা করে। এটি এটি আকার = 1 দিয়ে কাজ করতে দেয়, যেখানে আমার বাবলসোর্ট ব্যর্থ হয় (এটি আকার = 65536 হিসাবে বিবেচনা করে)।

আমি এই কলারটি ব্যবহার করে এই সংস্করণটি (জিডিবিতে) পরীক্ষা করেছি: এটি অনলাইনে চেষ্টা করুন! । এটি এটি টিআইওতে চালাতে পারেন তবে অবশ্যই কোনও ডিবাগার বা মুদ্রণ করা যাবে না। তবুও, যেটি _startএটিকে প্রস্থান-স্থিতি = বৃহত্তম উপাদান = 99 দিয়ে প্রস্থান করে, আপনি দেখতে পাচ্ছেন এটি কাজ করে।


অভ্যন্তরীণ-লুপ লুপের অবস্থার উন্নতি করার জায়গা থাকতে পারে, মনে হচ্ছে এটি প্রচুর বাইট ব্যবহার করছে। সম্ভবত ধাক্কা / পপ cxএবং loopউভয়ের জন্য ব্যবহার ? অন্যভাবে লুপ করতে পারেন, অ্যারের পিছন থেকে সামনের দিকে তাই আমরা শূন্যের নিচে একটি সূচক গণনা করি? (এবং ইনক্রিমেন্ট bxকারণ সাজানো অংশটি আপনি শেষে লুপ করেন)।
পিটার

1
এটি ১৯ বি তে নেমেছে, তবে প্রচুর পরিবর্তনগুলির সাথে, ইনপুটও রেগস (কিছু পরিবর্তন সম্ভবত সম্ভবত প্রয়োজন হয় না, তবে আমি প্রায় টয়িং করছিলাম বলে তারা আগের পরীক্ষাগুলি থেকে সেখানেই রয়ে গেছে) ... এটি এখনও আপনার কাজের উপর ভিত্তি করে পোস্ট করতে অনিচ্ছুক এটি উত্তর হিসাবে, আপনি এটি পেস্টবিনে চেক করতে পারেন: পেস্টবিন.কম
ভিভিজেডজুজ

@ পেড 7 জি: দুর্দান্ত! আমি sub si, cxইনডেক্সিংয়ের পরিবর্তে পয়েন্টার ব্যবহার করে বাইরের লুপের অংশ হিসাবে বিবেচনা করতাম , তবে আমি lodsb/ এর কথা ভাইনি cmp [si], al। আমি বিবেচনা করছি lodsw/ dec si, বা lodsb/ xchg al,ahএখনও সেট আপ করার জন্যcmp ah,al
পিটার

@ পেড g জি: ওহ, আপনার সংস্করণ প্রয়োজন cld, বা আমি অনুমান করি আমরা কলিং কনভেনশনের সেই অংশটি তৈরি করতে পারি। আফাইক, DFসাফ করা 16-বিট কলিং কনভেনশনগুলির কেবলমাত্র 32/64 এর স্ট্যান্ডার্ড অংশ নয়। বা এটি কেবল যে আপনি এটি কোনও বুটলোডার ধরে নিতে পারবেন না? তবে একটি কাস্টম রেজিস্টার কলিং কনভেনশন সহ, এটি কোনও ফাংশনের মতো কোডের খন্ডের পরিমাণ হিসাবে এতটা নিশ্চিত, তাই কেন ডিএফ = 0 প্রয়োজন হয় না। (এবং যদি আমরা চাই তবে ES = DS তাই আরও বেশি সুবিধাজনক হলে আমরা তার scasbপরিবর্তে পারতাম lodsb))
পিটার

1
@ পেড g জি: ১ 16-বিট কনভেনশন সম্পর্কে আমার কোনও ধারণা নেই, আমি কেবল জানি যে আপনি সবসময়ই ধরে নিতে পারেন না যে ডিএফ সাফ হয়ে গেছে। তবে আমি মনে করি এটি বেশিরভাগই বুটলোডার প্রসঙ্গে। আমি সত্যিকারের ডস-এ লিখেছি এমন কোনও কিছুই আমি চালাইনি। আমি আটারি মেগা 4 এসটি (68000/68020), তারপরে লিনাক্স (পেন্টিয়াম এমএমএক্সে) ছিলাম, সুতরাং এসও প্রশ্নগুলি আমার গলা ভেঙে না দেওয়া পর্যন্ত আমি 16-বিট x86 সম্পূর্ণরূপে এড়াতে সক্ষম হয়েছি।
পিটার

6

সি, 72 বাইট

i,j;a(int*l,int n){for(i=0;i=i?:--n;j>l[n]?l[i]=l[n],l[n]=j:0)j=l[--i];}

Bubblesort। প্রথম আর্গুমেন্ট অ্যারের পয়েন্টার, দ্বিতীয় আর্গুমেন্ট অ্যারের দৈর্ঘ্য। জিসিসি নিয়ে কাজ করে।


এটি পড়ার জন্য সত্যই একটি অদম্য সংস্করণ প্রয়োজন; টার্নারি অপারেটররা কোথায় শুরু / শেষ হয় তা ট্র্যাক করা সত্যিই শক্ত।
পিটার

5

এমএটিএল , 11 10 বাইট

Y@t!d0>AY)

ইনপুটটির সমস্ত ক্রিয়াকলাপের চূড়ান্তভাবে অদক্ষ পরীক্ষা।

অনলাইনে চেষ্টা করে দেখুন!

ব্যাখ্যা

        % Implicitly grab input array
Y@      % Compute all permutations (each permutation as a row)
t       % Duplicate this matrix
!d      % Transpose and take the differences between the values
0>A     % Find the rows where all differences are > 0
Y)      % Return only the row where this is true
        % Implicitly display the result

5

রুবি, 40 বাইট

বাছাই বাছাই। বেনামে ফাংশন; যুক্তি হিসাবে তালিকা গ্রহণ করে।

->a{r=[];r<<a.delete(a.min)while[]!=a;r}

4

পাইথন, 120 বাইট

def f(a):import time,threading;[threading.Thread(None,lambda b=b,c=min(a):print(time.sleep(b-c)or b)).start()for b in a]

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


প্রথম প্রথম পোস্ট! এবং দুর্দান্ত ব্যবহারকারীর নাম। : পি
আর

4

এমআইপিএস, 68 বাইট

আমি কিছুক্ষন আগে একটি সরল অপ্রচলিত বুদ্বুদ সাজানোর বাস্তবায়ন লিখেছিলাম। তালিকার ঠিকানা এবং তালিকার দৈর্ঘ্য ইতিমধ্যে মেমরিতে রয়েছে বলে ধরে loopনিয়ে বাইট গণনাটি শুরু হয় এবং শেষ হয় li $v0, 10

 Address    Code        Basic                     Source

0x00400000  0x3c011001  lui $1,4097           5    main:   la      $s0, list       # List address
0x00400004  0x34300000  ori $16,$1,0               
0x00400008  0x2411000a  addiu $17,$0,10       6            li      $s1, 10         # List length
0x0040000c  0x24080000  addiu $8,$0,0         8    loop:   li      $t0, 0          # swapped
0x00400010  0x24090001  addiu $9,$0,1         9            li      $t1, 1          # for loop "i"
0x00400014  0x1131000b  beq $9,$17,11         11   for:    beq     $t1, $s1, fend  # break if i==length
0x00400018  0x00095080  sll $10,$9,2          13           sll     $t2, $t1, 2     # Temp index, multiply by 4
0x0040001c  0x01505020  add $10,$10,$16       14           add     $t2, $t2, $s0   # Combined address
0x00400020  0x8d4b0000  lw $11,0($10)         15           lw      $t3, 0($t2)     # list[i]
0x00400024  0x8d4cfffc  lw $12,-4($10)        16           lw      $t4, -4($t2)    # list[i-1]
0x00400028  0x21290001  addi $9,$9,1          18           addi    $t1, $t1, 1     # i++
0x0040002c  0x016c082a  slt $1,$11,$12        20           ble     $t4, $t3, for   # if list[i-1] > list[i]
0x00400030  0x1020fff8  beq $1,$0,-8               
0x00400034  0xad4bfffc  sw $11,-4($10)        21           sw      $t3, -4($t2)    # swap and store
0x00400038  0xad4c0000  sw $12,0($10)         22           sw      $t4, 0($t2)     
0x0040003c  0x24080001  addiu $8,$0,1         23           li      $t0, 1          # swapped=true
0x00400040  0x08100005  j 0x00400014          24           j       for
0x00400044  0x20010001  addi $1,$0,1          26   fend:   subi    $s1, $s1, 1     # length--
0x00400048  0x02218822  sub $17,$17,$1             
0x0040004c  0x1500ffef  bne $8,$0,-17         27           bnez    $t0, loop       # Repeat if swapped==true
0x00400050  0x2402000a  addiu $2,$0,10        29           li      $v0, 10        
0x00400054  0x0000000c  syscall               30           syscall

এখন আমি x86 দিয়ে জলের বাইরে ফুঁকতে অপেক্ষা করছি ...


1
আপনি swapped=trueপ্রারম্ভিক-আউট চেক ছেড়ে এবং অ্যারের আকারের উপর ভিত্তি করে গণনা করতে পারেন। দেখুন আমার 20 বাইট x86-16 সংস্করণ যা 8-বিট পূর্ণসংখ্যা বাছাই করে । আমি একটি সাধারণ 32 বা 64-বিট x86 সংস্করণ তৈরি করতে পারি যা কোনও সময়ে 32-বিট ইন্টিজারগুলি সাজায় তবে 16-বিট মোডে 8-বিট পূর্ণসংখ্যা x86 এর জন্য এক মিষ্টি স্পট spot
পিটার

4

ওওক, 66 বাইট

{b=$0;a[b]}m<b{m=b}n>b{n=b}END{for(i=n;i<=m;i++)if(i in a)print i}

অ্যাজকের মধ্যে অ্যারে অভিধানের মতো, সি অ্যারের মতো নয়। সূচীগুলি অ-সামঞ্জস্যপূর্ণ হতে পারে এবং প্রয়োজন হিসাবে এগুলি বৃদ্ধি পায় (এবং তৈরি হয়)। সুতরাং, আমরা ইনপুটটির aজন্য একটি অ্যারে তৈরি করি , প্রতিটি লাইনই কী হয়। এবং আমরা সর্বনিম্ন এবং সর্বোচ্চ মানগুলি সংরক্ষণ করি save তারপরে আমরা সর্বনিম্ন থেকে সর্বোচ্চ পর্যন্ত লুপ করব এবং বিদ্যমান সমস্ত কীগুলি মুদ্রণ করব abশুধুমাত্র এর পুনরাবৃত্তি ব্যবহার এড়াতে হয় $0


4

পাইথন 3, 91 62 47 বাইট

def f(z):
 while z:m=min(z);z.remove(m);yield m

ধন্যবাদ wnnmaw এবং Seeq সাহায্যের golfing জন্য।

যুক্তিটি zএকটি তালিকা হওয়া উচিত। এটি নির্বাচন বাছাইয়ের একটি বৈকল্পিক।

আমি নিশ্চিত না যে কীভাবে minস্ট্যাকস আপ রয়েছে built-in sorting functions, যেহেতু আমি নিশ্চিত নই যে পাইথন কীভাবে প্রয়োগ করে min। আশা করি, এই সমাধানটি এখনও ঠিক আছে। মন্তব্যগুলিতে বা পিপিসিজি চ্যাটে যে কোনও গল্ফিং পরামর্শ স্বাগত।


আপনি কোন ধরণের ধরণের ব্যবহার করছেন তা নিশ্চিত করে নিন।
মিশেলফ্রান্সিস বুস্টিলোস

পছন্দ করেছেন বাছাই বাছাই হতে পারে?
শার্লক 9

1
শুধু কৌতূহলের বাইরে, কেন সরাসরি সরাসরি একটি তালিকা নিবেন না? প্রশ্নটি ইনপুট ফর্ম্যাটটির অনুমতি দেয়
wnnmaw

1
@nnmaw ডাং এটি, আমি একটি লিখেছিলাম তবে এটি পোস্ট করতে ভুলে গেছি। অনুস্মারকটির জন্য ধন্যবাদ: ডি
শার্লক 9

হুম, হয়তোdef f(z):\nwhile z:m=min(z);z.remove(m);yield m
seequ

4

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

`t4#X<2#)tn

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

নিম্নলিখিত পদ্ধতি দ্বারা এটি বাছাই করে, যা হে ( এন 2 ):

  1. অ্যারে সর্বনিম্ন নিন।
  2. অ্যারে থেকে সেই মানটি সরিয়ে ফেলুন এবং পরবর্তী প্রদর্শনের জন্য এটি সঞ্চয় করুন।
  3. খালি না হওয়া পর্যন্ত বাকি অ্যারের সাথে একই পদ্ধতিটি প্রয়োগ করুন।
  4. যে সংখ্যাটি তারা প্রাপ্ত হয়েছিল সেভাবে প্রদর্শন করুন।

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

`        % Do...while loop
  t      %   Duplicate. Implicitly take input in the first iteration
  4#X<   %   Compute index of mininum of the array
  2#)    %   Push the minimum, and then the array with remaining entries
  tn     %   Duplicate and push number of elements, to be used as loop condition
         % Implicitly end do...while loop
         % Implicitly display stack contents

3

পাইথ - 15 13 11 10 বাইট

দুটি জ্যাকেট সংরক্ষণ করেছেন @ জাকুবকে ধন্যবাদ।

Bogosort।

f!s>VTtT.p

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

আমার hকোন ডুপ্লিকেট নেই তার গ্যারান্টিযুক্ত কিউজের দরকার নেই।


@ জাকুব আমি বোকা বোধ করি, ধন্যবাদ
মালটিসেন

@ যাইহোক আমি আমার উত্তরে বলেছি যে, ওপি অনুসারে আমাদের কোনও নকলের গ্যারান্টি নেই।
মালটিসেন

এর জন্যে দুঃখিত! মিস করলাম সেই কথাটি।
স্যুভার

3

সিরিয়াসলি, 6 বাইট

,;l@╨m

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

এটি অন্যান্য অনেক উত্তরগুলির মতো একই কাজ করে: সমস্ত ক্রম উত্পাদন উত্পন্ন করুন, সর্বনিম্ন নির্বাচন করুন। আমি ভুলে গিয়েছিলাম যে নীচের সমাধানে কাজ করার সময় এটি কাজ করবে।

ব্যাখ্যা:

,;l@╨m
,;l@    push len(input), input
    ╨m  minimum permutation

গুরুতরভাবে, 25 বাইট (প্রতিদ্বন্দ্বী)

এটি প্রতিযোগিতামূলক হবে যদি এটি আমি সরিয়ে ফেলা শ্যাফেল কমান্ডের কোনও বাগের জন্য না হয়।

,1WX╚;;pX@dXZ`i@-0<`MπYWX

এটি অনলাইন চেষ্টা করুন! এটি সর্বকালের সেরা বাছাই করা অ্যালগরিদম প্রয়োগ করে: বোগোসর্ট !

ব্যাখ্যা:

,1WX╚;;pX@dXZ`i@-0<`MπYWX
,                          get input
 1W                    WX  do-while:
   X                         discard
    ╚                        shuffle
     ;;                      dupe twice
       pX@dX                 remove first element of first dupe and last element of second dupe
            Z                zip
             `i@-0<`MπY      test if all differences are positive (if any are not, the list is not sorted), negate (1 if not sorted else 0)

3

এমএটিএল, 17 16 বাইট

@ লুইস মেন্ডোকে ধন্যবাদ নাল অ্যারে তৈরি করে একটি বাইট সংরক্ষণ করা হয়েছে

vTbtX<-QI$(f8M+q

বালতি বাছাই। 2 31 -1 এর চেয়ে বেশি পরিসীমা দিয়ে এটি চেষ্টা করবেন না ।

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

ব্যাখ্যা

v                  % push an empty array
 T                 % push 1
  b                % bubble the input array up to the top of the stack
   t               % duplicate it
    X<             % find the minimum
      -            % subtract min from input array
       Q           % and increment to adjust for 1-based indexing
        I$(        % resulting array used as indices of empty array 
                   % (the [] way up at the top) that are assigned 1 (from T)
           f       % find the nonzero indices
            8M     % magically retrieve the 4th previous function input :/
                     (aka, the min input array value)
              +    % add it to the indices
               q   % and decrement

তিল:

  • আপনি এমএটিএল-তে খালি অ্যারেটি ব্যবহার করে []এটি বাড়িয়ে তুলতে পারেন, যেমনটি ম্যাটল্যাবের মতো
  • (অ্যাসাইনমেন্ট ইনডেক্সিংয়ের জন্য কীভাবে ব্যবহার করবেন
  • কীভাবে Mস্বয়ংক্রিয় ক্লিপবোর্ড ব্যবহার করবেন

নতুন দিন, নতুন টিআইএল:

  • vertcat জ্যোতিষ্কিকভাবে একটি খালি অ্যারে তৈরি করে যখন সংঘবদ্ধ করার জন্য স্ট্যাকের কিছু নেই

আপনার টিআইএল যোগ করুন: একটি প্রাথমিক [] দ্বারা প্রতিস্থাপন করা যেতে পারে v। এর কারণ হ'ল ডিফল্ট ইনপুটগুলির সংখ্যা vহ'ল স্ট্যাকের উপাদানগুলির সংখ্যা
লুইস মেন্ডো

@ লুইস মেন্ডো সুও ... স্ট্যাকের যদি একটি অ্যারে থাকে ...? তদন্ত।
বেকার 15

তারপরে এটি কিছুই করে না। এটি হিসাবে ভাবেনvertcat(STACK{:})
লুইস মেন্ডো

3

জুলিয়া, 28 27 বাইট

x->colon(extrema(x)...)∩x

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


এটি কি ন্যূনতম থেকে সর্বোচ্চ পর্যন্ত সীমা তৈরি করে এবং মূল তালিকাটি ছেদ করে? যে একটি গন্ধ হবে en.wikipedia.org/wiki/Counting_sort : একটি দম্পতি অন্যান্য উত্তর মত codegolf.stackexchange.com/a/117648/30206 । (প্রশ্নটি কী ধরণের তা নির্দিষ্ট করে বলতে
পিটার

3

আর, 68 বাইট

সাজানো তালিকা যা ইনপুট iএবং আউটপুট নেয় o

o<-i
for(j in 1:length(i)){
x<-(i-min(i))==0
o[j]<-i[x]
i<-i[!x]
}
o

ব্যাখ্যা:

o<-i                      # Defines output as o
 for(j in 1:length(i)){   # Initializes loop for length of input
  x<-(i-min(i))==0        # Generates logical vector by finding the value 0 
                          # of input less the minimum of input. 
   o[j]<-i[x]             # Puts the smallest value at position j
    i<-i[!x]              # Removes the smallest value from input
      }                   # Ends loop
       o                  # Returns sorted list

অনুমতিগুলি এড়ানো মানে এটি বড় তালিকা তুলনামূলকভাবে দ্রুত বাছাই করতে পারে। "কৌশল" হ'ল ইনপুট থেকে ক্ষুদ্রতম মান বিয়োগ করা একক 0 ছেড়ে যায় যা ক্ষুদ্রতম মান এবং ক্ষুদ্রতম মানের অবস্থান উভয়ই নির্ধারণ করে।


3

জাভা 8, 112 92 বাইট

এখানে অন্য একটি বাছাই বাছাই করা হয়। ইনপুটটি List tপূর্ণসংখ্যার একটি এবং সাজানো আউটপুট স্ট্যান্ডার্ড আউটতে মুদ্রিত হয়।

t->{for(;0<t.size();System.out.println(t.remove(t.indexOf(java.util.Collections.min(t)))));}

হালনাগাদ

  • -20 [16-08-21] একটি ল্যাম্বডা ব্যবহার করেছেন

হাই ননলাইনার, এবং পিপিসিজিতে আপনাকে স্বাগতম!
isaacg

প্রোগ্রামিং ধাঁধা এবং কোড গল্ফ স্বাগতম! এটি প্রদর্শিত হবে যে আপনার কোডটি একটি পরিবর্তনশীলকে tবিদ্যমান হিসাবে ধরে নিয়েছে , যা এটিকে একটি স্নিপেট করে তোলে; আমাদের ডিফল্ট I / O ফর্ম্যাটগুলি ব্যবহার করে এমন পুরো প্রোগ্রাম বা ফাংশন হওয়ার জন্য আমাদের সাবমিশনের প্রয়োজন । বাইট গণনায় ফ্যাক্ট করার জন্য আমাদেরও আমদানি প্রয়োজন। যদি আপনার কোন প্রশ্ন থাকে তাহলে আমার জানতে দিন!
অ্যালেক্স এ।

সম্পদের জন্য ধন্যবাদ! আমি আমার উত্তরটি একটি ফাংশন হতে এবং আমদানি অন্তর্ভুক্ত করতে সংশোধন করেছি।
ননলাইনারফ্রুট 13

2

রেটিনা, 95

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

-\d+
$*n
\d+
$*11
+`(1+) (n+)
$2 $1
+`\b(n+) (\1n+)|(1+)(1+) \3\b
$2$3 $1$3$4
1(1*)
$.1
n+
-$.&
  • মঞ্চ 1 - রূপ হিসাবে-সংখ্যার সাথে অখণ্ডে রূপান্তর করতে হবে n; -চিহ্নগুলি ফেলে দিন ।
  • পর্যায় 2 - 1অঙ্ক হিসাবে veary এবং শূন্য পূর্ণসংখ্যার একরূপে রূপান্তর ; 1প্রতিটি এক যোগ করুন , যাতে শূন্য দ্বারা প্রতিনিধিত্ব করা হয় 1
  • পর্যায় 3 - সমস্ত-সম্মুখভাগে সরান।
  • পর্যায় 4 - বাছাই করুন: উচ্চ-বর্ধনের আগে সবচেয়ে বড় মাত্রা (অর্থাত্ ক্ষুদ্রতম সংখ্যাসূচক) সহ অল-ওয়েভগুলি সরান। আরও বড় + ভ্যাসের আগে আরও ছোট + ভেসে যান।
  • মঞ্চ 5 - এর থেকে 1 সরান এবং + ইউনারিগুলিকে দশমীতে রূপান্তর করুন।
  • মঞ্চ 6 - চিহ্নগুলি সহ দশকে দশকে ফিরে রূপান্তর করুন aries

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



@LakakyNun যা তালিকার শেষ উপাদানটি বাছাই করে না।
mbomb007

@ mbomb007 ঠিক আছে, কিছু মনে করবেন না।
লিকি নুন

2

রুবি, 22 বাইট

একটি দ্রুত ক্রমবর্ধমান বাছাই। ও (এন!) স্পেস এবং সময়তে চালিত হয়।

->a{a.permutation.min}

2

ক্লোজার, 73 35 বাইট

বোগোসর্ট :)

#(if(apply < %)%(recur(shuffle %)))

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

#(reduce(fn[r i](let[[a b](split-with(partial > i)r)](concat a[i]b)))[]%)

r"I এর চেয়ে ছোট" এবং "i এর চেয়ে বড়" অংশগুলিতে বিভক্ত করে বাছাই করা তালিকায় হ্রাস । আমার ধারণা এটি সন্নিবেশ সাজানো


নিস! আমি জানতাম না আপনি recurকোনও বেনামি অনুষ্ঠানে থাকতে পারেন। সম্পর্কেও জানতাম না shuffle
মাতিয়াস বজরল্যান্ড

2

রুবি, 26 24 বাইট

মান শঙ্কার উত্তরের সমান বাছাই বাছাই করুন, তবে বৃহত্তর গল্ফতার জন্য পৃথক পদ্ধতির ব্যবহার।

স্পেসিফিকেশন অনুযায়ী: "ইনপুট / আউটপুট আপনি যে কোনও পদ্ধতিতে বেছে নিতে পারেন, যতক্ষণ না এটি মানুষের পাঠযোগ্য read" আমি মনে করি এটি বিবরণ ফিট করে, আউটপুট একটি একক উপাদান সহ অ্যারের অ্যারে।

->l{l.map{l-l-=[l.min]}}

উদাহরণ:

->l{l.map{l-l-=[l.min]}}[[2,4,3,1]]
=> [[1], [2], [3], [4]]

2

জাভা 7, 106 104 বাইট

void a(int[]a){for(int b=a.length-1,d=0,c=0,e;d<b*b;c=++d%b)if(a[c]>a[c+1]){e=a[c];a[c++]=a[c];a[c]=e;}}

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

-1 বাইট ধন্যবাদ Geobits ইশারা স্বাভাবিক সোয়াপিং xor'ing beats যে জন্য
-1 থেকে বাইট ধন্যবাদ লিকি নূনের ইশারা যে আমি জন্য-লুপ সব int- এ ঘোষণা স্থানান্তর করতে পারেন জন্য

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


2

রুবি, 22 বাইট

->a{[*a.min..a.max]&a}

ইনপুট অ্যারের ন্যূনতম এবং সর্বাধিক উপাদানগুলির মধ্যে সীমার বাইরে একটি অ্যারে তৈরি করে। দুটি অ্যারের মধ্যে ছেদটি ফেরৎ দেয়।


আমি অনুমান করি যে এটি এক প্রকারের এন.ইউইকিপিডিয়া.আর / উইকি / অ্যাকাউন্টিং_সোর্ট
পিটার

@ পিটারকর্ডস যে দফার বিষয়টি ছিল
dkudriavtsev

প্রশ্নটি কী ধরণের তা বর্ণনা করতে আপনাকে জিজ্ঞাসা করে, তাই আমি ভেবেছিলাম যে এটি সুপরিচিত অ্যালগরিদমের সাথে লিঙ্ক করার পাশাপাশি এটি আসলে কী করে তা বর্ণনা করার জন্য এটি দরকারী।
পিটার

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