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!


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>


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!


Ṣṙ-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




5

APL, 9 octets

{1⌽⍵[⍋⍵]}

Essayez-le en ligne!

Comment?

⍵[⍋⍵] - trier la liste

1⌽ - tourner de 1


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





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

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.


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

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

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])

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




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é


1

Rubis, 18 octets

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

->a{a.sort.rotate}

1

Pyth, 5 octets

.>SQ1

Explication

SQ - trier la liste d'entrée

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






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


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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.