Uwaga: To pytanie zostało poważnie zredagowane od czasu, gdy opublikowałem je tutaj. Reguły zostały przeniesione tutaj , przeczytaj je przed opublikowaniem jakiejkolwiek odpowiedzi, aby zrozumieć cel tego. To było pierwsze pytanie stworzone w kategorii trollowania kodu .
Wyobraź sobie, że leniwy użytkownik stosu przepełnienia stosu zadaje następujące pytanie:
Potrzebuję programu, w którym użytkownik wprowadza tablicę podwójnych, a program wyświetla tablicę posortowaną. Czy możesz podać kod?
Jak stworzyć fragment kodu, który będzie trollował tego użytkownika? Utwórz fragment kodu, który będzie przydatny dla niedoświadczonego programisty, ale w praktyce będzie całkowicie bezużyteczny.
Zwycięzca jest najbardziej uprzywilejowaną odpowiedzią, z wyjątkiem sytuacji, gdy odpowiedź nie jest w jakiś sposób kwalifikowalna (w celu spełnienia wymagań kwalifikacyjnych sprawdź opis tag-wiki trollowania kodu ). Jeśli poprzednio najbardziej uprzywilejowana odpowiedź zostanie pobita w przyszłości w liczbie głosów pozytywnych po zaakceptowaniu, nowa najlepsza odpowiedź zostanie zaakceptowana, a poprzednia nie zostanie zaakceptowana. W przypadku remisu wybiorę zwycięzcę spośród remisów lub poczekam jeszcze trochę.
Odpowiedzi, które nie mają kodu, nie są kwalifikowalne. Mogą być zabawne i uzyskać pozytywne opinie, ale nie zostaną zaakceptowane.
Reguły można znaleźć w opisie tagu .
Uwaga: jest to pytanie trollujące kod . Proszę nie brać poważnie pytania i / lub odpowiedzi. Więcej informacji tutaj .
źródło
Odpowiedzi:
Czasami społeczność tutaj nie lubi pomagać w odrabianiu prac domowych. Dlatego dostajesz tyle żartów. Ale lubię pomagać. Oto kompletne rozwiązanie w „C” (ponieważ zakładam, że chcesz nauczyć się „programowania”, a nie „skryptowania” w Javie lub Ruby). Zawarłem wiele wskazówek, które chciałbym wiedzieć, kiedy uczyłem się po raz pierwszy
źródło
1st, 2th, 3th, 4th...
operatora i downto - bardzo zaawansowane techniki programowania C.sscanf(input, "%5s", &input[0])
, w przeciwnym razie podczas analizowania danych wejściowych mogą wystąpić błędy przepełnienia. Dane wejściowe należy zadeklarowaćchar input[sizeof(int)+1]
, aby zapewnić zgodność wsteczną z systemami 64-bitowymi.i==1?"st":"th"
hahaha ...Oto java. Jest to całkowite oszustwo, niedopuszczalne i niemożliwe do naprawienia, ponieważ tworzy bazę danych MySQL, wstawia tam liczbę, dokonuje wyboru za pomocą klauzuli ORDER BY i wyświetla liczby podane przez MySQL. W rzeczywistości to MySQL dokonuje sortowania, a nie program.
źródło
C # - Nie ma zabójstwa jak przesada
Po pierwsze, drogi GiMmEtHaCoDeZ, spróbujmy rozbić twoje zadanie:
Ponieważ „Dziel i rządź” jest bardzo ważną strategią podczas pracy z problemami z oprogramowaniem, rozwiążmy je pojedynczo
1. Czytanie
Kolejną ważną kwestią w oprogramowaniu jest wszechstronność. Ponieważ nie jest określone, w jaki sposób użytkownik będzie wprowadzał liczby, może się to zdarzyć za pośrednictwem konsoli, pliku, usługi internetowej itp. Może nawet jakaś metoda, o której obecnie nie możemy myśleć. Dlatego ważne jest, aby nasze rozwiązanie było w stanie pomieścić różne rodzaje danych wejściowych. Powiedzmy, że najłatwiejszym sposobem na osiągnięcie tego jest wyodrębnienie ważnej części interfejsu
gdzie
DoubleArrayReaderType
podano wyliczenie zWażne jest również, aby oprogramowanie było testowalne od podstaw, aby implementacja interfejsu była możliwa
Następnie logicznym pytaniem jest, skąd będziemy wiedzieć, jak załadować odpowiedni
IDoubleArrayReader
kod do kodu. To proste, o ile korzystamy z prostej fabryki:Zauważ, że używamy refleksji do ładowania wszystkich aktywnych czytników, więc wszelkie przyszłe rozszerzenia będą automatycznie dostępne Teraz, w głównej części naszego kodu, po prostu:
2. Przetwarzanie (sortowanie)
Teraz musimy przetworzyć, tzn. Posortować uzyskane liczby. Zauważ, że kroki są całkowicie niezależne od siebie, więc dla podsystemu sortowania nie ma znaczenia, w jaki sposób wprowadzono liczby. Ponadto zachowanie podczas sortowania również może ulec zmianie, np. Może być konieczne wprowadzenie bardziej wydajnego algorytmu sortowania. Oczywiście wyodrębnimy żądane zachowanie przetwarzania w interfejsie:
A zachowanie sortowania po prostu zaimplementuje interfejs:
Oczywiście potrzebujemy fabryki do ładowania instancji przetwarzania i zarządzania nimi.
3. Zapis wyników
Nie ma tu wiele do powiedzenia, ponieważ jest to proces, który odzwierciedla dane wejściowe. W rzeczywistości możemy połączyć fabryki czytania i pisania w jeden
DoubleArrayInputOutputFactory
, jak poniżej:Kładąc wszystko razem
Wreszcie nasz główny program wykorzysta całą tę wspaniałość, którą już zbudowaliśmy, więc kod będzie po prostu:
gdzie na przykład możemy zdefiniować
reader
,writer
aprocessor
za pomocąźródło
Jeszcze bardziej dosłowna interpretacja:
to znaczy „posortowana” tablica.
źródło
sort.sh
i zadzwoń jakosh sort.sh "an array of doubles"
"an array of doubles"
można przekazać do skryptu jako argument wiersza polecenia.Perl
Ze wszystkich rzeczy, które zrobiłem dla CodeGolf.SE, zajęło to chyba najwięcej czasu, przynajmniej kilka godzin.
Dane wejściowe mają formę,
[2,4,5,7,7,3]
a dane wyjściowe mają formę[2,3,4,5,7,7]
.Nie mam teraz czasu na wyjaśnienia ... wrócę później.W każdym razie w Perlu istnieje coś takiego jak tablica anonimowa. Jest to tablica, ale nie ma nazwy. Wiemy jednak, że jest to odniesienie (lokalizacja pamięci). Szereg liczb w nawiasach kwadratowych tworzy anonimową tablicę i zwraca odwołanie do niej.
Ta odpowiedź składa się z szeregu anonimowych tablic, do których odniesienia są przechowywane
@_
. Dane wejściowe są przekształcane w anonimową tablicę. Następnie tworzymy inne anonimowe tablice, z których każdy element jest odniesieniem do elementu z poprzedniej tablicy. Zamiast sortować elementy w tablicy, sortujemy wskaźniki do elementów w tej tablicy. Ponadto tworzymy nową tablicę dla każdego kroku (i więcej) w operacji sortowania.źródło
$_
to pusty ciąg w tym momencie. Zapisałem pożądaną moc wyjściową$\
, która jest separatorem rekordów wyjściowych.Pyton
Daje użytkownikowi posortowaną tablicę, usuwając z tablicy wejściowej wszystkie elementy, które nie są posortowane.
Algorytm przechodzi przez listę, dodając tylko każdy element, jeśli nie sprawi, że lista nie będzie nieposortowana. Tak więc wynik jest posortowaną listą, a nie taką, która zawiera wszystkie elementy oryginalnej listy. Jeśli op tylko sprawdzi, czy lista jest posortowana, może nie zauważyć, że w danych wyjściowych brakuje wartości.
źródło
sys.stdin.read()
literówki lub części prawdziwej odpowiedzi na trolling? Z pewnością frustrowałoby OP, aby podać tablicę jako dane wejściowe i nadal czekać na wynik ...O(n)
Algorytm sortowania. Miły.Bash, 54 znaki
Wiele odpowiedzi przy użyciu powolnych, niewydajnych języków, takich jak C i Python ... Przyspieszmy trochę, oferując rozwiązanie dla wszystkich języków skryptowych: Bash.
Wiem, co myślisz - Bash nie jest w stanie poradzić sobie nawet z arytmetyką zmiennoprzecinkową, więc jak to będzie sortować, prawda? Cóż, oto moja implementacja potężnego algorytmu SleepSort:
Program jest wyposażony w dane wejściowe jako argumenty wiersza poleceń. Przykładowy przebieg:
Ma to tę zaletę, że być może jest najkrótszym ze wszystkich działających algorytmów tutaj przedstawionych. Zgadza się - jedna potężna linia bash , wykorzystująca tylko wbudowane bash i nie wywołująca żadnych zewnętrznych plików binarnych (to znaczy, jeśli nie liczymy czysto opcjonalnego pełnego wyjścia). W przeciwieństwie do bogosortów, jego czas działania jest deterministyczny.
Wskazówka: skuteczną optymalizacją jest podzielenie liczb wejściowych przez współczynnik przed sortowaniem. Wdrożenie należy do czytelnika.
Edytować:
Skrócona wersja golfowa z 54 znakami i mniej ładnym nadrukiem:
źródło
/proc/cpuinfo
.JavaScript ma wbudowaną
sort()
funkcję, możesz go używać w następujący sposób:... och, całkowicie zapomniałem wspomnieć, sortuje się w porządku leksykograficznym, tj .
10 < 9
i9 < -100
. Prawdopodobnie i tak tego oczekujesz.źródło
(jPL) jQuery Programming Language
W tym celu musisz użyć jQuery. Proste rozwiązanie tego problemu jest następujące:
źródło
$
, tablice za pomocąa
i wynikiwindow.prompt
asp
.do
To rozwiązanie łączy zwięzłość i dostęp na poziomie systemu operacyjnego zapewniany przez C z potężnymi komponentami oprogramowania wielokrotnego użytku w GNU / Linux:
źródło
#!/usr/bin/sort
.Rubin
Dość oczywiste.
Lub wymagać, aby dane wejściowe faktycznie były „tablicą podwójnych”:
Nie używać
gets.chomp
dla dodatkowego zła. Również używanie wyrażenia regularnego po trailing do, czego nawet nie wiedziałem, że możesz zrobić (dzięki Jan Dvorak), aby jeszcze bardziej pomylić OP!źródło
an array of doubles
.gets
zamiastgets.chomp
).Python 3.3
Trolling polega na zapewnieniu idealnie działającego rozwiązania, które robi dokładnie to, co zamierzał OP, ale w sposób, który:
Podsumowując, ta odpowiedź znacznie zwiększyłaby frustrację ucznia wyśmiewającego swoje prośby z całkowicie poprawnymi odpowiedziami z pewnego punktu widzenia.
(Nie czytaj, jeśli zastanawiasz się nad zrozumieniem powyższego kodu)
Muszę dodać, że trollowanie jest również zwiększone przez fakt, że zaimplementowany algorytm sortowania jest w rzeczywistości
źródło
C - Wolny, trudny w użyciu, niedopuszczalny styl kodowania
Sam algorytm sortowania nazywany jest spowolnieniem i ma najlepszą złożoność przypadków (simpleksowość) wynoszącą około n ^ (log n / 2) . Algorytm został opublikowany przez Andrieja Brodera i Jorge Stolfi w ich wspaniałej pracy „Algorytmy pesymalne i analiza simpleksowości”, którą gorąco polecam dla dobrego śmiechu ORAZ do przemyślenia.
Jednak samo sortowanie jest bezużyteczne, dlatego potrzebujemy sposobu na wprowadzenie danych, które chcą posortować. Parsowanie podwójnych jest bólem, więc dlaczego nie wprowadzić ich bajt po bajcie.
Aby udowodnić, że to działa:
W końcu mamy:
źródło
Ruby, zły Bogosort! (Bonus: bogosort według danych wprowadzonych przez użytkownika)
„Złe” zwroty akcji:
.map &:to_f
dołączenia do drugiej linii, ale OP może tego nie wiedziećchomp
więc ostatni numer ma na końcu tajemniczą nową linięstrip
więc wokół liczb występuje tajemnicza biała spacja, jeśli wprowadzane są z odstępami wokół przecinków (np. spacja w1.5, 2
)A może bogosortowanie według danych wprowadzonych przez użytkownika ? >: D
źródło
COBOL
Pewnie! „Nawet małpa może to zrobić!”
Oto prosty program COBOL, który posortuje dane wejściowe dla Ciebie. Przeczytaj komentarze, aby zobaczyć, jak dokładnie jest to trywialne i rozszerzalne. Prawdziwymi zaletami tego jest to, że jest wypróbowanym i prawdziwym mechanizmem, nie opiera się na nowych i stosunkowo niesprawdzonych językach, takich jak Java i cokolwiek opartego na sieci Web lub od Microsoft. Kompiluje się naprawdę skutecznie, a takie procedury są stosowane przez najbardziej udane firmy finansowe z listy Fortune500 i innych liderów branży. Ten kod został sprawdzony przez wielu ekspertów i jest uznawany za doskonały mechanizm sortowania.
źródło
OP nigdy nie powiedział, JAK je posortować ... ani jaka jest jego definicja podwójności. Zakładając, że typ danych jest
double
interpretowany jako duplikat . Za pomocą JavaScript tutaj.Wynik: kolejność naprzemienna
[4, 11, 4, 9, 5, 7, 6, 7]
źródło
PHP
Oto pełna implementacja z obsługą błędów. Jest najszybszy dla każdego
array of doubles
.źródło
Następna permutacja w C ++ działa, zwracając true, gdy tablica jest sortowana, a false w przeciwnym razie (po permutacji). Więc powinieneś posortować tablicę, a następnie użyć jej do-while jak powyżej (aby utworzyło pełne koło z powrotem do posortowanej tablicy).
źródło
next_permutation
dla mojej odpowiedzi, ale jest to o wiele czystsze niż to, co miałem na myśli.[rozwiązanie przez punktowe błędne ukierunkowanie]
Proszę przeczytać odpowiednią normę, IEC 60559: 1989 Specyfikacja binarnej arytmetyki zmiennoprzecinkowej dla systemów mikroprocesorowych , którą można kupić tutaj . W przypisie do §5.10 Szczegóły predykatu totalOrder zauważono, że:
Widzimy więc, że nie można pisać kodu do sortowania podwójnych. To podchwytliwe pytanie. Ha, ha, bardzo sprytne! Powiedz profesorowi, że bardzo podoba mi się jego kurs.
[edit: nic nie wymaga ode mnie nie do przyjęcia, że problem wymaga całkowitego zamówienie]
źródło
Zły JavaScript:
OP, nie chcę ci wszystkiego dawać, więc pozwolę ci dowiedzieć się, jak samemu uzyskać informacje od użytkownika (wskazówka: użyj
prompt
).Gdy to zrobisz, oto funkcja, do której możesz przekazać tablicę, aby ją posortować. Musisz tylko podać tablicę, najniższą wartość w tablicy i przyrost:
Oto skrzypce, aby zobaczyć, jak działa w przykładzie z danymi wejściowymi użytkownika [1,5, -3,5, 12, 10, -19,5].
Uwaga: Oprócz tego, że jest mało wydajny, złożony i nierozwiązywalny dla danego problemu, będzie to szczególnie frustrujące, jeśli OP nie będzie wiedział o matematyce zmiennoprzecinkowej. Na przykład, jeśli dane wejściowe użytkownika są,
[8.1, 5, -.8, 2.3, 5.6, 17.9]
a OP wybierze proste wartości (tj.minimumVal=-.8
Iincrement=.1
), program będzie działał na zawsze. W związku z tym jestem obecnie dumnym posiadaczem 2 niedziałających kart przeglądarki z powodu tego właśnie problemu :)Uwaga II: Czułem się obrzydliwy nawet pisząc powyższy kod.
Uwaga III: MWA HAHAHAHA!
źródło
Oto aktualna odpowiedź , którą lubię w Javie:
Bez wyjaśnień, myli OP , ale działa i otrzyma opinie od bardziej doświadczonych programistów.
Inna podobna odpowiedź :
Pośrednio mówi OP, aby przeprowadził własne badania, dając mu niejasną poprawną odpowiedź. Bez dalszych badań PO jest nadal zdezorientowany . Podoba mi się również, że link wskazuje na starszą dokumentację.
źródło
Algorytm genetyczny / metoda Monte Carlo dla problemu sortowania w JAVA
Problem sortowania znany jest komputerowo od dawna i znaleziono wiele dobrych rozwiązań. W ostatnich latach nastąpił wielki postęp w biokomputerze, a patrzenie na to, jak biologia rozwiązuje problemy, okazało się bardzo pomocne w rozwiązywaniu trudnych problemów. Ten algorytm sortowania wykorzystuje najlepsze z tych pomysłów, aby wykorzystać je do rozwiązania problemu z sortowaniem. Pomysł jest dość prosty. Zaczynasz z nieuporządkowaną tablicą i dowiadujesz się, jak już jest posortowana. Dajesz mu wynik „sortowania”, a następnie permutujesz tablicę losowym składnikiem - tak jak w biologii, gdzie nie jest jasne, jak będą wyglądać dzieci, nawet jeśli wiesz wszystko o rodzicach! To część algorytmu genetycznego. Można powiedzieć, że tworzysz potomstwo tej tablicy. Następnie zobaczysz, czy potomstwo jest lepiej posortowane niż rodzic (inaczej przeżycie najsilniejszych!). W takim przypadku kontynuujesz z nową tablicą jako punktem wyjścia do budowania następnej permutacji i tak dalej, aż tablica zostanie w pełni posortowana. Fajną rzeczą w tym podejściu jest to, że trwa krócej, jeśli tablica jest już trochę posortowana od samego początku!
Dodatki
źródło
Pyton
Sortowanie tablicy (lista) przez w sumie 3 rd i 5 th miejsc po przecinku.
źródło
lambda x:
i zastąpienie gox
. Mimo to początkujący programista nigdy by tego nie wiedział, więc chwała!C ++
To działa ... ostatecznie.
Oto mój algorytm sortowania:
Oto pełny program:
źródło
Rozkoszuj się oczami:
Ten fragment kodu wyświetla tablicę i prosi użytkownika o wprowadzenie najmniejszego podwójnego pola tablicy. Następnie dodaje liczbę do listy posortowanych liczb, usuwa podwójną liczbę z tablicy i wyświetla pozostałe numery tablic.
* Błędna interpretacja: słaby punkt, ale OP nie spodziewa się, że program poprosi użytkownika o pomoc w sortowaniu.
* Oszukiwanie: użytkownik dokonuje właściwego sortowania.
* Wydajność: każda liczba macierzy wymaga obchodu serwera i użytkownik musi ręcznie znaleźć najmniejszą liczbę. Wydajność nie może być znacznie gorsza.
* Niedopuszczalne: Myślę, że mam to ubezpieczone. Powodzenia w ponownym użyciu. Najgorsze przychodzi najgorsze, użytkownik może pozbyć się 90% kodu i powtarzać w pętli, aby znaleźć najmniejsze wartości i usuwać je za każdym razem, co dałoby mu jeden z najmniej wydajnych algorytmów sortowania.
* Twórczy i zły: mówisz mi.
źródło
Javascript Inteligentny projekt Sortuj
źródło
Python - wymagania # 1
Ten kod posortuje liczby podwójne w kolejności leksykograficznej, a nie w kolejności numerycznej, tworząc drzewo prefiksów cyfr, a następnie powtarzając je cyklicznie.
Działa na
n log n
czas i w rzeczywistości jest sprytnym sposobem na utrzymanie posortowanej listy w przeciwnym razie, ale niestety dla OP robi to całkowicie niewłaściwą rzecz.źródło
2, 1, 3, 8, 5
.Sortuje tablicę podwójnych. W Javie:
Na przykład:
[0.0, 1.5, 123]
pochodzi z nieposortowanej reprezentacji binarnej
011111111111000000000000000000000000000000000000000000000000000100000001011110110000000000000000000000000000000000000000000000
do elegancko posortowanych
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111111111111111
źródło
Edytuj według @kealist, myślę, że lepiej jest skomentować, aby podział wydawał się prawdopodobny. W Rebol ...
Pomijając pomysł, że tak naprawdę nie wiedzą, co to jest dublet, i mogą wierzyć, że lista dubletów była tylko zbiorem liczb pomnożonych przez dwa.
źródło
Celowo niezrozumienie pytania:
Stosując podejście rekurencyjne:
Posortowana tablica gwarantuje, że w pewnym momencie zostanie wyprowadzona, dla dowolnego rodzaju danych w tablicy, nawet dla dowolnego rodzaju sortowania, a nawet dla każdego separatora dla danych wejściowych, co czyni to podejście niezwykle elastycznym. Jego główną wadą jest to, że jest nieco powolny w przypadku dużych tablic, ale można to łatwo rozwiązać za pomocą wielowątkowości.
źródło