Tri cassé fiable

23

Étant donné une liste d'entiers positifs qui contient au moins 3 entrées distinctes, affichez une permutation de cette liste qui n'est pas triée dans l'ordre croissant ou décroissant.

Exemples

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..

Merci @Arnauld et @NoOneIsHere pour le titre!

flawr
la source
L'entrée sera-t-elle toujours triée?
xnor
Le tri doit-il être "fiable" dans la mesure où, étant donné un ensemble d'entrées donné, il produit toujours la même permutation que la sortie? Ou doit-il seulement être "fiable" dans la mesure où la sortie n'est pas triée?
Wildcard
Il doit simplement satisfaire aux spécifications.
flawr
Un tableau imbriqué serait-il autorisé en sortie? par exemple [2,[1,3]].
Shaggy
Non, il doit s'agir d'un seul tableau / liste.
flawr

Réponses:

14

JavaScript (ES6), 39 34 octets

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

Triez le tableau par ordre croissant, éclatez le dernier élément et utilisez-le comme premier élément d'un nouveau tableau. Ensuite, détruisez les éléments restants du tableau d'origine dans le nouveau tableau (dans JS, les deux sortet popmodifiez le tableau d'origine).


Essaye-le

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>

Hirsute
la source
Pourquoi ne peux-tu pas le faire a.sort()?
geokavel
1
@geokavel: Parce que la sortméthode de JS trie lexicographiquement.
Shaggy
3
Alors parce qu'il est déjà cassé de manière non fiable? = D
jpmc26
7

Gelée , 3 octets

Ṣṙ1

Essayez-le en ligne!

Erik le Outgolfer
la source
Ṣṙ-fonctionne aussi (juste envie de dire ça; vous saviez probablement: P)
HyperNeutrino
@HyperNeutrino Yep qui fonctionne aussi, même nombre de personnes: p
Erik the Outgolfer
Dans quel encodage est Ṣṙ1seulement trois octets? En UTF-8, c'est 7 octets.
heinrich5991
2
@ heinrich5991 Jelly utilise une page de code personnalisée .
cole
J'ai l'impression que tous ceux qui utilisent Jelly doivent avoir une extension de navigateur qui ajoute un bouton pour publier automatiquement le commentaire "Jelly utilise une page de code personnalisée".
12Me21
6

Ohm , 2 octets

S╙

Essayez-le en ligne!

Triez et faites pivoter vers la droite.

totalement humain
la source
6

Japt , 3 octets

n é

Essaye-le

Trie ( n) le tableau et le fait pivoter ( é) d'un élément vers la droite.

Hirsute
la source
5

Python 3 , 31 octets

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

Essayez-le en ligne!

-1 octet grâce à xnor

HyperNeutrino
la source
... Comment n'ai-je pas vu cette logique de base. >.>
totalement humain
@totallyhuman lol mes 3 réponses font exactement la même chose. mais ha: P J'ai également fusionné votre PR pour iOS -> MacOS: P
HyperNeutrino
Oui, j'ai remarqué et supprimé ma branche. : P
totalement humain
Mettre le minà la fin économise un octet.
xnor
5

APL, 9 octets

{1⌽⍵[⍋⍵]}

Essayez-le en ligne!

Comment?

⍵[⍋⍵] - trier la liste

1⌽ - tourner de 1

Uriel
la source
Fonctionne également dans GNU et ngn!
Zacharý
@ Zacharý suppose que je vais juste supprimer le dyalog ...
Uriel
5

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

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

Invite à entrer le format {1,2,3,4}.

TI-Basic est un langage à jetons, tous les jetons utilisés ici sont à un octet.

Explication:

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
pizzapants184
la source
5

Pyth , 7 5 4 octets

.P1S

Essayez-le en ligne!

-1 octet grâce à FryAmTheEggman

Il n'y a personne
la source
Vous pouvez enregistrer un octet en utilisant des permutations: pyth.herokuapp.com/…
FryAmTheEggman
@FryAmTheEggman merci, je le mettrai à jour quand j'arriverai à un ordinateur.
NoOneIsHere
3

Rétine , 21 octets

O#`
s`(.*)¶(.*)
$2¶$1

Essayez-le en ligne! Trier et faire pivoter comme d'habitude. Au moins, il n'y a pas de conversion unaire cette fois.

Neil
la source
3

Java 8, 68 37 octets

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

-31 octets grâce à @Nevay (oublié que Java 8 avait une List#sort(Comparator)méthode ..)

Modifie l'entréeArrayList , au lieu d'en renvoyer une nouvelle.

Explication:

Essayez-le ici.

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
Kevin Cruijssen
la source
Vous pouvez utiliser l->{l.sort(null);java.util.Collections.rotate(l,1);}pour enregistrer 16 octets.
Nevay
2
Vous pouvez également utiliser l->{l.sort(null);l.add(l.remove(0));}pour économiser 31 octets (nécessite l'utilisation d'une liste de taille non fixe).
Nevay
@Nevay nice one, mais ... les parenthèses sont un peu décalées en ce qui concerne la documentation: la réalité est que les opérations optionnelles addet removedoivent être implémentées; rien n'est dit sur la liste de taille fixe ... Kevin Cruijssen, étant donné qu'il existe de bien meilleures alternatives dans les commentaires précédents, j'attendrai une modification avant +1.
Olivier Grégoire
3

Haskell, 36 37 octets

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

Utilisez des modèles de vue pour faire correspondre la tête d'une version triée de la liste d'entrée, puis ajoutez le premier élément de la liste à la fin de la liste restante.

Les modèles de vue n'en valent pas la peine. Triez la liste, retirez la tête, ajoutez-la à la fin. Dans ce cas, il s'avère que la solution naïve typée de manière compacte est la meilleure.

typedrat
la source
1
Bienvenue chez PPCG! Excellente idée d'utiliser des modèles de vue, je ne les connaissais pas auparavant. Malheureusement, ils ne sont pas activés dans Haskell standard, donc selon les règles du site, vous devez inclure les octets pour l'indicateur de ligne de commande -XViewPatterns. Compter ceux-ci de la manière standard f(a:b)=b++[a];f.sortest plus court.
Laikoni
Je ne pensais pas en quelque sorte au drapeau nécessaire. Je suppose que je les utilise tellement que j'ai oublié que je l'allume dans mes fichiers Cabal et que cela ne fait pas partie de la langue.
typedrat
2

Perl 6 ,  43  19 octets

{first {![<=]($_)&&![>=] $_},.permutations}

Essayez-le

*.sort[1..*,0].flat

Essayez-le

Notez que [1..*,0]cela entraînerait ((2,3),1), .flatest donc là pour le transformer en(2,3,1)

Brad Gilbert b2gills
la source
2

Mathematica, 18 octets

RotateLeft@Sort@#&

Essayez-le en ligne!

J42161217
la source
4
Plus court:RotateLeft@*Sort
JungHwan Min
2

Ly , 7 octets

&nasprl

Essayez-le en ligne!

Ugh, ruiner le genre coûte tellement cher!

Explication:

&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
LyricLy
la source
2

R, 33 32 29 octets

Prend l'entrée de stdin. Trie la liste, puis déplace le premier élément à la fin, en s'assurant qu'il n'est plus trié. Enregistré trois octets en raison de Giuseppe.

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

Une autre implémentation, même nombre d'octets:

c((x<-sort(scan()))[-1],x[1])
rturnbull
la source
c(sort(x<-scan())[-1],min(x))est de 29 octets utilisant essentiellement la même idée que la vôtre.
Giuseppe
1

Ohm , 2 octets

S╜

Essayez-le en ligne!

Je pense que cela est assez différent du message de totalement humain pour poster une nouvelle réponse; J'espère que cela ne vous dérange pas: P EDIT : DAMMIT YOU NINJA'D ME

HyperNeutrino
la source
Ninja'd vous. ;)
totalement humain
1

Python, 31 octets

def f(a):a[1:]=a[a.sort():0:-1]

Encore une autre solution Python.

Malheureusement, celui-ci a la même longueur que la réponse d' HyperNeutrino .

tsh
la source
1

Rétine , 10 octets

O#`
O^#-2`

Essayez-le en ligne!

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

Cela laisse la liste avec le 2e élément le plus élevé en premier et le dernier élément le plus élevé qui n'est jamais correctement trié

PunPun1000
la source
1

Rubis, 18 octets

Soumis sur mobile. Veuillez ne pas me tuer pour des problèmes.

->a{a.sort.rotate}
dkudriavtsev
la source
1

Pyth, 5 octets

.>SQ1

Explication

SQ - trier la liste d'entrée

.>SQ1 - rotation cyclique de la liste des entrées de 1

Karan Elangovan
la source
1

Proton , 19 octets

a=>sorted(a)[1to,0]

Essayez-le en ligne!

-2 octets indirectement grâce à xnor

Ne travaille pas encore sur TIO; en attente d'une traction.

HyperNeutrino
la source
1

Python 3 , 28 octets

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

Essayez-le en ligne!

a.sort()trie asur place et retourne None. Nonepeut être utilisé comme indice de découpage et équivaut à omettre cet index.

Chat d'affaires
la source
1

PHP, 44 octets

nécessite PHP 5.4 ou une version ultérieure pour une syntaxe de tableau courte.

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

trier les arguments, remplacer le 0-ème argument par le dernier argument supprimé, imprimer.
Courez avec -nrou essayez-le en ligne .


Le 0-ème argument est le nom du fichier de script, "-"si vous appelez PHP avec -r. "-"est comparé aux autres arguments sous forme de chaîne, et depuis ord("-")==45, il est plus petit que n'importe quel nombre. Les chiffres eux - mêmes, bien que les chaînes, sont comparés en tant que numéros: "12" > "2".

php -nr '<code>' 3 4 2 5 1et sort($a=&$argv)conduire à $a=["-","1","2","3","4","5"]
[array_pop($a)]+$aest [0=>"5"]+[0=>"-",1=>"1",2=>"2",3=>"3",4=>"4"],
ce qui se traduit par [0=>"5",1=>"1",2=>"2",3=>"3",4=>"4"].

Titus
la source
Pouvez-vous expliquer pourquoi [array_pop ($ a)] + $ a n'écrase pas le 0ème index de $ a? Par exemple: $ a = [1,2,3,4,5], array_pop ($ a) = 5, $ a = [1,2,3,4]. Si vous faites [5] + [1,2,3,4], cela ne devrait-il pas finir par être [5,2,3,4] parce que les deux tableaux ont un indice 0? Je suis confus parce que le manuel PHP dit "L'opérateur + renvoie le tableau de droite ajouté au tableau de gauche; pour les clés qui existent dans les deux tableaux, les éléments du tableau de gauche seront utilisés et la correspondance les éléments du tableau de droite seront ignorés. "
jstnthms
@jstnthms L' +opérateur n'ajoute pas, il fusionne (sans réordonner les index; mais cela n'a pas d'importance ici). Le point important est qu'il $apointe vers $argvet $argv[0]contient le nom du fichier du script, les arguments commencent à l'index 1. J'ai étendu la description. Merci pour la question.
Titus
1

Julia, 23 octets

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

Légèrement plus court que, mais équivalent à f(x)=circshift(sort(x),1). Je souhaiterais pouvoir créer une méthode basée sur ce selectqui était plus, compact mais je ne peux pas

Lyndon White
la source