À propos de Code-Bowling:
Au golf, vous essayez d'obtenir le score le plus bas (plus petite application, plus élégant, etc.). Au bowling, vous essayez d'obtenir le meilleur score. Donc, si vous suivez, le but d'un défi Code-Bowling est de créer le code le plus gros, le plus bâtard et le plus difficile à maintenir qui réponde encore aux exigences du défi. Cependant, il est inutile de prolonger la source juste pour le plaisir. Il faut que la longueur ajoutée provienne du design et pas seulement du rembourrage.
Le défi:
Créez un programme qui trie une liste de nombres dans l'ordre croissant.
Exemple:
Entrée: 1, 4, 7, 2, 5
Sortie: 1, 2, 4, 5, 7
Code: Évidemment, ce ne serait pas une bonne réponse, car il n'y a pas beaucoup de WTF là-dedans
function doSort(array $input) {
sort($input);
return $input;
}
Règles:
Il n'y a pas de vraies règles. Tant que le programme fonctionne, ayez-le!
Rappelez-vous: c'est du bowling, pas du golf. L'objectif est de créer le pire code, le plus bâtard que vous puissiez! Des points bonus pour un code qui a l'air bien, mais qui est en fait trompeusement mauvais ...
la source
sort(sort(sort(sort(sort(sort(myarray))))))
Garantit un tri parfait!Réponses:
Tri par entrée utilisateur. Qu'est-ce qui peut être pire?
Voir l' exemple en direct
la source
Ah, l'élégance de Ruby ... self.permutation se traduit par un énumérateur. Pas encore de mal. L'innocent .min aspire cependant cet énumérateur dans un tableau. La taille de ce tableau explose lorsque le nombre d'éléments augmente. Sans oublier que cela ruine une belle sorte préexistante.
la source
Bogosort!
la source
O(2n random)
Perl Bubble Sort
J'allais pour le look "chaque ligne ressemble au même morceau de bruit de ligne". La première ligne d'entrée (sur STDIN) indique au programme le nombre de nombres, tandis que le nombre N suivant de lignes contient un nombre qui doit être trié.
la source
Bogosort générique et multithread en Java
46 secondes pour trier 4 numéros
Je pensais que ce serait élégant avec un support pour les génériques. De plus, le multithreading est toujours agréable, donc j'utilise cela au lieu de la randomisation: ce programme génère un thread pour chaque numéro à trier. Chaque thread essaie d'insérer son élément dans un objet tableau, et lorsque tous les éléments ont été insérés, le programme vérifiera si le tableau est trié. Sinon, réessayez. Bien sûr, cette insertion doit être synchronisée.
ElementInserter
Ce sera la classe que nous utilisons pour les threads. Cette classe contient un élément et essaie de l'insérer dans son
sortedArray
:sortedArray
Arbore une méthode d'insertion simple. Lorsque le dernier élément a été inséré, il vérifie si le tableau est trié.
Méthode principale
Analyse les arguments de ligne de commande en tant qu'entiers, crée un nouveau tableau et un nouveau thread pour chaque entier:
Essai
Le temps d'exécution dépendra de l'ordre d'origine des éléments et de votre implémentation du planificateur. Il s'agit d'un MacBook Pro Intel i7 bicœur à 2,9 GHz:
la source
JavaScript (avec animation!). 8172 caractères. Quelques heures pour 6 numéros.
Nous aimons la loterie, non? Similaire à Bogosort par dan04, mais en utilisant la physique et l' animation ...
Cependant, j'ai utilisé un peu de Google Closure Compiler pour, euh ... je ne sais pas. Mais ça a l'air plus laid, non?
C'est comme une de ces roues lottoires, et chaque fois qu'il s'arrête, il passe aux chiffres du milieu. Vous pouvez jouer ici: http://jsfiddle.net/VkJUE/5/ (pour comprendre ce que je veux dire)
Cela fonctionne, un peu, sauf que cela peut prendre des heures pour 6 numéros. Cependant, je l'ai testé sur 3 numéros et cela fonctionne très bien!
la source
Bien que je ne puisse pas m'attribuer le mérite de ce code Java , Smoothsort est un bon exemple du compromis entre lisibilité et performances:
(note: certains commentaires supprimés pour l'effet et pour le raccourcir; source tirée de la page wikipedia liée ci-dessus)
la source
Le F # "Je déteste la programmation fonctionnelle":
la source
Ruby Metasort
la source
Un sous-programme Cobol pour trier une table d'entiers, garanti d'avoir un WTF / minute plus élevé que n'importe quelle autre langue. À des fins de performances, l'algorithme QuickSort est utilisé:
la source
QwikSort
lieu deQuickSort
? (c.-à-d. restriction de longueur ou vous ne pouvez pas utiliser la lettre u dans un nom?) Parce que cela le rendrait encore plus amusant: Phttp://www.jsfiddle.net/sAFMC/
la source
Tri rapide Python avec lambda
Quelque chose que j'ai écrit sur mon blog:
Voici le blog réel
la source
Rubis
la source
C ++ (4409)
Certaines choses "mauvaises" à propos de ce programme:
Vraiment filandreux. :) J'aurais pu simplement saisir les nombres directement, au lieu d'analyser la chaîne pour les nombres.
Utilise des classes excessives. J'aurais pu aussi utiliser ceux intégrés, mais un mauvais codeur réinventerait simplement la roue.
La boucle pour le tri est terriblement inefficace. Je pense que c'est la manière la plus lente possible, sans donner l'impression que j'ai réellement essayé de la ralentir. En fait, la partie "tri" réelle du code est seulement comme 11 lignes, y compris les accolades et les sauts de ligne.
la source
Celui-ci est O (n * n!)
Il itère toutes les permutations de la liste et vérifie si elles sont triées. C'est tellement horrible que trier seulement 10 articles prend 17 secondes
la source
T-SQL
(SQL Server 2008 R2)
Naturellement, avec T-SQL, vous utilisez "ORDER BY" pour trier. Duhhh.
Voir le "COMMANDER PAR"? C'est juste là dans la déclaration du curseur.
la source
Implémentation Python de Funnel Sort . Cet algorithme peut réellement avoir de bonnes performances de cache lorsqu'il est correctement implémenté, ce qui n'est certainement pas le cas dans ce cas (il trie cependant correctement).
la source
Trie une liste d'entiers 32 bits. Il est en fait assez efficace pour la plupart des cas ordinaires:
Exemple:
la source
la source
sort()
fonctionne par référence et ne renvoie même rien ...C ++ , je ne sais pas s'il y a un nom pour ce type, mais voici
<ducks for cover/>
la source
Une solution d'entreprise (en pseudocode):
la source
En Ruby, une représentation visuelle d'un " Tri Spaghetti" , conçu pour être exécuté dans un terminal de 80 colonnes:
Usage:
p sort (1..10).map{rand(100)}
la source
PL \ SQL - 109 lignes
Ceci est une réponse au commentaire de @ eBusiness dans la réponse de @ steenslag. Il ne sert à rien.
Il comporte 4 étapes:
Comme vous pouvez le voir, c'est ridicule ... Les mauvaises choses incluent:
C'est à peu près ça en fait, ça devrait être extrêmement rapide.
la source
Le choix de la langue et de l'algorithme doit être expliqué.
Cet algorithme est appelé tri lent. J'ai l'intention de battre la merde de bogosort (tester les permutations aléatoires jusqu'à ce qu'il soit trié) parce que, bien que terriblement algorithmiquement inefficace, sa mise en œuvre est trop simple et vous ne pouvez pas garantir sa lenteur.
Je code un tri lent dans Scheme parce que l'objectif principal de Scheme est d'être simple, ce qui en fait un défi plus important. Une caractéristique intéressante de Scheme est son extensibilité imbattable; en fait, les implémentations du langage sont généralement (souvent complètement) implémentées dans Scheme lui-même. Encore mieux: tout ce dont vous avez besoin, ce sont des abstractions (lambdas) et des applications. Les demandes sont évaluées en notation préfixe:
... est juste du sucre syntaxique pour:
... qui applique une fonction aux listes d'arguments.
Afin de supprimer ce bowling de code, je dois redéfinir la fonction max pour diviser récursivement la liste jusqu'à ce qu'elle puisse se comparer. La fonction min est également redéfinie de manière récursive en utilisant max en supprimant tous les maximums jusqu'à ce qu'il ne reste qu'un nombre. Enfin, le tri est redéfini en ajoutant successivement les minimums.
Le tri lent est basé sur "multiplier et abandonner", par opposition à "diviser pour mieux régner". Il fonctionne en retirant récursivement les maximums jusqu'à ce que vous vous retrouviez avec le minimum, en ajoutant le minimum résultant à chaque fois à la solution et en redémarrant jusqu'à ce que tous les minimums aient été ajoutés tour à tour. Bien que totalement inefficace, mon implémentation réutilise autant que possible les calculs car: 1) Elle est nécessaire pour l'algorithme 2) Vous voudrez peut-être que ce type se termine un jour ...
la source
Java désordre exagéré / lourdeur
C'était amusant! Ça fait bizarre de poster quelque chose comme ça.
la source
Python
Fonctionne uniquement si tous les éléments sont inférieurs à 9e99 :)
À chaque fois dans la boucle, extrayez le plus petit élément et remplacez-le par 9e99
la source
Python (634)
Si la liste est triée, imprimez-la. Sinon, échangez deux éléments qui sont dans le mauvais ordre, puis générez un script python qui gère le nouvel ordre. Après avoir exécuté cela, supprimez le script créé.
la source
Bogobogosort en Python
Algorithme inventé par David Morgan-Mar.
Attention: n'essayez pas ceci avec une liste supérieure à 5 éléments. Même 5 est très lent.
la source
Python
Ma solution. Comprend la gestion des erreurs et une fonctionnalité qui préserve les espaces lors du tri des nombres, c'est-à-dire que les espaces restent en place; les chiffres bougent.
par exemple,
Code:
la source
Python 3
Ce programme accepte une liste de nombres séparés par des espaces sur l'entrée standard. Il imprimera ensuite la sortie standard dans le bon ordre. Finalement.
Explication: le protocole pickle offre en fait beaucoup de liberté, notamment la liberté d'importer et d'appeler des objets arbitraires avec des arguments. La limitation la plus importante est que la machine virtuelle pickle n'a aucun type de contrôle de flux, donc tout code purement implémenté dans la machine virtuelle pickle doit utiliser le contrôle de flux à l'intérieur des fonctions de bibliothèque standard python afin d'obtenir des effets similaires. Cette implémentation du tri utilise un sleepsort basé sur coroutine construit par une application libérale d'itérateurs et une application partielle.
Le code python équivalent serait quelque chose comme ceci:
la source