El objetivo de este Code Golf es crear un programa que clasifique una lista de cadenas (en orden ascendente), sin utilizar ningún método de ordenamiento incorporado (como Array.Sort()
en .NET, sort()
en PHP, ...). Tenga en cuenta que esta restricción excluye el uso de un método incorporado que ordena una matriz descendente y luego invierte la matriz.
Algunos detalles:
Su programa debe solicitar una entrada, y esta entrada es una lista de cadenas que contienen solo caracteres alfabéticos en minúsculas ASCII
a-z
, separados por comas y sin espacios. Por ejemplo:code,sorting,hello,golf
La salida debe ser la lista de cadenas dada, pero ordenada en orden ascendente, aún separada por comas sin espacios. Por ejemplo:
code,golf,hello,sorting
Ruby
765451 caracteresfuente
x=gets.scan /\w+/
k (16 caracteres)
Probablemente no esté realmente a la altura del espíritu del problema. En k, no hay un operador de ordenamiento integrado .
<x
devuelve una lista de índices de elementos en x en orden ordenado.fuente
SED, 135
Basado en mi entrada de clasificación anterior
fuente
Ruby, 99 caracteres ( tipo Gnome )
Esto apenas supera mi implementación de tipo burbuja:
Ruby,
110104101 caracteres ( ordenamiento de burbuja )Esto hace
list.length
iteraciones, porque el peor de los casos tomalist.length - 1
iteraciones y una más realmente no importa, y guarda 2 caracteres.Solo por diversión, una versión Quicksort:
Ruby, 113 caracteres ( Quicksort )
fuente
Haskell, 141
Al menos es ... algo eficiente.
fuente
m=minimum
s[]=[]
s l=m l:(s$l\\[m l])
(reemplace sus líneas 2–4 con estas líneas).init
no parece ser necesario ya que no hay ni un arrastre,
, ni un salto de línea final.t s=let(a,b)=span(/=',')s in a:t(drop 1 b)
puede acortarse mediante el uso de un protector de patrón, utilizando(>',')
y soltando el espacio entre1 b
:t s|(a,b)<-span(>',')s=a:t(drop 1b)
.x#(y:r)|y<x=y:x#r;x#r=x:r
es más corto. Se puede usar directamentet
y, como no se usa(\\)
yintercalate","
se puede reemplazartail.((',':)=<<)
, la importación se puede descartar. Todos juntos 101 bytes: ¡ Pruébelo en línea!vba, 165
fuente
Split
.c=","
y la llamadac
dos veces en realidad se suman al recuento de bytes en este caso, contribuyendo con 7 bytes al recuento de bytes, mientras que simplemente usando "," dos veces contribuiría 6 bytes. Puede reducir su código de bytes tomando la entrada directamente de la llamada secundaria (sub q(s)
) y suponiendo que s es de tipo variant \ string. Puede perder un byte más cambiandoFor i=1 to
afor i=1To
. puede perder 5 bytes cambiandoDebug.Print Join...
aDebug.?Join...
Scala, 122 bytes
Como una línea (88 bytes):
(ordenará una lista simplemente haciendo
list.permutations.fil...
)Como programa (122 bytes):
Una versión más larga si quieres que lea desde stdin.
Esto itera sobre todas las permutaciones de la lista dada hasta que tropieza con una ordenada. No es rápido, ya que lleva unos 12 segundos ordenar una lista de 10 elementos y más de un minuto para una de 11 elementos.
Los elementos [Editar] deben ser únicos o
<
pueden ser reemplazados por<=
. Además, lo siento por necro.fuente
javascript 128
Violín DEMO .
Estoy buscando una manera de eliminar
b
.fuente
[]
parte posterior de la parte?
para guardar 2 caracteresSyntaxError: missing : in conditional expression
porque?:;
(la taquigrafíaif/else
) solo se supone que toma dos especies de código para ejecutar (es decir ,true?b++:b--;
usar)[
,]
es un truco, todavía no estoy seguro de por qué funciona, creo que se entiende como una matriz vacía declaración, como colocar una cadena o número aleatorio como un comando independiente. pero aún puedes sentirte libre de votar.?:
que la precedencia del operador es menor que,
{
,}
y no funcionó , lo entiendoSyntaxError: missing : after property id
. En cuanto a los paréntesis de precedencia siempre es primero. Todavía me gustaría un voto positivo ...PHP 83 bytes
Una implementación O (n 3 ) de un tipo de selección. El
Ó
es el personaje 211; una coma un poco invertida.Uso de la muestra:
fuente
Python 3 (80 caracteres)
Aquí hay una variación de la declaración while que es de igual longitud:
fuente
Mathematica
6656Algunas otras soluciones sin el símbolo incorporado
Ordering
:Bogosort:
8474Clasificación de burbujas:
9383Otra solución tan ineficiente como bogosort:
8272fuente
Python 3.5+, 73 bytes
Esto se inspira en la respuesta de Steven Rumbalski, pero utiliza la comprensión de la lista en lugar de un ciclo while; el número de iteraciones proviene de la lista copiada,
l
razón por la cual esto requiere generalizaciones de desempaquetado adicionales y Python 3.5fuente
R
Burbuja Ordenar:
122118 caracteresBogosort: 100 caracteres
fuente
Perl, 159
Esto nunca tuvo la oportunidad de ganar, pero decidí compartirlo porque me gustó la lógica, incluso si es un desastre :) La idea detrás de esto es convertir cada palabra en un número entero (hecho usando la función ord ), guardamos el número como una clave en un hash y la cadena como un valor, y luego iteramos cada vez más a través de todos los enteros (1..10 ** 100 en este caso) y de esa manera ordenamos nuestras cadenas.
ADVERTENCIA : No ejecute este código en su computadora, ya que recorre trillones + de enteros. Si desea probarlo, puede reducir el límite superior del rango e ingresar cadenas no largas. Si por alguna razón esto va en contra de las reglas, ¡hágamelo saber y eliminaré la entrada!
fuente
JS: 107 caracteres - Clasificación de burbujas
Miré la respuesta de @ tryingToGetProgrammingStraight e intenté mejorarla, pero terminé implementándola de manera ligeramente diferente.
fuente
Java, 134 bytes
Un método que implementa Gnome Sort.
fuente
Swift, 101 bytes
Sin golf:
fuente
𝔼𝕊𝕄𝕚𝕟, 24 caracteres / 30 bytes (no competitivo)
Try it here (Firefox only).
Usando la selección de clasificación!
Explicación
Básicamente, elimina y empuja recursivamente el mínimo de la entrada a otra matriz.
fuente
Ceilán (Bogosort), 119
Pruébalo en línea!
Encontré el
permutations
método y así terminé con Bogosort (una variante no aleatoria).Formateado y comentado:
Sin el formato y el análisis se convierte en solo 90 bytes:
Pruébalo en línea!
fuente
Perl 5 , 77 bytes
Pruébalo en línea!
Tipo de burbuja simple.
fuente
ruby -plaF,
, 70 bytesO (n), si pretende que cambiar el tamaño y compactar una matriz es gratis (no es gratis).
Creamos una matriz anidada profunda e irregularmente
o
colocando una cadena con bytes b 1 , b 2 ... b n en la matriz en la posición o [b 1 ] [b 2 ] ... [b n ]. El resultado se ve como[,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,["a,",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, [,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, ["abc,"], ["abd,"], ["abe,"]], ["ac,"], ["ad,"]],, ["c,"]]
Luego lo aplanamos y lo sacamos.
fuente
Tcl , 211 bytes
Pruébalo en línea!
fuente