Le but de ce Code Golf est de créer un programme qui trie une liste de chaînes (par ordre croissant), sans utiliser de méthode de tri intégrée (comme Array.Sort()
en .NET, sort()
en PHP, ...). Notez que cette restriction exclut l'utilisation d'une méthode intégrée qui trie un tableau en ordre décroissant, puis en inversant le tableau.
Quelques détails:
Votre programme doit demander une entrée, et cette entrée est une liste de chaînes contenant uniquement des caractères alphabétiques en minuscules ASCII
a-z
, séparés par des virgules sans espaces. Par exemple:code,sorting,hello,golf
La sortie doit être la liste donnée de chaînes, mais triée par ordre croissant, toujours séparée par des virgules sans espaces. Par exemple:
code,golf,hello,sorting
Ruby
765451 caractèresla source
x=gets.scan /\w+/
k (16 caractères)
Ne respecte probablement pas vraiment l'esprit du problème. En k, il n'y a pas d' opérateur de tri intégré .
<x
renvoie une liste d'index des éléments en x dans l'ordre trié.la source
SED, 135
Basé sur mon entrée de tri précédente
la source
Ruby, 99 caractères ( type Gnome )
Cela bat à peine mon implémentation de type bulle:
Ruby,
110104101 caractères ( genre Bubble )Cela fait des
list.length
itérations, car le pire des cas prend deslist.length - 1
itérations et une autre n'a pas vraiment d'importance, et enregistre 2 caractères.Juste pour le plaisir, une version Quicksort:
Ruby, 113 caractères ( Quicksort )
la source
Haskell, 141
Au moins, c'est ... en quelque sorte efficace.
la source
m=minimum
s[]=[]
s l=m l:(s$l\\[m l])
(remplacez vos lignes 2 à 4 par ces lignes).init
ne semble pas être nécessaire car il n'y a ni fin,
ni fin de ligne.t s=let(a,b)=span(/=',')s in a:t(drop 1 b)
peut être raccourcie en utilisant un agent de motif, en utilisant(>',')
et en déposant l'espace entre1 b
:t s|(a,b)<-span(>',')s=a:t(drop 1b)
.x#(y:r)|y<x=y:x#r;x#r=x:r
est plus courte. Il peut être utilisé directement danst
et comme il n'utilise pas(\\)
etintercalate","
peut être remplacé partail.((',':)=<<)
, l'importation peut être supprimée. Tous ensemble 101 octets: essayez-le en ligne!vba, 165
la source
Split
.c=","
et l'appel dec
deux fois s'ajoutent en fait au nombre d'octets dans ce cas, contribuant à 7 octets au nombre d'octets, alors qu'en utilisant simplement "," deux fois contribueraient 6 octets. Vous pouvez réduire votre code d'octet en saisissant directement le sous-appel (sub q(s)
) et en supposant que s est de type variant \ string. Vous pouvez perdre un octet de plus en passantFor i=1 to
àfor i=1To
. vous pouvez perdre 5 octets en passantDebug.Print Join...
àDebug.?Join...
Scala, 122 octets
En une ligne (88 octets):
(il triera une liste en faisant simplement
list.permutations.fil...
)En tant que programme (122 octets):
Une version plus longue si vous voulez qu'elle soit lue depuis stdin.
Cette itération sur toutes les permutations de la liste donnée jusqu'à ce qu'elle tombe sur une liste triée. Ce n'est pas rapide car il faut environ 12 secondes pour trier une liste de 10 éléments et bien plus d'une minute pour une liste de 11 éléments.
Les éléments [Modifier] doivent être uniques ou
<
peuvent être remplacés par<=
. Aussi, désolé pour necro.la source
javascript 128
DEMO violon .
je cherche un moyen d'éliminer
b
.la source
[]
contour de la pièce après le?
pour enregistrer 2 caractèresSyntaxError: missing : in conditional expression
parce que?:;
(la sténographieif/else
) n'est censée prendre que deux morceaux de code à exécuter (c'est-à-diretrue?b++:b--;
) en utilisant[
,]
est un hack, je ne sais toujours pas pourquoi cela fonctionne, je pense que c'est compris comme un tableau vide , comme placer une chaîne ou un nombre aléatoire en tant que commande autonome. mais vous pouvez toujours vous sentir libre de voter.?:
priorité de l' opérateur est inférieure à,
{
,}
et cela n'a pas fonctionné - je comprendsSyntaxError: missing : after property id
. quant à la priorité, les parenthèses sont toujours les premières. je voudrais toujours un upvote ....PHP 83 octets
Une implémentation O (n 3 ) d'un tri de sélection. C'est le
Ó
caractère 211; une virgule inversée.Exemple d'utilisation:
la source
Python 3 (80 caractères)
Voici une variation de l'instruction while qui est de longueur égale:
la source
Mathematica
6656Quelques autres solutions sans le symbole intégré
Ordering
:Bogosort:
8474Tri par bulles:
9383Une autre solution aussi inefficace que le bogosort:
8272la source
Python 3.5+, 73 octets
Cela s'inspire de la réponse de Steven Rumbalski mais utilise la compréhension de liste au lieu d'une boucle while; le nombre d'itérations provient de la liste copiée,
l
c'est pourquoi cela nécessite des généralisations de décompression supplémentaires et Python 3.5la source
R
Tri des bulles:
122118 caractèresBogosort: 100 caractères
la source
Perl, 159
Cela n'a jamais eu de chance de gagner, mais j'ai décidé de la partager parce que j'aimais la logique même si c'est un bordel :) L'idée derrière, c'est de convertir chaque mot en un entier (fait en utilisant la fonction ord ), on enregistre le nombre comme clé dans un hachage et la chaîne comme valeur, puis nous itérons de plus en plus à travers tous les entiers (1..10 ** 100 dans ce cas) et de cette façon nous obtenons nos chaînes triées.
AVERTISSEMENT : n'exécutez pas ce code sur votre ordinateur, car il parcourt des trillions + d'entiers. Si vous voulez le tester, vous pouvez abaisser la limite de plage supérieure et saisir des chaînes non longues. Si, pour une raison quelconque, cela est contraire aux règles, veuillez me le faire savoir et je supprimerai l'entrée!
la source
JS: 107 caractères - Bubble Sort
J'ai regardé la réponse de @ tryToGetProgrammingStraight et j'ai essayé de l'améliorer, mais j'ai fini par l'implémenter légèrement différemment.
la source
Java, 134 octets
Une méthode qui implémente Gnome Sort.
la source
Swift, 101 octets
Non golfé:
la source
𝔼𝕊𝕄𝕚𝕟, 24 caractères / 30 octets (non compétitif)
Try it here (Firefox only).
Utilisation du tri par sélection!
Explication
Supprime et pousse de manière récursive le minimum de l'entrée vers un autre tableau.
la source
Ceylan (Bogosort), 119
Essayez-le en ligne!
J'ai trouvé la
permutations
méthode et je me suis donc retrouvé avec Bogosort (une variante non aléatoire).Formaté et commenté:
Sans le formatage et l'analyse, il ne fait que 90 octets:
Essayez-le en ligne!
la source
Perl 5 , 77 octets
Essayez-le en ligne!
Tri de bulles simple.
la source
ruby -plaF,
, 70 octetsO (n), si vous prétendez que le redimensionnement et le compactage d'un tableau sont gratuits (ce n'est vraiment pas gratuit).
Nous créons un tableau imbriqué profondément et inégalement
o
en plaçant une chaîne avec les octets b 1 , b 2 ... b n dans le tableau à la position o [b 1 ] [b 2 ] ... [b n ]. Le résultat ressemble à[,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,["a,",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, [,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, ["abc,"], ["abd,"], ["abe,"]], ["ac,"], ["ad,"]],, ["c,"]]
Ensuite, nous l'aplatissons et le sortons.
la source
Tcl , 211 octets
Essayez-le en ligne!
la source