विश्वसनीय रूप से टूटा हुआ क्रम


23

सकारात्मक पूर्णांक की एक सूची को देखते हुए जिसमें कम से कम 3 अलग-अलग प्रविष्टियाँ हैं, उस सूची के क्रमांकन का उत्पादन करता है जो आरोही या अवरोही क्रम में क्रमबद्ध नहीं है।

उदाहरण

1,2,3 -> 2,1,3 or 3,1,2 or 1,3,2 or 2,3,1
1,2,3,3 -> 2,1,3,3 or 3,1,2,3 or 1,3,2,3 etc..

धन्यवाद @Arnauld और @NoOneIsHere शीर्षक के लिए!


क्या इनपुट हमेशा छांटा जाएगा?
xnor

प्रविष्टियों के दिए गए सेट में "विश्वसनीय" की तरह होना चाहिए, यह हमेशा आउटपुट के समान क्रमांकन का उत्पादन करता है? या यह केवल "विश्वसनीय" होना चाहिए कि आउटपुट सॉर्ट न हो?
वाइल्डकार्ड

यह सिर्फ ऐनक को संतुष्ट करना चाहिए।
14

एक नेस्टेड सरणी आउटपुट के रूप में अनुमति दी जाएगी? जैसे, [2,[1,3]]
झबरा

नहीं, यह एक एकल सरणी / सूची होनी चाहिए।
त्रुटी

जवाबों:


14

जावास्क्रिप्ट (ईएस 6), 39 34 बाइट्स

a=>[a.sort((x,y)=>x-y).pop(),...a]

आरोही क्रम में सरणी को क्रमबद्ध करें, अंतिम तत्व को पॉप करें और इसे नए सरणी के पहले तत्व के रूप में उपयोग करें। फिर मूल सरणी के शेष तत्वों को नए सरणी में नष्ट कर दें (जेएस में, दोनों sortऔर popमूल सरणी को संशोधित करें)।


झसे आज़माओ

o.innerText=(f=

a=>[a.sort((x,y)=>x-y).pop(),...a]

)(i.value=[1,2,3]);oninput=_=>o.innerText=f(i.value.split`,`)
<input id=i><pre id=o>


तुम सिर्फ इतना क्यों नहीं कर सकते a.sort()?
जियोकॉवेल

1
@geokavel: क्योंकि JS की sortविधि शाब्दिक है ।
शैगी

3
इसलिए क्योंकि यह पहले से ही टूटा हुआ है? = D
jpmc26


7

Ṣṙ-यह भी काम करता है (बस ऐसा कहकर महसूस किया; आप शायद जानते थे: पी)
हाइपरएनुट्रिनो

@ हाइपर यूट्रीनो येप भी काम करता है, वही बायटेकाउंट: पी
एरिक द आउटगॉल्फ

किस एन्कोडिंग में Ṣṙ1केवल तीन बाइट्स हैं? UTF-8 में, यह 7 बाइट्स है।
Heinrich5991

2
@ heinrich5991 जेली एक कस्टम कोडपेज का उपयोग करता है ।
कोल

मुझे लगता है कि हर कोई जो जेली का उपयोग करता है उसके पास एक ब्राउज़र एक्सटेंशन होना चाहिए जो "जेली एक कस्टम कोडपेज का उपयोग करता है" टिप्पणी को स्वचालित रूप से पोस्ट करने के लिए एक बटन जोड़ता है।
12M2121



5

पायथन 3 , 31 बाइट्स

lambda a:sorted(a)[1:]+[min(a)]

इसे ऑनलाइन आज़माएं!

-1 बाइट एक्सनोर के लिए धन्यवाद


... मैंने इस बुनियादी तर्क को कैसे नहीं देखा। >।>
बिलकुल अमानवीय

@totallyhuman मेरे सभी 3 उत्तर ठीक वही काम करते हैं। लेकिन हा: पी। इसके अलावा मैंने iOS के लिए आपके PR को मर्ज कर दिया -> MacOS: P
HyperNeutrino

हाँ, मैंने अपनी शाखा को देखा और हटा दिया। : पी
बिलकुल अमानवीय

लाना minअंत में एक बाइट बचाता है।
xnor


5

टीआई-बेसिक (TI-84 Plus CE), 31 बाइट्स

Prompt A
SortA(LA
max(LA→B
dim(LA)-1→dim(LA
augment({B},LA

प्रारूप में इनपुट के लिए संकेत {1,2,3,4}

टीआई-बेसिक एक टोकन भाषा है , यहां इस्तेमाल किए जाने वाले सभी टोकन एक-एक बाइट हैं।

स्पष्टीकरण:

Prompt A         # 3 bytes, store user input in LA
SortA(LA         # 4 bytes, sort LA ascending
max(LA→B         # 6 bytes, save the last value in the sorted list to B
dim(LA)-1→dim(LA # 11 bytes, remove the last value from LA
augment({B},LA   # 7 bytes, prepend B to LA and implicitly print the result





3

Java 8, 68 37 bytes

l->{l.sort(null);l.add(l.remove(0));}

-31 bytes thanks to @Nevay (forgot Java 8 had a List#sort(Comparator) method..)

Modifies the input-ArrayList, instead of returning a new one.

Explanation:

Try it here.

l->{                   // Method with ArrayList parameter and no return-type
  l.sort(null);        //  Sort the input-list (no need for a Comparator, thus null)
  l.add(l.remove(0));  //  Remove the first element, and add it last
}                      // End of method

You can use l->{l.sort(null);java.util.Collections.rotate(l,1);} to save 16 bytes.
Nevay

2
Alternatively you can use l->{l.sort(null);l.add(l.remove(0));} to save 31 bytes (requires the usage of a not fixed sized list).
Nevay

@Nevay nice one, but... the parentheses are a bit off in regards to the documentation: the reality is that the optional operations add and remove must be implemented; nothing is said about fixed-sized list... Kevin Cruijssen, given that there are much better alternatives in the previous comments, I'll wait for an edit before +1ing.
Olivier Grégoire

3

Haskell, 36 37 bytes

import Data.List
f(a:b)=b++[a];f.sort

Use view patterns to match on the head of a sorted version of the input list, then append the first item of the list to the tail of the remaining list.

View patterns aren't worth it. Sort the list, take the head off, append it to the end. In this case, it turns out that the naive solution typed out compactly is the best.


1
Welcome to PPCG! Great idea to use view patterns, I didn't know about them before. Unfortunately, they are not enabled in standard Haskell, so per site rules you need to include the bytes for the command line flag -XViewPatterns. Counting those the standard way f(a:b)=b++[a];f.sort is shorter.
Laikoni

I somehow wasn't thinking about the flag needed. I guess I use them so much that I forgot that I turn it on in my Cabal files and that it's not part of the language.
typedrat



2

Ly, 7 bytes

&nasprl

Try it online!

Ugh, ruining the sort is so expensive!

Explanation:

&nasprl

&n      # take input as a list of numbers
  a     # sort
   sp   # save top of stack and pop
     r  # reverse stack
      l # load saved item

2

R, 33 32 29 bytes

Takes input from stdin. Sorts the list and then moves the first element to the end, ensuring that it is no longer sorted. Saved three bytes due to Giuseppe.

c(sort(x<-scan())[-1],min(x))

Another implementation, same byte count:

c((x<-sort(scan()))[-1],x[1])

c(sort(x<-scan())[-1],min(x)) is 29 bytes using essentially the same idea as yours.
Giuseppe




1

Retina, 10 bytes

O#`
O^#-2`

Try it online!

O#`     Sort the list
O^#-2`  Reverse sort the list other than the last element

This leaves the list with the 2nd highest element first and the highest element last which is never correctly sorted








1

PHP, 44 bytes

requires PHP 5.4 or later for short array syntax.

sort($a=&$argv);print_r([array_pop($a)]+$a);

sort arguments, replace 0-th argument with removed last argument, print.
Run with -nr or try it online.


The 0-th argument is the script file name, "-" if you call PHP with -r. "-" is compared to the other arguments as a string, and since ord("-")==45, it is smaller than any number. The numbers themselves, although strings, are compared as numbers: "12" > "2".

php -nr '<code>' 3 4 2 5 1 and sort($a=&$argv) lead to $a=["-","1","2","3","4","5"]
[array_pop($a)]+$a is [0=>"5"]+[0=>"-",1=>"1",2=>"2",3=>"3",4=>"4"],
which results in [0=>"5",1=>"1",2=>"2",3=>"3",4=>"4"].


Can you explain why [array_pop($a)]+$a doesn't overwrite the 0th index of $a? For example: $a=[1,2,3,4,5], array_pop($a) = 5, $a=[1,2,3,4]. If you do [5]+[1,2,3,4], shouldn't it end up being [5,2,3,4] because both arrays have a 0th index? I'm confused because the PHP manual says "The + operator returns the right-hand array appended to the left-hand array; for keys that exist in both arrays, the elements from the left-hand array will be used, and the matching elements from the right-hand array will be ignored."
jstnthms

@jstnthms The + operator does not append, it merges (without reordering the indexes; but that doesn´t matter here). The important point is that $a points to $argv and $argv[0] contains the script´s file name, the arguments start at index 1. I extended the description. Thanks for the question.
Titus

1

Julia, 23 bytes

f(x)=sort(x)[[2:end;1]]

Slightly shorter than, but equivalent to f(x)=circshift(sort(x),1). I wish I could makeamethod based on select that was more, compact but I can not

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.