Güvenilir Kırık Sıralama


23

En az 3 ayrı giriş içeren bir pozitif tamsayı listesi verildiğinde, bu listenin artan veya azalan düzende sıralanmayan bir permütasyonunu gösterir.

Örnekler

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 ve @NoOneIsHere başlık için teşekkürler!


Giriş her zaman sıralanacak mı?
xnor

Sıralama, verilen bir girdiler kümesinde verilen "güvenilir" olmalı, her zaman çıktıyla aynı permütasyonu oluşturur? Yoksa çıktı sıralanmadığı için yalnızca "güvenilir" olması gerekir mi?
Joker

Sadece özellikleri tatmin etmeli.
kusur

İç içe diziye çıktı olarak izin verilebilir mi? ör [2,[1,3]].
Shaggy

Hayır, tek bir dizi / liste olmalı.
kusur

Yanıtlar:


14

JavaScript (ES6), 39 adet 34 bayt

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

Diziyi artan düzende sıralayın, son öğeyi açın ve onu yeni bir dizinin ilk öğesi olarak kullanın. Daha sonra, yeni diziye orijinal dizinin geri kalan elemanları destructure (JS, her iki sortve popözgün dizi değiştirme).


Dene

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>


Neden sadece yapamıyorsun a.sort()?
geokavel

1
@geokavel: Çünkü JS'nin sortmetodu sözlüksel olarak sıralar.
Shaggy

3
Yani zaten güvenilmez bir şekilde kırılmış mı? = D
jpmc26 4


7

Jöle , 3 bayt

Ṣṙ1

Çevrimiçi deneyin!


Ṣṙ-Ayrıca çalışır (sadece şunu söylemek gibi hissettim; Muhtemelen biliyordun: P)
HyperNeutrino

@HyperNeutrino Yep de çalışıyor, aynı bytecount: p
Outgolfer Erik

Hangi kodlamada Ṣṙ1yalnızca üç bayt var? UTF-8'de 7 bayttır.
heinrich5991

2
@ heinrich5991 Jelly, özel bir kod sayfası kullanıyor .
cole,

Jelly kullanan herkesin "Jelly özel bir kod sayfası kullanıyor" yorumunu otomatik olarak göndermek için bir düğme ekleyen bir tarayıcı uzantısına sahip olması gerektiğini düşünüyorum.
12:





5

TI-Basic (TI-84 Plus CE), 31 bayt

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

Biçimde giriş istemi {1,2,3,4}.

TI-Basic belirtilmiş bir dildir , burada kullanılan tüm belirteçler bir bayttır.

Açıklama:

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 bayt

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

@Nevay sayesinde -31 bayt (Java 8'in bir List#sort(Comparator)metodu olduğunu unuttum ..)

Girişi değiştirirArrayListYeni bir tane döndürmek yerine .

Açıklama:

Burada dene.

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

l->{l.sort(null);java.util.Collections.rotate(l,1);}16 bayt kaydetmek için kullanabilirsiniz .
Nevay

2
Alternatif olarak, l->{l.sort(null);l.add(l.remove(0));}31 bayt kaydetmek için kullanabilirsiniz (sabit olmayan boyutta bir listenin kullanılmasını gerektirir).
Nevay

@Nevay nice, ama ... parantez dokümantasyon konusunda biraz kapalı: Gerçek şu ki isteğe bağlı işlemler addve removeuygulanması gerekiyor; sabit boyutlu liste hakkında hiçbir şey söylenmiyor ... Kevin Cruijssen, önceki yorumlarda çok daha iyi alternatifler olduğu için, + 1ing'den önce bir düzenleme bekleyeceğim.
Olivier Grégoire

3

Haskell, 36 37 bayt

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

Giriş listesinin sıralanmış bir sürümünün başındaki eşleşmesi için görünüm kalıplarını kullanın, ardından listenin ilk öğesini kalan listenin kuyruğuna ekleyin.

Görünüm kalıpları buna değmez. Listeyi sırala, kafayı çıkar ve sonuna kadar ekle. Bu durumda, kompakt bir şekilde yazılan saf çözümün en iyisi olduğu ortaya çıktı.


1
PPCG'ye Hoşgeldiniz! Görünüm kalıplarını kullanmak harika bir fikir, daha önce onlar hakkında bilmiyordum. Ne yazık ki, standart Haskell'de etkin değildir, bu nedenle site kuralları için komut satırı bayrağı için baytları eklemeniz gerekir -XViewPatterns. Bunları standart yoldan saymak f(a:b)=b++[a];f.sortdaha kısa.
Laikoni

Her nasılsa ihtiyaç duyulan bayrak hakkında düşünmüyordum. Onları o kadar çok kullanıyorum ki Cabal dosyalarımda açıldığımı ve dilin bir parçası olmadığını unuttum.
Typedrat



2

Ly , 7 bayt

&nasprl

Çevrimiçi deneyin!

Sıralamayı mahvetmek çok pahalı!

Açıklama:

&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 bayt

Stdin'den girdi alır. Listeyi sıralar ve daha sonra sıralanmadığından emin olmak için ilk öğeyi sonuna kadar taşır. Giuseppe yüzünden üç bayt kurtardı.

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

Başka bir uygulama, aynı byte sayısı:

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

c(sort(x<-scan())[-1],min(x))Sizinki ile aynı fikri kullanan 29 bayttır.
Giuseppe 21




1

Retina , 10 bayt

O#`
O^#-2`

Çevrimiçi deneyin!

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

Bu, listeyi ilk önce en yüksek 2., en son en yüksek öğe ve asla doğru şekilde sıralanmayan öğeleri bırakır.


1

Ruby, 18 bytes

Submitted on mobile. Please don't kill me for problems.

->a{a.sort.rotate}

1

Pyth, 5 bytes

.>SQ1

Explanation

SQ - sort input list

.>SQ1 - rotate input list cyclicaly by 1



1

Python 3, 28 bytes

lambda a:a[1:a.sort()]+a[:1]

Try it online!

a.sort() sorts a in place and returns None. None can be used as a slicing index and is the same as omitting that index.




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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.