Sobre o Code-Bowling:
No golfe, você tenta obter a pontuação mais baixa (menor aplicação, mais elegante, etc.). No boliche, você tenta obter a pontuação mais alta. Portanto, se você seguir, o objetivo de um desafio do Code-Bowling é tornar o maior, mais bastardo e mais difícil de manter, um pedaço de código que ainda atenda aos requisitos do desafio. No entanto, não faz sentido tornar a fonte mais longa apenas por isso. Parece que o comprimento adicionado foi do design e não apenas do preenchimento.
O desafio:
Crie um programa que classifique uma lista de números em ordem crescente.
Exemplo:
Entrada: 1, 4, 7, 2, 5
Saída: 1, 2, 4, 5, 7
Código: Obviamente, isso não seria uma boa resposta, pois não há muitos WTFs lá
function doSort(array $input) {
sort($input);
return $input;
}
Regras:
Não existem regras reais. Contanto que o programa funcione, tenha isso!
Lembre-se: isso é boliche de código, não golfe. O objetivo é criar o pior e mais bastardo código possível! Pontos de bônus por código que parece bom, mas na verdade é enganosamente ruim ...
fonte
sort(sort(sort(sort(sort(sort(myarray))))))
Garante uma classificação perfeita!Respostas:
Classificação por entrada do usuário. O que pode ser pior?
Ver exemplo ao vivo
fonte
Ah, a elegância de Ruby ... a auto-satisfação resulta em um enumerador. Nenhum dano feito ainda. O .min de aparência inocente, porém, suga esse enumerador em uma matriz. O tamanho dessa matriz explode quando o número de elementos aumenta. Sem mencionar que isso arruina um bom tipo pré-existente.
fonte
Bogosort!
fonte
O(2n random)
Perl Bubble Sort
Eu estava optando pelo visual "cada linha parece com o mesmo ruído". A primeira linha de entrada (no STDIN) informa ao programa quantos números existem, enquanto o próximo N número de linhas contém um número que precisa ser classificado.
fonte
Bogosort genérico e multithread em Java
46 segundos para classificar 4 números
Eu pensei que seria elegante com suporte para genéricos. Além disso, multithreading é sempre bom, então eu uso isso em vez de randomização: Este programa gera um thread para cada número a ser classificado. Cada encadeamento tenta inserir seu elemento em um objeto de matriz e, quando todos os elementos foram inseridos, o programa verifica se a matriz está classificada. Caso contrário, tente novamente. Obviamente, essa inserção precisa ser sincronizada.
ElementInserter
Essa será a classe que usamos para os threads. Esta classe contém um elemento e tenta inseri-lo no seu
sortedArray
:SortedArray
Ostenta um método de inserção direta. Quando o último elemento foi inserido, ele verifica se a matriz está classificada.
Método principal
Analisa os argumentos da linha de comando como Inteiros, cria uma nova matriz e um novo encadeamento para cada Inteiro:
Execução de teste
O tempo de execução dependerá da ordem original dos elementos e da implementação do planejador. Este é um MacBook Pro Intel i7 de 2,9 GHz e núcleo duplo:
fonte
JavaScript (com animação!). 8172 caracteres. Poucas horas para 6 números.
Nós gostamos de loteria, certo? Semelhante ao Bogosort por dan04, mas usando física e animação ...
No entanto, usei um pouco do Google Closure Compiler para ... não sei. Mas parece mais feio, certo?
É como uma daquelas rodas lotórias, e cada vez que para, muda para números no meio. Você pode jogar aqui: http://jsfiddle.net/VkJUE/5/ (para entender o que eu quero dizer)
Funciona um pouco, exceto que pode levar horas para 6 números. No entanto, eu testei em 3 números e funciona bem!
fonte
Embora eu não possa receber crédito por esse código Java , o Smoothsort é um bom exemplo da troca entre legibilidade e desempenho:
(observação: alguns comentários foram removidos para torná-lo mais curto; fonte retirada da página da wikipedia vinculada acima)
fonte
O F # "Eu odeio programação funcional":
fonte
Ruby Metasort
fonte
Um subprograma Cobol para classificar uma tabela de números inteiros, com garantia de um WTF / minuto maior que qualquer outro idioma. Para fins de desempenho, o algoritmo QuickSort é usado:
fonte
QwikSort
vez deQuickSort
? (ou seja, restrição de comprimento ou você não pode usar a letra u em um nome?) Porque isso tornaria ainda mais divertido: Phttp://www.jsfiddle.net/sAFMC/
fonte
Quicksort em Python usando lambda
Algo que escrevi no meu blog:
Aqui está o post real
fonte
Rubi
fonte
C ++ (4409)
Algumas coisas "ruins" sobre este programa:
Realmente pegajoso. :) Eu poderia simplesmente ter inserido os números diretamente, em vez de analisar a sequência de números.
Usa classes excessivas. Eu poderia ter usado os embutidos também, mas um codificador ruim simplesmente reinventaria a roda.
O loop para o tipo é terrivelmente ineficiente. Eu acho que é o caminho mais lento possível, sem parecer que eu realmente tentei torná-lo lento. Na verdade, a parte "de classificação" real do código tem apenas 11 linhas, incluindo chaves e quebras de linha.
fonte
Este é O (n * n!)
Ele itera todas as permutações da lista e testa se elas estão classificadas. É tão horrível que classificar apenas 10 itens leve 17 segundos
fonte
T-SQL
(SQL Server 2008 R2)
Naturalmente, com o T-SQL, você usa "ORDER BY" para classificar. Duhhh.
Veja o "PEDIDO POR"? Está bem ali na declaração do cursor.
fonte
Implementação em Python do Funnel Sort . Na verdade, esse algoritmo pode ter um bom desempenho de cache quando implementado corretamente, o que, nesse caso, certamente não é (no entanto, é classificado corretamente).
fonte
Classifica uma lista de números inteiros de 32 bits. Na verdade, é bastante eficiente para a maioria dos casos comuns:
Exemplo:
fonte
fonte
sort()
funciona por referência e nem retorna nada ...C ++ , não tenho certeza se existe um nome para esse tipo, mas aqui vai
<ducks for cover/>
fonte
Uma solução corporativa (em pseudocódigo):
fonte
Em Ruby, uma representação visual de um " Spaghetti Sort" , projetado para ser executado em um terminal de 80 colunas:
Uso:
p sort (1..10).map{rand(100)}
fonte
PL \ SQL - 109 linhas
Esta é uma resposta ao comentário do @ eBusiness na resposta de @ steenslag. Não serve a nenhum propósito útil.
Possui 4 etapas:
Como você pode ver, é ridículo ... As coisas ruins incluem:
Na verdade, é praticamente isso, deve ser extremamente rápido.
fonte
Tanto a escolha da linguagem quanto o algoritmo precisam ser explicados.
Esse algoritmo é chamado de classificação lenta. Eu pretendo resolver o problema do bogosort (testar permutações aleatórias até que seja resolvido) porque, embora algoritmicamente terrivelmente ineficiente, sua implementação é muito simples e você não pode garantir sua lentidão.
Eu codifico a classificação lenta no Scheme porque o principal objetivo do Scheme é ser simples, o que torna esse um desafio maior. Uma característica interessante do Scheme é sua extensibilidade imbatível; de fato, implementações da linguagem são comumente (geralmente completamente) implementadas no próprio Esquema. Ainda melhor: tudo o que você precisa é de abstrações (lambdas) e aplicativos. Os aplicativos são avaliados na notação de prefixo:
... é apenas açúcar sintático para:
... que aplica uma função a listas de argumentos.
Para fazer um aviso desse código, preciso redefinir a função max para dividir recursivamente a lista até que ela possa se comparar. A função min também é redefinida recursivamente usando max removendo todos os máximos até que um número permaneça. Finalmente, a classificação é redefinida anexando sucessivamente os mínimos.
A classificação lenta é baseada em "multiplicar e render", em oposição a "dividir e conquistar". Ele funciona retirando recursivamente os máximos até você ficar com o mínimo, anexando o mínimo resultante de cada vez à solução e reiniciando novamente até que todos os mínimos tenham sido adicionados por sua vez. Embora totalmente ineficiente, minha implementação reutiliza os cálculos o máximo possível porque: 1) É necessário para o algoritmo 2) Você pode querer que esse tipo termine algum dia ...
fonte
Bagunça / peso exagerados em Java
Foi divertido! Parece estranho postar algo assim.
fonte
Python
Só funciona se todos os itens forem inferiores a 9e99 :)
Cada vez que percorrer o loop, extraia o menor elemento e substitua-o por 9e99
fonte
Python (634)
Se a lista estiver classificada, imprima-a. Caso contrário, troque dois elementos que estão na ordem errada e gere um script python que lida com a nova ordem. Depois de executar isso, exclua o script criado.
fonte
Bogobogosort em Python
Algoritmo inventado por David Morgan-Mar.
Aviso: não tente fazer isso com nenhuma lista maior que 5 elementos. Até 5 é muito lento.
fonte
Python
Minha solução Inclui tratamento de erros e um recurso que preserva o espaço em branco ao classificar números, ou seja, o espaço em branco permanece no lugar; números se movem.
por exemplo,
Código:
fonte
Python 3
Este programa aceita uma lista de números separados por espaço na entrada padrão. Em seguida, imprimirá a saída padrão na ordem correta. Eventualmente.
Explicação: o protocolo pickle realmente oferece muita liberdade, principalmente a liberdade de importar e chamar objetos arbitrários com argumentos. A limitação mais importante é que a pickle VM não possui nenhum tipo de controle de fluxo; portanto, qualquer código implementado puramente na pickle VM deve usar o controle de fluxo nas funções da biblioteca padrão da python para obter efeitos semelhantes. Essa implementação de classificação usa um dorminhoco baseado em corotina, construído por aplicativos liberais de iteradores e aplicativos parciais.
O código python equivalente seria algo como isto:
fonte