Atur ulang daftar yang diberikan sedemikian rupa sehingga semua angka ganjil muncul sebelum semua angka genap. Selain untuk persyaratan ini, daftar keluaran mungkin dalam urutan apa pun.
Input hanya akan berisi bilangan bulat, tetapi mungkin negatif dan mungkin ada duplikat, dan mereka dapat muncul dalam urutan apa pun.
Solusi terpendek menang.
Uji kasus
[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]
atau[3,1,2,2,2,2]
[-2,-2,-2,-1,-2,-3]
→ [-1,-3,-2,-2,-2,-2,]
atau[-3,-1,-2,-2,-2,-2,]
[]
→ []
Jawaban:
05AB1E , 2 byte
Cobalah online!
sumber
Pyth ,
43 byte-1 byte terima kasih kepada isaacg
Cobalah online!
dicoret 4 masih teratur 4
sumber
oiI2
.iD2
?oi2
J , 5 byte
Cobalah online!
\:
semacam turun dengan2&|
mod-2sumber
R ,
3024 byteCobalah online!
-6 byte terima kasih kepada JayCe
sumber
C ++,
797664 byteFungsi ini menerima sepasang iterator (yang harus merupakan iterator akses acak), dan terus menggerakkan mereka ke arah satu sama lain. Ketika
a
menunjuk ke nomor ganjil, itu maju. Jika tidak,a
arahkan ke nomor genap;b
didekrementasi, daniter_swap
diedit dengana
. (Kami menggunakan XOR swap, yang menyelamatkan kami harus menyertakan<algorithm>
- atau<utility>
untukstd::swap
).Ada swap yang tidak perlu saat
b
menunjuk ke angka genap, tapi kami bermain golf, bukan menekan efisiensi!Demo
Jawaban tidak kompetitif
Metode C ++ alami
std::partition
, tetapi keluar pada 83 byte:sumber
#include
arahan. Matematika saya payah ^^. Anda dapat mengganti!=
dengan-
, menghemat 1 byte. Saya suka pendekatan Anda, itu pintar!while(a<b)
jika itu lebih nyaman daripadaa!=b
menggunakan versi @ OOBalancea-b
.algorithm
denganregex
: codegolf.stackexchange.com/a/150895Japt , 2 byte
Cobalah online!
sumber
Perl 6 , 12 byte
Cobalah online!
Beberapa kode apa pun yang mengurutkan input berdasarkan paritas, dengan angka ganjil terlebih dahulu. Anda dapat menghapus a
%
untuk mendapatkan nomor genap sebagai gantinya. Perhatikan bahwa 'Apapun' adalah nama dari fungsi anonim semacam ini.sumber
MATL, 6 byte
Cobalah di MATL Online
Bergantian:
Cobalah di MATL Online
sumber
Python 2 ,
3736 byteCobalah online!
1 byte tip topi kepada Tn . Xcoder .
sumber
~
harus bekerja1-
.Stax , 5 byte
Jalankan dan debug itu
Penjelasan:
sumber
Haskell ,
2322 byteCobalah online! Ini setara dengan
-1 byte terima kasih kepada Lynn
Pendekatan lain:
sumber
import Data.Semigroup
?(<>)
adalah bagian dari Prelude . Karena TIO masih menjalankan versi yang lebih lama, impor diperlukan di sana. Tapi Anda benar, saya seharusnya menyebutkan ini secara langsung.k odd<>k even;k=filter
menghemat satu byte.Attache , 11 byte
Cobalah online!
Penjelasan
Even
mengembalikantrue
angka genap danfalse
sebaliknya.SortBy
peringkatfalse < true
(oleh pemain numerik ke0 < 1
), sehingga menempatkan angka ganjil sebelum yang genap.sumber
JavaScript (Node.js) , 29 byte
Cobalah online! Simpan 4 byte dengan hanya mendukung nilai positif menggunakan
b%2-a%2
. Jika Anda menulis ini sebagai:maka itu akan bekerja pada semua jenis implementasi JavaScript lama yang tidak mengurutkan secara stabil.
sumber
a=>a.sort((a,b)=>b&1-a&1)
bekerjab&(1-a)&1
.a=>a.sort(a=>++a&1)
lebih pendek :)T-SQL, 26 byte
Menggunakan bitwise DAN operator "&" untuk membandingkan digit terakhir dengan 1.
EDIT: Bitwise TIDAK lebih pendek daripada menambahkan 1. EDIT2: Urutkan ulang untuk memungkinkan penghapusan ruang.
sumber
ORDER BY~i&1
Jelly , 3 byte
Cobalah online!
Salah satu atom yang lebih sering dicari tampaknya adalah atom-bahkan (yang akan menghasilkan 2 byte), tanpa itu kita harus membalikkan saya percaya ...
sumber
JavaScript,
2220 bytea=>a.sort(a=>!(a%2))
Cobalah online!
sumber
a
.0
disertakan dalam array.[1,2,3,4,5,6,6,-1,-2,-3,-4]
. JavaScriptarray.sort
itu aneh.PHP , 55 byte
~ 14 bulan kemudian dan saya sedikit lebih baik dalam bermain golf sekarang:
Cobalah online!
PHP (> = 5.4),
8482 byte(-2 byte, terima kasih kepada Ismael Miguel )
Untuk menjalankannya:
Contoh:
Atau Coba online!
sumber
$a=array_slice($argv,1);
, gunakanarray_shift($a=&$argv);
, yang menghemat 1 byte. Juga, menghapus ruang sebelum$a
dijoin(' ', $a)
, menyimpan byte lain. Juga, PHP 5.3 memberikan hasil yang berbeda. Anda harus menentukan versi PHP untuk solusi ini.array_shift
idenya dan menunjukkan kesalahan ruang. Saya tidak yakin bagaimana saya kehilangan ruang: DI telah menambahkan judul PHP> = 5,4 juga.array_shift
ketika saya mencobanya dan berhasil.Merah , 42 byte
Cobalah online!
Jika kita perlu memperhitungkan nilai negatif:
Merah , 43 byte
Cobalah online!
sumber
Sekam , 4 byte
Cobalah online!
Penjelasan
sumber
Scala , 18 byte
sumber
C #, 23 byte
Benar-benar maju: Ini pada dasarnya mengubah angka menjadi boolean, sementara itu
true
berarti angkanya genap danfalse
ganjil. Karenatrue
lebih tinggi daripadafalse
angka genap yang muncul lebih dulu.Versi yang diformat terlihat seperti itu:
Dan Anda dapat mengujinya seperti itu:
Yang menghasilkan sebagai berikut:
sumber
JavaScript, 23 byte
6 byte lebih pendek dari jawaban @ Neil menggunakan bahasa yang sama: D
Penjelasan:
Fungsi yang diteruskan ke
sort
hanya peduli tentang parameter pertama. Jika ganjil mengembalikan-1
(hasil-(n&1)
). Kalau tidak (saat-(n&1)
hasil0
) itu kembali1
.Cobalah online!
sumber
Python , 35 byte
Cobalah online!
Urutkan berdasarkan fungsi
x -> (-1)**x
, yang memberi-1
untuk ganjil dan1
genap.sumber
JavaScript (Chrome v67) -
241923 bytePenggunaan
&1
daripadaMath.abs()%2
dicuri dari @Neil. Terima kasih!Terima kasih kepada @Shaggy karena menunjukkan solusi 19 byte saya yang hacky tidak valid. Jika ada yang menginginkannya:
Bergantung pada bagaimana browser menangani nilai pengembalian0
. Chrome v67, setelah 100000 iterasi array acak tidak pernah diurutkan salah. Saya sangat yakin ini berfungsi - dan itu bergantung pada algoritma pengurutan khusus yang digunakan Chrome juga, saya percaya. (Mungkin bekerja di browser lain, bukan itu intinya)a=>a.sort(a=>++a&1)
sumber
[-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]
di konsol Chrome 67 saya, mengeluarkan[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 byte
Cobalah online
sumber
PowerShell ,
2219 byteCobalah online!
Mengambil input melalui splatting, misalnya,
$a=(3,4,3); .\sort-odd-numbers-first.ps1 @a
, yang pada TIO bermanifestasi sebagai argumen terpisah untuk setiap entri.Seperti beberapa jawaban lain di sini,
Sort-Object
dapat membandingkan berdasarkan ekspresi. Di sini ungkapannya!($_%2)
, yaitu, peluang diurutkan ke$false
dan bahkan diurutkan ke$true
. Berkat bagaimana nilai Boolean dibandingkan, nilai falsey diurutkan terlebih dahulu. Ini memindahkan peluang ke awal keluaran, dan titik akhir ke akhir.Sort-Object
stabil, sehingga pemesanan setiap item dalam kategorinya masing-masing tidak berubah (seperti pada contoh TIO).-3 byte berkat mazzy.
sumber
$a=(3,4,3); .\sort-odd-numbers-first.ps1 @a
. Jadi$args|sort{!($_%2)}
cukup. Bukan?Ruby , 23 byte
Cobalah online!
Penjelasan:
sort_by
mengurutkan setiap angka seolah-olah nilainya adalah hasil dari blok (~i%2
)~x
setara dengan-x-1
dan diutamakan%2
Angka ganjil akan mengevaluasi
0
dan bahkan angka akan mengevaluasi1
sehingga angka ganjil akan diurutkan terlebih dahulu.Hampir tidak berhubungan: ini bekerja pada ruby dari homebrew 2.5.1p57 (karena didasarkan pada bug kecil) tetapi hanya untuk bilangan bulat non-negatif, 20 byte
Penjelasan:
Ini menggunakan
sort
yang mengharapkan blok yang mengambil 2 nilai dan pengembalian-1
,0
atau1
tergantung pada apakah yang pertama lebih besar, mereka sama atau yang kedua lebih besar.Blok yang diberikan di sini mengabaikan nilai kedua dan kembali
-1
jika angka pertama ganjil atau0
bahkan genap.Itu tidak dijamin untuk bekerja tetapi itu dalam beberapa (saya pikir kereta) implementasi.
sumber
6502 rutin kode mesin , 47 byte
Mengharapkan pointer ke array angka di
$fb
/$fc
dan panjang array ini di$fd
. Memanipulasi array di tempat untuk memiliki semua angka ganjil di depan. Ini adalah kode posisi independen, jadi tidak perlu memuat alamat.Karena 6502 adalah chip 8bit (jadi instruksi hanya menangani nilai 8bit, ditandatangani opsional), kisaran angka yang valid adalah
[-128 .. 127]
dan ukuran array maksimumnya256
.Dikomentari pembongkaran
Contoh program assembler C64 menggunakan rutin:
Demo online
Kode dalam sintaksis ca65 :
sumber
Elixir ,
3735 byteKode:
Versi yang diperluas:
Cobalah online!
sumber
Clojure - 35 byte
Tidak Disatukan:
sumber
#(...)
. Anda juga bisasort-by
mencoba, meskipun pengiriman sudah ada.#()
fungsi anonim tetapi mendapatkan kesalahan arity karena dua parameter dilewati tetapi hanya pada yang diharapkan / digunakan, dan membawanya%2
menambahkan lebih banyak karakter. Akan tertarik untuk melihat bagaimana ini bisa dilakukan.