Sobre Code-Bowling:
En golf, intenta obtener la puntuación más baja (aplicación más pequeña, más elegante, etc.). En Bowling, intentas obtener la puntuación más alta. Entonces, si sigue, el objetivo de un desafío de Code-Bowling es hacer que el código más grande, más bastardo, más difícil de mantener y que aún cumpla con los requisitos del desafío. Sin embargo, no tiene sentido alargar la fuente por el simple hecho de hacerlo. Tiene que parecer que esa longitud adicional fue del diseño y no solo del relleno.
El reto:
Cree un programa que clasifique una lista de números en orden ascendente.
Ejemplo:
Entrada: 1, 4, 7, 2, 5
Salida: 1, 2, 4, 5, 7
Código: Obviamente, esta no sería una buena respuesta, ya que no hay muchos WTF allí
function doSort(array $input) {
sort($input);
return $input;
}
Reglas:
No hay reglas reales. Mientras el programa funcione, ¡tenlo!
Recuerde: esto es un juego de bolos en código, no golf. ¡El objetivo es crear el peor código más bastardo que puedas! Puntos de bonificación para el código que se ve bien, pero en realidad es engañosamente malvado ...
fuente
sort(sort(sort(sort(sort(sort(myarray))))))
¡Garantiza una clasificación perfecta!Respuestas:
Ordenar por entrada del usuario. ¿Qué puede ser peor?
Ver ejemplo en vivo
fuente
Ah, la elegancia de Ruby ... la autopermutación resulta en un enumerador. Ningún daño hecho, todavía. Sin embargo, el .min de aspecto inocente absorbe este enumerador en una matriz. El tamaño de esta matriz explota cuando aumenta el número de elementos. Sin mencionar que esto arruina un buen tipo preexistente.
fuente
Bogosort!
fuente
O(2n random)
Perl Bubble Sort
Iba por el aspecto de "cada línea parece el mismo ruido de línea". La primera línea de entrada (en STDIN) le dice al programa cuántos números hay, mientras que la siguiente N cantidad de líneas contiene un número que necesita ser ordenado.
fuente
Bogosort genérico multiproceso en Java
46 segundos para ordenar 4 números
Pensé que sería elegante con soporte para genéricos. Además, el subprocesamiento múltiple siempre es bueno, así que lo uso en lugar de la aleatorización: este programa genera un hilo para cada número que se ordenará. Cada subproceso intenta insertar su elemento en un objeto de matriz, y cuando se hayan insertado todos los elementos, el programa verificará si la matriz está ordenada. Si no, intente nuevamente. Por supuesto, esta inserción necesita ser sincronizada.
ElementInserter
Esta será la clase que usaremos para los hilos. Esta clase contiene un elemento e intenta insertarlo en su
sortedArray
:ordenados
Tiene un método de inserción directo. Cuando se inserta el último elemento, verifica si la matriz está ordenada.
Método principal
Analiza los argumentos de la línea de comandos como enteros, crea una nueva matriz y un nuevo hilo para cada entero:
Prueba de funcionamiento
El tiempo de ejecución dependerá del orden original de los elementos y la implementación de su planificador. Esto está en un MacBook Pro Intel i7 de doble núcleo a 2.9 GHz:
fuente
JavaScript (con animación!). 8172 caracteres. Pocas horas para 6 números.
Nos gusta la lotería, ¿verdad? Similar a Bogosort por dan04, pero usando física y animación ...
Sin embargo, usé un poco de Google Closure Compiler para, er ... No lo sé. Pero se ve más feo, ¿verdad?
Es como una de esas ruedas de lotería, y cada vez que se detiene cambia a números en el medio. Puedes jugar aquí: http://jsfiddle.net/VkJUE/5/ (para entender lo que quiero decir)
Funciona, un poco, excepto que puede tomar horas para 6 números. Sin embargo, lo probé en 3 números y funciona bien.
fuente
Aunque no puedo tomar el crédito por este código Java , Smoothsort es un buen ejemplo de la compensación entre legibilidad y rendimiento:
(nota: algunos comentarios se eliminaron por efecto y para acortarlo; fuente tomada de la página de Wikipedia vinculada anteriormente)
fuente
El F # "Odio la programación funcional":
fuente
Ruby Metasort
fuente
Un subprograma de Cobol para ordenar una tabla de enteros, garantizado para tener un WTF / minuto más alto que cualquier otro idioma. Para fines de rendimiento, se utiliza el algoritmo QuickSort:
fuente
QwikSort
lugar deQuickSort
? (es decir, ¿restricción de longitud o no puede usar la letra u en un nombre?) Porque eso lo haría aún más divertido: Phttp://www.jsfiddle.net/sAFMC/
fuente
Python quicksort usando lambda
Algo que escribí en mi blog:
Aqui esta la publicación de blog real
fuente
Rubí
fuente
C ++ (4409)
Algunas cosas "malas" sobre este programa:
Muy fibroso. :) Podría haber simplemente ingresado los números directamente, en lugar de analizar la cadena de números.
Utiliza clases excesivas. También podría haber usado los incorporados, pero un mal programador simplemente reinventaría la rueda.
El bucle para el género es terriblemente ineficiente. Creo que es la forma más lenta posible, sin que parezca que realmente intenté hacerlo más lento. En realidad, la parte real de "ordenar" del código es solo como 11 líneas, incluidas las llaves y los saltos de línea.
fuente
Este es O (n * n!)
Repite todas las permutaciones de la lista y comprueba si están ordenadas. Es tan horrible que clasificar solo 10 elementos lleva 17 segundos
fuente
T-SQL
(SQL Server 2008 R2)
Naturalmente, con T-SQL, utiliza "ORDER BY" para ordenar. Duhhh
Ver el "ORDENAR POR" Está justo allí en la declaración del cursor.
fuente
Implementación de Python de Funnel Sort . Este algoritmo puede tener un buen rendimiento de caché cuando se implementa correctamente, lo que en este caso ciertamente no lo es (sin embargo, se ordena correctamente).
fuente
Ordena una lista de enteros de 32 bits. En realidad, es bastante eficiente para la mayoría de los casos comunes:
Ejemplo:
fuente
fuente
sort()
funciona por referencia y ni siquiera devuelve nada ...C ++ , no estoy seguro si hay un nombre para este tipo, pero aquí va
<ducks for cover/>
fuente
Una solución empresarial (en pseudocódigo):
fuente
En Ruby, una representación visual de un " Spaghetti Sort" , diseñado para ejecutarse en un terminal de 80 columnas:
Uso:
p sort (1..10).map{rand(100)}
fuente
PL \ SQL - 109 líneas
Esta es una respuesta al comentario de @ eBusiness en la respuesta de @ steenslag. No sirve a ningún propósito útil.
Tiene 4 etapas:
Como puede ver, es ridículo ... Las cosas malas incluyen:
Eso es más o menos en realidad, debería ser extremadamente rápido.
fuente
Tanto la elección del lenguaje como el algoritmo deben explicarse.
Este algoritmo se llama ordenamiento lento. Tengo la intención de vencer a bogosort (probar permutaciones aleatorias hasta que se solucione) porque, aunque algorítmicamente terriblemente ineficiente, su implementación es demasiado simple y no se puede garantizar su lentitud.
Codifico la ordenación lenta en Scheme porque el objetivo principal de Scheme es ser simple, lo que lo convierte en un desafío mayor. Una característica interesante de Scheme es su inmejorable extensibilidad; de hecho, las implementaciones del lenguaje se implementan comúnmente (a menudo completamente) en el propio Esquema. Aún mejor: todo lo que necesitas son abstracciones (lambdas) y aplicaciones. Las aplicaciones se evalúan en notación de prefijo:
... es solo azúcar sintáctico para:
... que aplica una función a las listas de argumentos.
Para eliminar este boliche de código, tengo que redefinir la función max para dividir recursivamente la lista hasta que pueda compararse a sí misma. La función min también se redefine de forma recursiva usando max eliminando todos los máximos hasta que quede un número. Finalmente, el orden se redefine agregando sucesivamente los mínimos.
La ordenación lenta se basa en "multiplicar y rendirse", en lugar de "dividir y conquistar". Funciona mediante la extracción recursiva de los máximos hasta que quede el mínimo, agregando el mínimo resultante cada vez a la solución y reiniciando hasta que se hayan agregado todos los mínimos. Si bien es totalmente ineficiente, mi implementación reutiliza los cálculos tanto como sea posible porque: 1) Es necesario para el algoritmo 2) Es posible que desee que este tipo termine algún día ...
fuente
Java exagerado desorden / pesadez
¡Eso fue divertido! Se siente raro publicar algo como esto.
fuente
Pitón
Solo funciona si todos los elementos son inferiores a 9e99 :)
Cada vez a través del ciclo, extraiga el elemento más pequeño y reemplácelo con 9e99
fuente
Pitón (634)
Si la lista está ordenada, imprímala. De lo contrario, intercambie dos elementos que estén en el orden incorrecto, luego genere un script de Python que maneje el nuevo orden. Después de ejecutar eso, elimine el script creado.
fuente
Bogobogosort en Python
Algoritmo inventado por David Morgan-Mar.
Advertencia: no intente esto con ninguna lista de más de 5 elementos. Incluso 5 es muy lento.
fuente
Pitón
Mi solución. Incluye manejo de errores y una función que conserva el espacio en blanco al ordenar los números, es decir, el espacio en blanco permanece en su lugar; Los números se mueven.
p.ej,
Código:
fuente
Python 3
Este programa acepta una lista de números separados por espacios en la entrada estándar. Luego imprimirá la salida estándar en el orden correcto. Finalmente.
Explicación: el protocolo de pickle en realidad proporciona mucha libertad, sobre todo la libertad de importar y llamar a objetos arbitrarios con argumentos. La limitación más destacada es que la máquina virtual de pickle no tiene ningún tipo de control de flujo, por lo que cualquier código implementado puramente en la máquina virtual de pickle debe usar el control de flujo dentro de las funciones de la biblioteca estándar de Python para lograr efectos similares. Esta implementación de la ordenación utiliza un Sleepsort basado en la rutina construido por la aplicación liberal de iteradores y la aplicación parcial.
El código de Python equivalente sería algo como esto:
fuente