Celem tego Code Golf jest stworzenie programu, który sortuje listę ciągów znaków (w porządku rosnącym), bez korzystania z żadnej wbudowanej metody sortowania (np. Array.Sort()
W .NET, sort()
w PHP, ...). Zauważ, że to ograniczenie wyklucza użycie wbudowanej metody, która sortuje tablicę malejąco, a następnie odwraca tablicę.
Trochę szczegółów:
Twój program powinien poprosić o podanie danych wejściowych, a jest to lista ciągów zawierających tylko małe litery alfabetu ASCII
a-z
, oddzielone przecinkami bez spacji. Na przykład:code,sorting,hello,golf
Wynikiem powinna być podana lista ciągów znaków, ale posortowana w porządku rosnącym, wciąż oddzielona przecinkami bez spacji. Na przykład:
code,golf,hello,sorting
Ruby
765451 znakówźródło
x=gets.scan /\w+/
k (16 znaków)
Prawdopodobnie tak naprawdę nie pasuje do ducha problemu. W k nie ma wbudowanego operatora sortowania .
<x
zwraca listę indeksów pozycji w x w posortowanej kolejności.źródło
SED, 135
Na podstawie mojego poprzedniego wpisu dotyczącego sortowania
źródło
Ruby, 99 znaków ( sortowanie według Gnome )
To ledwie pobiła moją implementację sortowania bąbelkowego:
Rubin,
110104101 znaków ( sortowanie w bąbelkach )Robi to
list.length
iteracje, ponieważ najgorszy scenariusz wymagalist.length - 1
iteracji, a jeszcze jeden naprawdę nie ma znaczenia i oszczędza 2 znaki.Dla zabawy wersja Quicksort:
Ruby, 113 znaków ( Quicksort )
źródło
Haskell, 141
Przynajmniej jest to… trochę wydajne.
źródło
m=minimum
s[]=[]
s l=m l:(s$l\\[m l])
(zamień linie 2–4 na te linie).init
Nie wydaje się być konieczne, ponieważ nie ma ani spływu,
, ani nowej linii spływu.t s=let(a,b)=span(/=',')s in a:t(drop 1 b)
można skrócić stosując ograniczającymi, z zastosowaniem(>',')
i opuszczenie przestrzeni pomiędzy1 b
:t s|(a,b)<-span(>',')s=a:t(drop 1b)
.x#(y:r)|y<x=y:x#r;x#r=x:r
jest krótsze. Można go użyć bezpośrednio w,t
a ponieważ nie używa(\\)
iintercalate","
można go zastąpićtail.((',':)=<<)
, import można usunąć. Wszystkie 101 bajtów: Wypróbuj online!vba, 165
źródło
Split
.c=","
i wywołaniec
faktycznie zwiększa liczbę bajtów w tym przypadku, przyczyniając się do 7 bajtów do liczby bajtów, przy czym samo użycie „,” dwa razy dałoby 6 bajtów. Możesz obniżyć kod bajtowy, pobierając dane wejściowe bezpośrednio z wywołania podrzędnego (sub q(s)
) i zakładając, że s jest typu variant \ string. Możesz stracić jeszcze jeden bajt, zmieniającFor i=1 to
nafor i=1To
. możesz stracić 5 bajtów, zmieniającDebug.Print Join...
naDebug.?Join...
Scala, 122 bajty
Jako jednowierszowy (88 bajtów):
(posortuje listę po prostu robiąc
list.permutations.fil...
)Jako program (122 bajty):
Dłuższa wersja, jeśli chcesz czytać ze standardowego wejścia.
Powtarza to wszystkie permutacje z danej listy, aż natknie się na posortowaną. Nie jest to szybkie, ponieważ sortowanie listy 10 elementów zajmuje około 12 sekund, a dla 11 elementów - ponad minutę.
[Edytuj] elementy muszą być unikalne lub
<
można je zastąpić<=
. Również przepraszam za nekro.źródło
javascript 128
Skrzypce DEMO .
szukam sposobu na wyeliminowanie
b
.źródło
[]
wokół po,?
aby zapisać 2 znakiSyntaxError: missing : in conditional expression
ponieważ?:;
(skrótif/else
) powinien tylko wziąć dwa fragmenty kodu do wykonania (tj.true?b++:b--;
) Za pomocą[
,]
jest włamaniem, wciąż nie jestem pewien, dlaczego to działa, myślę, że jest rozumiany jako pusta tablica deklaracja, jak umieszczenie losowego ciągu lub liczby jako samodzielnego polecenia. ale nadal możesz swobodnie głosować.?:
, że priorytet operatora jest niższy niż,
{
,}
ale to nie zadziałało - rozumiemSyntaxError: missing : after property id
. tak jak w przypadku pierwszeństwa, nawiasy są zawsze pierwsze. nadal chciałbym głosować pozytywnie ...PHP 83 bajty
O (n = 3 ) realizacja rodzaj selekcji. Jest
Ó
to postać 211; nieco odwrócony przecinek.Przykładowe użycie:
źródło
Python 3 (80 znaków)
Oto odmiana instrukcji while o równej długości:
źródło
Mathematica
6656Niektóre inne rozwiązania bez wbudowanego symbolu
Ordering
:Bogosort:
8474Sortowanie bąbelkowe:
9383Inne rozwiązanie równie nieefektywne jak bogosort:
8272źródło
Python 3.5+, 73 bajty
To czerpie inspirację z odpowiedzi Stevena Rumbalskiego, ale używa rozumienia listy zamiast pętli while; liczba iteracji pochodzi z skopiowanej listy,
l
co wymaga dodatkowych uogólnień dotyczących rozpakowywania i Pythona 3.5źródło
R
Sortowanie bąbelkowe:
122118 znakówBogosort: 100 znaków
źródło
Perl, 159
To nigdy nie miało szansy na wygraną, ale postanowiłem się nim podzielić, ponieważ podobała mi się logika, nawet jeśli jest to bałagan :) Ideą tego jest przekonwertowanie każdego słowa na liczbę całkowitą (wykonaną za pomocą funkcji ord ), zapisujemy liczbę jako klucz w haszu, a łańcuch jako wartość, a następnie coraz częściej iterujemy przez wszystkie liczby całkowite (w tym przypadku 1..10 ** 100) i w ten sposób sortujemy nasze łańcuchy.
OSTRZEŻENIE : Nie uruchamiaj tego kodu na swoim komputerze, ponieważ przechodzi on przez tryliony + liczb całkowitych. Jeśli chcesz to przetestować, możesz obniżyć górną granicę zakresu i wprowadzić ciągi nie długie. Jeśli z jakiegokolwiek powodu jest to niezgodne z zasadami, daj mi znać, a ja usunę wpis!
źródło
JS: 107 znaków - Sortowanie bąbelkowe
Spojrzałem na odpowiedź @ próbujeToGetProgrammingStraight i próbowałem ją poprawić, ale ostatecznie wprowadziłem ją nieco inaczej.
źródło
Java, 134 bajty
Metoda, która implementuje Gnome Sort.
źródło
Szybki, 101 bajtów
Nie golfowany:
źródło
𝔼𝕊𝕄𝕚𝕟, 24 znaki / 30 bajtów (niekonkurencyjne)
Try it here (Firefox only).
Za pomocą sortowania wyboru!
Wyjaśnienie
Zasadniczo rekurencyjnie usuwa i wypycha minimum z danych wejściowych do innej tablicy.
źródło
Ceylon (Bogosort), 119
Wypróbuj online!
Znalazłem tę
permutations
metodę i tym samym skończyłem z Bogosortem (wariant nieprzypadkowy).Sformatowane i skomentowane:
Bez formatowania i analizy staje się tylko 90 bajtami:
Wypróbuj online!
źródło
Perl 5 , 77 bajtów
Wypróbuj online!
Proste sortowanie bąbelkowe.
źródło
ruby -plaF,
, 70 bajtówO (n), jeśli udajesz, że zmiana rozmiaru i kompaktowanie tablicy jest darmowa (to bardzo nie jest wolne).
Tworzymy głęboko i nierównomiernie zagnieżdżoną tablicę
o
, umieszczając ciąg z bajtami b 1 , b 2 ... b n w tablicy w pozycji o [b 1 ] [b 2 ] ... [b n ]. Wynik wygląda jak[,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,["a,",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, [,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, ["abc,"], ["abd,"], ["abe,"]], ["ac,"], ["ad,"]],, ["c,"]]
Następnie spłaszczamy go i wyprowadzamy.
źródło
Tcl , 211 bajtów
Wypróbuj online!
źródło