Ordnen Sie eine gegebene Liste neu an, so dass alle ungeraden Zahlen vor allen geraden Zahlen erscheinen. Außerdem kann die Ausgabeliste für diese Anforderung in beliebiger Reihenfolge sein.
Die Eingabe enthält nur Ganzzahlen, aber sie können negativ sein und es können Duplikate vorhanden sein, und sie können in beliebiger Reihenfolge angezeigt werden.
Kürzeste Lösung gewinnt.
Testfälle
[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]
oder[3,1,2,2,2,2]
[-2,-2,-2,-1,-2,-3]
→ [-1,-3,-2,-2,-2,-2,]
oder[-3,-1,-2,-2,-2,-2,]
[]
→ []
Antworten:
05AB1E , 2 Bytes
Probieren Sie es online!
quelle
Pyth ,
43 Bytes-1 Byte dank isaacg
Probieren Sie es online!
durchgestrichen 4 ist immer noch regulär 4
quelle
oiI2
.iD2
?oi2
J , 5 Bytes
Probieren Sie es online!
\:
absteigend sortieren nach2&|
mod-2quelle
R ,
3024 BytesProbieren Sie es online!
-6 Bytes dank JayCe
quelle
C ++,
797664 BytesDiese Funktion akzeptiert ein Paar Iteratoren (die Iteratoren mit wahlfreiem Zugriff sein müssen) und bewegt sie stetig aufeinander zu. Wenn
a
auf eine ungerade Zahl gezeigt wird, wird sie vorgerückt. Andernfalls wirda
auf eine gerade Zahl verwiesen.b
wird dekrementiert unditer_swap
mita
. (Wir verwenden XOR-Swap, was uns das Einbeziehen von<algorithm>
- oder<utility>
für - erspartstd::swap
.)Es gibt unnötige Swaps, wenn
b
Punkte auf eine gerade Zahl gesetzt werden, aber wir spielen Golf, ohne die Effizienz zu beeinträchtigen!Demo
Nicht wettbewerbsfähige Antwort
Die natürliche C ++ - Methode ist
std::partition
, aber das kommt bei 83 Bytes heraus:quelle
#include
Direktive einen Zeilenumbruch braucht . Meine Mathematik ist allerdings beschissen ^^. Sie können ersetzen!=
mit-
, Speichern 1 Byte. Ihr Ansatz gefällt mir, es ist klug!while(a<b)
wenn dies praktischer ist als diea!=b
Verwendung einer @ OOBalance-a-b
Version.algorithm
mitregex
: codegolf.stackexchange.com/a/150895Japt , 2 Bytes
Probieren Sie es online!
quelle
Perl 6 , 12 Bytes
Probieren Sie es online!
Ein beliebiger Code, der die Eingabe nach Parität sortiert, wobei ungerade Zahlen an erster Stelle stehen. Sie können
%
stattdessen a entfernen , um zuerst gerade Zahlen zu erhalten. Beachten Sie, dass "Was auch immer" der Name dieser Art anonymer Funktion ist.quelle
MATL, 6 Bytes
Probieren Sie es auf MATL Online aus
Abwechselnd:
Probieren Sie es auf MATL Online aus
quelle
Python 2 ,
3736 BytesProbieren Sie es online!
1 Byte Trinkgeld für Mr. Xcoder .
quelle
~
sollte funktionieren statt1-
.Stax , 5 Bytes
Führen Sie es aus und debuggen Sie es
Erläuterung:
quelle
Haskell ,
2322 BytesProbieren Sie es online! Dies ist äquivalent zu
-1 Byte danke an Lynn
Andere Ansätze:
quelle
import Data.Semigroup
?(<>)
ist ein Teil von Prelude . Da TIO noch eine ältere Version ausführt, wird dort der Import benötigt. Aber du hast recht, ich hätte das direkt erwähnen sollen.k odd<>k even;k=filter
Speichert ein Byte.Attache , 11 Bytes
Probieren Sie es online!
Erläuterung
Even
Gibttrue
für gerade undfalse
andere Zahlen zurück .SortBy
Rängefalse < true
(durch einen numerischen Wurf auf0 < 1
), wodurch ungerade Zahlen vor gerade gestellt werden.quelle
JavaScript (Node.js) , 29 Byte
Probieren Sie es online! Sparen Sie 4 Bytes, indem Sie nur positive Werte mit unterstützen
b%2-a%2
. Wenn Sie dies schreiben als:dann wird es auf allen Arten von alten JavaScript-Implementierungen funktionieren, die nicht stabil sortiert wurden.
quelle
a=>a.sort((a,b)=>b&1-a&1)
funktioniert?b&(1-a)&1
.a=>a.sort(a=>++a&1)
ist kürzer :)T-SQL, 26 Bytes
Verwendet den bitweisen AND-Operator "&", um die letzte Ziffer mit 1 zu vergleichen.
BEARBEITEN: Bitweise NICHT kürzer als Hinzufügen von 1. BEARBEITEN2: Neu anordnen, um das Entfernen des Leerzeichens zu ermöglichen.
quelle
ORDER BY~i&1
Gelee , 3 Bytes
Probieren Sie es online!
Eines der am häufigsten gesuchten Atome scheint ein gleichmäßiges zu sein (was diese 2 Bytes ergeben würde), ohne das wir umkehren müssen, glaube ich ...
quelle
JavaScript,
22 bis20 Bytea=>a.sort(a=>!(a%2))
Probieren Sie es online!
quelle
a
.0
im Array enthalten ist.[1,2,3,4,5,6,6,-1,-2,-3,-4]
. JavaScriptarray.sort
ist komisch.PHP , 55 Bytes
~ 14 Monate später und ich bin jetzt ein bisschen besser im Golfen:
Probieren Sie es online!
PHP (> = 5,4),
8482 Bytes(-2 Bytes, danke an Ismael Miguel )
Um es auszuführen:
Beispiel:
Oder versuchen Sie es online!
quelle
$a=array_slice($argv,1);
Verwenden Sie stattdessenarray_shift($a=&$argv);
, was 1 Byte spart. Entfernen Sie außerdem den Speicherplatz, bevor Sie$a
injoin(' ', $a)
speichern, ein anderes Byte. Auch PHP 5.3 liefert unterschiedliche Ergebnisse. Sie sollten angeben, für welche PHP-Version diese Lösung geeignet ist.array_shift
Idee und den Hinweis auf den Platzfehler . Ich bin mir nicht sicher, wie ich das Leerzeichen verpasst habe: DI hat auch den Titel PHP> = 5.4 hinzugefügt.array_shift
als ich es ausprobierte und arbeitete.Rot , 42 Bytes
Probieren Sie es online!
Wenn wir negative Werte berücksichtigen müssen:
Rot , 43 Bytes
Probieren Sie es online!
quelle
Schale , 4 Bytes
Probieren Sie es online!
Erläuterung
quelle
Scala , 18 Bytes
quelle
C #, 23 Bytes
Richtig geradeaus: Das konvertiert im Grunde genommen die Zahlen in Boolesche Werte, während
true
die Zahl gerade undfalse
die ungerade ist. Denntrue
ist höher alsfalse
die geraden Zahlen erscheinen zuerst.Die formatierte Version sieht so aus:
Und so kannst du es testen:
Was zu Folgendem führt:
quelle
JavaScript, 23 Byte
6 Bytes kürzer als die Antwort von @ Neil in derselben Sprache: D
Erläuterung:
Die an übergebene Funktion
sort
kümmert sich nur um den ersten Parameter. Wenn es ungerade ist, gibt es zurück-1
(das Ergebnis von-(n&1)
). Andernfalls (wenn sich-(n&1)
ergibt0
) kehrt es zurück1
.Probieren Sie es online!
quelle
Python , 35 Bytes
Probieren Sie es online!
Sortiert nach der Funktion
x -> (-1)**x
, die-1
für ungerade und1
für gerade gibt.quelle
JavaScript (Chrome v67) -
241923 BytesDie Verwendung von
&1
anstattMath.abs()%2
wurde von @Neil gestohlen. Vielen Dank!Vielen Dank an @Shaggy für die Anzeige, dass meine 19-Byte-Hacky-Lösung nicht gültig war. Wenn jemand es will:
Hängt davon ab, wie der Browser mit einem Hacky Return-Wert von umgeht0
. Chrome v67 hat es nach 100000 Iterationen von zufälligen Arrays nie falsch sortiert. Ich bin mir sehr sicher, dass es funktioniert - und es hängt auch von dem speziellen Sortieralgorithmus ab, den Chrome verwendet, glaube ich. (Es könnte in anderen Browsern funktionieren, das ist nicht der Punkt)a=>a.sort(a=>++a&1)
quelle
[-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]
in meiner Chrome 67-Konsole und bei der Ausgabe[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 Bytes
Probieren Sie es online aus
quelle
PowerShell ,
22 bis19 ByteProbieren Sie es online!
Nimmt Eingaben über Splatting entgegen,
$a=(3,4,3); .\sort-odd-numbers-first.ps1 @a
die sich bei TIO als separate Argumente für jeden Eintrag manifestieren.Wie einige andere Antworten hier,
Sort-Object
kann auch ein Vergleich anhand eines Ausdrucks erfolgen. Hier ist der Ausdruck!($_%2)
, dh die Gewinnchancen werden sortiert$false
und die Gewinnchancen werden sortiert$true
. Durch den Vergleich von Booleschen Werten werden falsche Werte zuerst sortiert. Dadurch werden die Gewinnchancen an den Anfang der Ausgabe und die Gewinnchancen an das Ende verschoben.Sort-Object
ist stabil, daher ändert sich die Reihenfolge der einzelnen Artikel in ihren jeweiligen Kategorien nicht (wie im TIO-Beispiel).-3 Bytes dank mazzy.
quelle
$a=(3,4,3); .\sort-odd-numbers-first.ps1 @a
. So$args|sort{!($_%2)}
genügt. Ist es nichtRuby , 23 Bytes
Probieren Sie es online!
Erläuterung:
sort_by
sortiert jede Zahl so, als wäre ihr Wert das Ergebnis des Blocks (~i%2
)~x
ist gleichbedeutend mit-x-1
und hat Vorrang vor%2
Ungerade Zahlen werden zu
0
und gerade Zahlen werden zu ausgewertet,1
sodass ungerade Zahlen zuerst sortiert werden.Kaum verwandt: Dies funktioniert auf Ruby aus Homebrew 2.5.1p57 (da es auf einem kleinen Fehler basiert), aber nur für nicht negative ganze Zahlen, 20 Bytes
Erläuterung:
Dies verwendet,
sort
was einen Block erwartet, der 2 Werte annimmt und zurückgibt-1
,0
oder1
je nachdem, ob der erste größer ist, sie gleich sind oder der zweite größer ist.Der hier angegebene Block ignoriert den zweiten Wert und gibt zurück,
-1
ob die erste Zahl ungerade oder0
gerade ist.Es ist nicht garantiert, dass es funktioniert, aber es funktioniert in einigen (ich denke fehlerhaften) Implementierungen.
quelle
6502 Maschinencode- Routine, 47 Bytes
Erwartet einen Zeiger auf ein Array von Zahlen in
$fb
/$fc
und die Länge dieses Arrays in$fd
. Manipuliert das Array so, dass alle ungeraden Zahlen im Vordergrund stehen. Dies ist ein positionsunabhängiger Code, daher wird keine Ladeadresse benötigt.Da es sich beim 6502 um einen 8-Bit-Chip handelt (in den Anweisungen werden nur 8-Bit-Werte behandelt, die optional signiert sind), gilt der gültige Nummernbereich
[-128 .. 127]
und die maximale Array-Größe256
.Kommentierte Demontage
Beispiel C64 Assembler Programm mit der Routine:
Online-Demo
Code in ca65- Syntax:
quelle
Elixier ,
37-35BytesCode:
Erweiterte Version:
Probieren Sie es online!
quelle
Clojure - 35 Bytes
Ungolfed:
quelle
#(...)
. Sie können es auchsort-by
versuchen, obwohl der Beitrag bereits vorhanden ist.#()
anonyme Funktion ausprobiert, habe aber einen Arity-Fehler erhalten, da zwei Parameter übergeben wurden, aber nur auf erwartet / verwendet und%2
zusätzliche Zeichen hinzugefügt wurden. Würde mich interessieren, wie das gemacht werden könnte.