Zmień kolejność danej listy, tak aby wszystkie liczby nieparzyste pojawiały się przed wszystkimi liczbami parzystymi. Poza tym wymogiem lista wyników może być w dowolnej kolejności.
Dane wejściowe będą zawierać tylko liczby całkowite, ale mogą być ujemne i mogą występować duplikaty oraz mogą występować w dowolnej kolejności.
Najkrótsze rozwiązanie wygrywa.
Przypadki testowe
[1,2]
→ [1,2]
[2,1]
→ [1,2]
[1,0,0]
→ [1,0,0]
[0,0,-1]
→ [-1,0,0]
[3,4,3]
→ [3,3,4]
[-4,3,3]
→ [3,3,-4]
[2,2,2,3]
→ [3,2,2,2]
[3,2,2,2,1,2]
→ [1,3,2,2,2,2]
lub[3,1,2,2,2,2]
[-2,-2,-2,-1,-2,-3]
→ [-1,-3,-2,-2,-2,-2,]
lub[-3,-1,-2,-2,-2,-2,]
[]
→ []
Odpowiedzi:
05AB1E , 2 bajty
Wypróbuj online!
źródło
Pyth ,
43 bajty-1 bajt dzięki isaacg
Wypróbuj online!
przekreślone 4 jest nadal regularne 4
źródło
oiI2
.iD2
?oi2
J , 5 bajtów
Wypróbuj online!
\:
sortuj malejąco według2&|
mod-2źródło
R ,
3024 bajtówWypróbuj online!
-6 bajtów dzięki JayCe
źródło
C ++,
797664 bajtówTa funkcja akceptuje parę iteratorów (które muszą być iteratorami o swobodnym dostępie) i stopniowo przesuwa je w kierunku siebie. Gdy
a
wskazuje na liczbę nieparzystą, jest ona przesuwana. W przeciwnym raziea
wskazuje na liczbę parzystą;b
jest zmniejszany iiter_swap
edytowany za pomocąa
. (Używamy wymiany XOR, co oszczędza nam konieczności dołączania<algorithm>
- lub<utility>
dlastd::swap
).Są niepotrzebne zamiany, gdy
b
wskazuje się na liczbę parzystą, ale my gramy w golfa, nie zmniejszając wydajności!Próbny
Odpowiedź niekonkurencyjna
Naturalna metoda C ++ jest
std::partition
, ale wychodzi ona na 83 bajty:źródło
#include
dyrektywie potrzebujesz nowego wiersza . Moja matematyka jest do bani ^^. Można wymienić!=
z-
, oszczędzając 1 bajt. Podoba mi się twoje podejście, jest sprytne!while(a<b)
jeśli jest to wygodniejsze niża!=b
korzystanie za-b
wersji @ OOBalance .algorithm
jąregex
: codegolf.stackexchange.com/a/150895Japt , 2 bajty
Wypróbuj online!
źródło
Perl 6 , 12 bajtów
Wypróbuj online!
Jakikolwiek kod sortujący dane wejściowe według parzystości, najpierw z liczbami nieparzystymi. Zamiast tego możesz usunąć a,
%
aby uzyskać liczby parzyste. Zauważ, że „cokolwiek” to nazwa tego rodzaju anonimowej funkcji.źródło
MATL, 6 bajtów
Wypróbuj na MATL Online
Na przemian:
Wypróbuj na MATL Online
źródło
Python 2 ,
3736 bajtówWypróbuj online!
1 bajtowa wskazówka dla pana Xcodera .
źródło
~
powinien działać zamiast1-
.Stax , 5 bajtów
Uruchom i debuguj
Wyjaśnienie:
źródło
Haskell ,
2322 bajtówWypróbuj online! Jest to równoważne z
-1 bajt dzięki Lynn
Inne podejścia:
źródło
import Data.Semigroup
?(<>)
jest częścią Preludium . Ponieważ TIO nadal działa w starszej wersji, import jest tam potrzebny. Ale masz rację, powinienem o tym wspomnieć bezpośrednio.k odd<>k even;k=filter
zapisuje bajt.Attache , 11 bajtów
Wypróbuj online!
Wyjaśnienie
Even
zwracatrue
liczby parzyste ifalse
inaczej.SortBy
rangifalse < true
(według rzutów numerycznych na0 < 1
), umieszczając liczby nieparzyste przed parzystymi.źródło
JavaScript (Node.js) , 29 bajtów
Wypróbuj online! Zaoszczędź 4 bajty, obsługując tylko wartości dodatnie przy użyciu
b%2-a%2
. Jeśli napiszesz to jako:wtedy będzie działał na wszelkiego rodzaju starych implementacjach JavaScript, które nie posortowały się stabilnie.
źródło
a=>a.sort((a,b)=>b&1-a&1)
działa?b&(1-a)&1
.a=>a.sort(a=>++a&1)
jest krótszy :)T-SQL, 26 bajtów
Używa bitowego operatora AND „&” do porównania ostatniej cyfry z 1.
EDYCJA: Bitowa NIE jest wówczas krótsza niż dodanie 1. EDIT2: Zmień kolejność, aby umożliwić usunięcie przestrzeni.
źródło
ORDER BY~i&1
Galaretka , 3 bajty
Wypróbuj online!
Jeden z częściej poszukiwanych atomów wydaje się być nawet parzysty (co dałoby te 2 bajty), bez tego musimy odwrócić, wierzę ...
źródło
JavaScript,
2220 bajtówa=>a.sort(a=>!(a%2))
Wypróbuj online!
źródło
a
.0
jest uwzględniony w tablicy.[1,2,3,4,5,6,6,-1,-2,-3,-4]
. JavaScriptarray.sort
jest dziwny.PHP , 55 bajtów
~ 14 miesięcy później i jestem teraz trochę lepszy w golfie:
Wypróbuj online!
PHP (> = 5,4),
8482 bajtów(-2 bajty, dzięki Ismael Miguel )
Aby uruchomić:
Przykład:
Lub wypróbuj online!
źródło
$a=array_slice($argv,1);
, użyjarray_shift($a=&$argv);
, co oszczędza 1 bajt. Również usunąć spację przed$a
INjoin(' ', $a)
, oszczędzając kolejny bajt. Ponadto PHP 5.3 daje różne wyniki. Powinieneś określić, dla której wersji PHP jest to rozwiązanie.array_shift
pomysł i wskazując błąd kosmiczny. Nie jestem pewien, jak tęskniłem za miejscem: DI dodałem również PHP> = 5,4 w tytule.array_shift
kiedy spróbowałem i pracowałem.Czerwony , 42 bajty
Wypróbuj online!
Jeśli musimy uwzględnić ujemne wartości:
Czerwony , 43 bajty
Wypróbuj online!
źródło
Łuska , 4 bajty
Wypróbuj online!
Wyjaśnienie
źródło
Scala , 18 bajtów
źródło
C #, 23 bajty
Bardzo prosto: naprawdę zamienia liczby na logiczne, a jednocześnie
true
oznacza, że liczba jest parzysta ifalse
że jest nieparzysta. Ponieważtrue
jest wyższy niżfalse
liczby parzyste pojawiają się jako pierwsze.Sformatowana wersja wygląda następująco:
Możesz to przetestować w ten sposób:
Co powoduje:
źródło
JavaScript, 23 bajty
6 bajtów krótszych niż odpowiedź @ Neila w tym samym języku: D
Wyjaśnienie:
Funkcja przekazana do
sort
dba tylko o pierwszy parametr. Jeśli jest nieparzysty, zwraca-1
(wynik-(n&1)
). W przeciwnym razie (gdy-(n&1)
daje0
) zwraca1
.Wypróbuj online!
źródło
Python , 35 bajtów
Wypróbuj online!
Sortuje według funkcji
x -> (-1)**x
, co daje-1
nieparzyste i1
parzyste.źródło
JavaScript (Chrome v67) -
241923 bajtówWykorzystanie
&1
zamiastMath.abs()%2
zostało skradzione z @Neil. Dzięki!Dzięki @Shaggy za pokazanie mojego zepsutego 19-bajtowego rozwiązania nie było prawidłowe. Jeśli ktoś tego chce:
Zależy od tego, jak przeglądarka obsługuje hacky zwrot wartości0
. Chrome v67, po 100 000 iteracjach losowych tablic nigdy nie posortował go źle. Jestem pewien, że to działa - i sądzę, że opiera się na specyficznym algorytmie sortowania, którego używa Chrome. (To może działać w innych przeglądarkach, nie o to chodzi)a=>a.sort(a=>++a&1)
źródło
[-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19]
do mojej konsoli Chrome 67, wysyłania[7,-5,-3,17,-1,15,1,13,3,11,5,9,2,19,14,-4,6,18,-2,16,0,10,8,12,4]
.JavaScript, 21 bajtów
Wypróbuj online
źródło
PowerShell ,
2219 bajtówWypróbuj online!
Pobiera dane wejściowe poprzez rozpryskiwanie, np.,
$a=(3,4,3); .\sort-odd-numbers-first.ps1 @a
Które w TIO przejawia się jako osobne argumenty dla każdego wpisu.Podobnie jak niektóre inne odpowiedzi tutaj,
Sort-Object
można porównać na podstawie wyrażenia. Wyrażenie to oznacza!($_%2)
, że kursy są sortowane$false
i wyrównane$true
. Dzięki temu, jak porównywane są wartości logiczne, wartości falsey są najpierw sortowane. To przenosi szanse na początek wyniku, a wyrównanie na koniec.Sort-Object
jest stabilny, więc kolejność poszczególnych pozycji w odpowiednich kategoriach nie zmienia się (jak w przykładzie TIO).-3 bajty dzięki mazzy.
źródło
$a=(3,4,3); .\sort-odd-numbers-first.ps1 @a
. To$args|sort{!($_%2)}
wystarczy. Czyż nieRubinowy , 23 bajty
Wypróbuj online!
Wyjaśnienie:
sort_by
sortuje każdą liczbę tak, jakby jej wartość była wynikiem bloku (~i%2
)~x
jest równoważne-x-1
i ma pierwszeństwo przed%2
Liczby nieparzyste będą obliczane na,
0
a liczby parzyste na1
tak, aby liczby nieparzyste były sortowane jako pierwsze.Prawie spokrewnione: działa na Ruby z Homebrew 2.5.1p57 (ponieważ jest oparty na małym błędzie), ale tylko dla liczb całkowitych nieujemnych, 20 bajtów
Wyjaśnienie:
Używa tego,
sort
który oczekuje bloku, który przyjmuje 2 wartości i zwraca-1
,0
lub w1
zależności od tego, czy pierwszy jest większy, czy są równe, czy drugi jest większy.Podany tutaj blok ignoruje drugą wartość i zwraca,
-1
jeśli pierwsza liczba jest nieparzysta lub0
parzysta.Nie gwarantuje się, że zadziała, ale działa w niektórych (chyba błędnych) implementacjach.
źródło
Procedura kodu maszynowego 6502 , 47 bajtów
Oczekuje wskaźnika do tablicy liczb w
$fb
/$fc
i długości tej tablicy w$fd
. Manipuluje tablicę w miejscu, aby wszystkie nieparzyste liczby były z przodu. Jest to kod niezależny od pozycji, więc adres ładowania nie jest potrzebny.Ponieważ 6502 jest układem 8-bitowym (więc instrukcje dotyczą tylko wartości 8-bitowych, opcjonalnie podpisanych), prawidłowy zakres liczb to
[-128 .. 127]
i maksymalny rozmiar tablicy256
.Skomentowano demontaż
Przykładowy program asemblerowy C64 wykorzystujący procedurę:
Demo online
Kod w składni ca65 :
źródło
Eliksir ,
3735 bajtówKod:
Wersja rozszerzona:
Wypróbuj online!
źródło
Clojure - 35 bajtów
Nie golfowany:
źródło
#(...)
. Możesz takżesort-by
spróbować, chociaż przesłanie już istnieje.#()
anonimową funkcję, ale wystąpił błąd arity, ponieważ dwa parametry zostały przekazane, ale tylko przy oczekiwanym / użytym, i wprowadzając%2
do niego dodano więcej znaków. Byłbym zainteresowany, aby zobaczyć, jak można to zrobić.