O grze Code-Bowling:
W golfie starasz się uzyskać jak najniższy wynik (najmniejsza aplikacja, najbardziej elegancki itp.). W Bowling starasz się uzyskać jak najlepszy wynik. Jeśli więc pójdziecie dalej, celem wyzwania Code-Bowling jest uczynienie największego, najbardziej bezczelnego, najtrudniejszego do utrzymania fragmentu kodu, który wciąż spełnia wymagania wyzwania. Jednak nie ma sensu wydłużać źródła tylko ze względu na niego. Wydaje się, że ta dodatkowa długość wynikała z projektu, a nie tylko z wypełnienia.
Wyzwanie:
Utwórz program, który sortuje listę liczb w porządku rosnącym.
Przykład:
Wejście: 1, 4, 7, 2, 5
Wyjście: 1, 2, 4, 5, 7
Kod: Oczywiście nie byłaby to dobra odpowiedź, ponieważ nie ma tam wielu WTF
function doSort(array $input) {
sort($input);
return $input;
}
Zasady:
Nie ma prawdziwych zasad. Tak długo, jak program działa, miej to!
Pamiętaj: to jest kręgle kodu, a nie golf. Celem jest stworzenie najgorszego, najbardziej zepsutego kodu, jaki możesz! Punkty bonusowe za kod, który wygląda dobrze, ale w rzeczywistości jest zwodniczo zły ...
źródło
sort(sort(sort(sort(sort(sort(myarray))))))
Gwarantuje idealne sortowanie!Odpowiedzi:
Sortowanie według danych wejściowych użytkownika. Co może być gorszego?
Zobacz przykład na żywo
źródło
Ach, elegancja Ruby ... samoutermia skutkuje wyliczeniem. Nie zrobiono jeszcze krzywdy. Jednak niewinnie wyglądający plik .min zasysa ten moduł wyliczający do tablicy. Rozmiar tej tablicy eksploduje, gdy liczba elementów wzrośnie. Nie wspominając o tym, rujnuje to dobrze istniejący rodzaj.
źródło
Bogosort!
źródło
O(2n random)
Perl Bubble Sort
Chciałem uzyskać wygląd „każda linia wygląda jak ten sam szum linii”. Pierwszy wiersz wprowadzania (na STDIN) mówi programowi, ile jest liczb, podczas gdy następna N liczba wierszy zawiera jedną liczbę, którą należy posortować.
źródło
Ogólny, wielowątkowy Bogosort w Javie
46 sekund na sortowanie 4 liczb
Myślałem, że będzie elegancki ze wsparciem dla leków generycznych. Ponadto wielowątkowość jest zawsze przyjemna, więc używam tego zamiast randomizacji: Ten program generuje jeden wątek dla każdej liczby do posortowania. Każdy wątek próbuje wstawić swój element do obiektu tablicy, a po wstawieniu wszystkich elementów program sprawdzi, czy tablica jest posortowana. Jeśli nie, spróbuj ponownie. Oczywiście to wstawienie musi być zsynchronizowane.
ElementInserter
Będzie to klasa, której używamy do wątków. Ta klasa zawiera jeden element i próbuje wstawić go do swojego
sortedArray
:sortedArray
Bierze bezpośrednią metodę wstawiania. Po wstawieniu ostatniego elementu sprawdza, czy tablica jest posortowana.
Główna metoda
Analizuje argumenty wiersza poleceń jako liczby całkowite, tworzy nową tablicę i nowy wątek dla każdej liczby całkowitej:
Testowe uruchomienie
Czas realizacji zależy od pierwotnej kolejności elementów i realizacji harmonogramu. Dotyczy to dwurdzeniowego procesora Intel i7 MacBook Pro 2,9 GHz:
źródło
JavaScript (z animacją!). 8172 znaków. Kilka godzin na 6 numerów.
Lubimy loterię, prawda? Podobny do Bogosorta od Dan04, ale z wykorzystaniem fizyki i animacji ...
Jednak użyłem trochę kompilatora Google Closure do ... eee ... nie wiem. Ale wygląda brzydiej, prawda?
To jest jak jedno z kół loterii i za każdym razem, gdy się zatrzymuje, zamienia się na liczby na środku. Możesz zagrać tutaj: http://jsfiddle.net/VkJUE/5/ (aby zrozumieć, co mam na myśli)
To działa trochę, z tym wyjątkiem, że 6 numerów może potrwać kilka godzin. Jednak przetestowałem go na 3 liczbach i działa dobrze!
źródło
Chociaż nie mogę się pochwalić tym kodem Java , Smoothsort jest dobrym przykładem kompromisu między czytelnością a wydajnością:
(uwaga: niektóre komentarze zostały usunięte dla efektu i skrócenia; źródło pochodzi ze strony wikipedii, do której link znajduje się powyżej)
źródło
F # „Nienawidzę programowania funkcjonalne”:
źródło
Ruby Metasort
źródło
Podprogram Cobola do sortowania tabeli liczb całkowitych, gwarantowany wyższy WTF / minutę niż w jakimkolwiek innym języku. Do celów wydajności wykorzystywany jest algorytm QuickSort:
źródło
QwikSort
zamiastQuickSort
? (tj. ograniczenie długości czy nie możesz użyć litery u w nazwie?) Ponieważ to sprawiłoby, że byłaby jeszcze bardziej zabawna: Phttp://www.jsfiddle.net/sAFMC/
źródło
Python quicksort za pomocą lambda
Coś napisałem na moim blogu:
Oto aktualny post na blogu
źródło
Rubin
źródło
C ++ (4409)
Niektóre rzeczy „złe” w tym programie:
Naprawdę surowe. :) Mógłbym po prostu wprowadzić liczby bezpośrednio, zamiast analizować ciąg znaków dla liczb.
Wykorzystuje nadmierne klasy. Mógłbym również użyć wbudowanych, ale zły koder po prostu odkryłby na nowo koło.
Pętla sortowania jest strasznie nieefektywna. Myślę, że jest to najwolniejszy możliwy sposób, ale nie sprawia, że wygląda na to, że próbowałem zwolnić. W rzeczywistości część „sortująca” kodu ma tylko 11 linii, łącznie z nawiasami klamrowymi i podziałami linii.
źródło
To jest O (n * n!)
Iteruje wszystkie permutacje listy i sprawdza, czy są one posortowane. Jest to tak okropne, że sortowanie zaledwie 10 elementów zajmuje 17 sekund
źródło
T-SQL
(SQL Server 2008 R2)
Oczywiście w T-SQL do sortowania używasz „ORDER BY”. Duhhh.
Widzisz „ORDER BY”? Jest tam w deklaracji kursora.
źródło
Implementacja Pythona w sortowaniu ścieżek . Algorytm ten może mieć dobrą wydajność pamięci podręcznej, jeśli jest poprawnie zaimplementowany, co w tym przypadku z pewnością nie jest (jednak sortuje się poprawnie).
źródło
Sortuje listę 32-bitowych liczb całkowitych. W rzeczywistości jest dość wydajny w większości zwykłych przypadków:
Przykład:
źródło
źródło
sort()
działa przez odniesienie i nawet niczego nie zwraca ...C ++ , nie jestem pewien, czy istnieje nazwa dla tego rodzaju, ale proszę bardzo
<ducks for cover/>
źródło
Rozwiązanie korporacyjne (w pseudokodzie):
źródło
W Ruby wizualna reprezentacja „ Spaghetti Sort” , zaprojektowana do uruchamiania w terminalu z 80 kolumnami:
Stosowanie:
p sort (1..10).map{rand(100)}
źródło
PL \ SQL - 109 linii
Jest to odpowiedź na komentarz @ eBusiness w odpowiedzi na @ steenslag. Nie służy pożytecznemu celowi.
Ma 4 etapy:
Jak widać, jest to śmieszne ... Do złych rzeczy należą:
Tak właściwie to powinno być bardzo szybkie.
źródło
Zarówno wybór języka, jak i algorytmu wymagają wyjaśnienia.
Ten algorytm nazywa się sortowaniem powolnym. Zamierzam pokonać bzdury z bogosortu (testuj losowe permutacje, aż się posortuje), ponieważ chociaż algorytmicznie strasznie nieefektywny, jego implementacja jest zbyt prosta i nie możesz zagwarantować jej powolności.
Programuję sortowanie w zwolnionym tempie w Scheme, ponieważ głównym celem Scheme jest bycie prostym, co sprawia, że jest to większe wyzwanie. Ciekawą cechą Schematu jest jego bezkonkurencyjna rozszerzalność; w rzeczywistości implementacje języka są często (często całkowicie) wdrażane w samym schemacie. Jeszcze lepiej: wszystko, czego potrzebujesz, to abstrakcje (lambdy) i aplikacje. Aplikacje są oceniane w notacji przedrostkowej:
... to tylko cukier syntaktyczny dla:
... która stosuje funkcję do list argumentów.
Aby wykreślić ten kręgielnia kodu, muszę ponownie zdefiniować funkcję max, aby rekurencyjnie podzielić listę, aż będzie mogła się porównać. Funkcja min jest również ponownie definiowana rekurencyjnie przy użyciu max, usuwając wszystkie maksima, aż pozostanie jedna liczba. Wreszcie, sortowanie jest redefiniowane poprzez sukcesywne dodawanie minimum.
Wolne sortowanie opiera się na „pomnażaniu i kapitulacji”, a nie „dzieleniu i podbijaniu”. Działa poprzez rekurencyjne wyciąganie maksimów, dopóki nie zostanie ci minimum, dołączanie wynikowego minimum za każdym razem do rozwiązania i restartowanie, aż wszystkie minima zostaną po kolei dołączone. Choć jest całkowicie nieefektywna, moja implementacja wykorzystuje obliczenia tak bardzo, jak to możliwe, ponieważ: 1) Jest to potrzebne dla algorytmu 2) Możesz chcieć, aby tego rodzaju kiedyś się zakończyło ...
źródło
Java przesadził bałagan / ciężkość
To było zabawne! Dziwnie jest publikować coś takiego.
źródło
Pyton
Działa tylko, jeśli wszystkie elementy są mniejsze niż 9e99 :)
Za każdym razem przez pętlę wyodrębnij najmniejszy element i zamień go na 9e99
źródło
Python (634)
Jeśli lista jest posortowana, wydrukuj ją. W przeciwnym razie zamień dwa elementy, które są w niewłaściwej kolejności, a następnie wygeneruj skrypt w języku Python, który obsługuje nową kolejność. Po uruchomieniu usuń utworzony skrypt.
źródło
Bogobogosort w Pythonie
Algorytm wynaleziony przez Davida Morgan-Mar.
Ostrzeżenie: nie próbuj tego z listą większą niż 5 elementów. Nawet 5 jest bardzo wolne.
źródło
Pyton
Moje rozwiązanie Obejmuje obsługę błędów oraz funkcję, która zachowuje białe znaki podczas sortowania liczb, tj. Białe znaki pozostają na swoim miejscu; liczby się przesuwają.
na przykład,
Kod:
źródło
Python 3
Ten program akceptuje rozdzieloną spacjami listę liczb na standardowym wejściu. Następnie wydrukuje standardowe wyjście w odpowiedniej kolejności. Ostatecznie.
Objaśnienie: protokół marynowania faktycznie zapewnia dużą swobodę, a przede wszystkim swobodę importowania i wywoływania dowolnych obiektów z argumentami. Najbardziej widocznym ograniczeniem jest to, że maszyna wirtualna marynowana nie ma żadnego rodzaju kontroli przepływu, więc każdy kod zaimplementowany wyłącznie w maszynie wirtualnej marynowanej musi używać kontroli przepływu wewnątrz standardowych funkcji biblioteki python, aby osiągnąć podobne efekty. Ta implementacja sortowania wykorzystuje oparty na coroutine sleepsort zbudowany przez liberalną aplikację iteratorów i częściową aplikację.
Odpowiednik kodu python byłby mniej więcej taki:
źródło