Tugas
Membalikkan bilangan ganjil dalam daftar 2 hingga 2 15 bilangan bulat non-negatif.
Contohnya
0 1
→ 0 1
1 3
→ 3 1
1 2 3
→ 1 2 3
1 3 2
→ 3 1 2
10 7 9 6 8 9
→ 10 9 7 6 8 9
23 12 32 23 25 27
→ 23 12 32 27 25 23
123 123 345 0 1 9
→ 345 123 123 0 9 1
Jawaban:
Python 2,
756863 byte5 byte berkat Dennis.
Dan saya telah mengalahkan Dennis .
Penghargaan untuk Byeonggon Lee untuk inti dari algoritma.
Ide itu!
Versi lama: 75 byte
sumber
print
tidak perlu orangtua. Juga, Anda hanya menggunakana
sekali, jadi tidak perlu untuk variabel.Python 2,
797573 byteIni adalah fungsi yang mengubah argumennya. Level indentasi kedua adalah tabulator.
Uji di Ideone .
sumber
APL,
2120 byteCobalah || Semua uji kasus
Penjelasan:
Sunting: Disimpan
~
berkat berkat hukum De Morgansumber
Haskell,
4644 byteTerima kasih kepada @xnor karena mengenali lipatan dan menghemat dua byte.
sumber
(h*)
! Anda dapat menyimpan byte pada casing dasar dengan menulisf x=x
detik untuk mencocokkan daftar kosong, meskipun sepertinyafoldr
lebih pendekh%p|(l,r)<-span(odd.(h*))p=l++h:r;foldr(%)[]
::foldr
setelah semua! Terima kasih.Jelly , 10 byte
Cobalah online! atau verifikasi semua kasus uji .
Bagaimana itu bekerja
sumber
Python 2,
7875 byteSuper hacky :)
sumber
k.i
?k.i=0
di baris terakhir. Itu hanya variabel.k
dank.i
terkait?k.i
adalah variabel persisten antara panggilank
. Lihat sebagai global darurat tanpa harus menggunakanglobal
kata kunci.Python3, 96 byte
Menyimpan banyak byte berkat Leaky Nun!
sumber
C, 107 byte
sumber
MATL , 20 byte
Input adalah array kolom, menggunakan
;
sebagai pemisah.Cobalah online!
Penjelasan
Pertimbangkan sebagai contoh array input
[1;2;3;5;7;4;6;7;9]
. Bagian pertama dari kode,,Tiodgv
mengkonversi array ini menjadi[1;1;1;0;0;1;0;1;0]
, di mana1
menunjukkan perubahan paritas . (Secara khusus, kode memperoleh paritas dari setiap entri array input, menghitung perbedaan berurutan, mengonversi nilai bukan nol menjadi1
, dan menambahkan sebuah1
.)Kemudian
Ys
menghitung jumlah kumulatif , memberi[1;2;3;3;3;4;4;5;5]
. Masing-masing angka ini akan digunakan sebagai label , berdasarkan elemen-elemen input yang akan dikelompokkan . Ini dilakukan olehG8XQ!
, yang membagi array input menjadi array sel yang berisi grup. Dalam hal ini memberi{[1] [2] [3;5;7] [4;6] [7;9]}
.Sisa kode iterates (
"
) pada array sel. Setiap array numerik konstituen didorong dengan@g
.to
membuat salinan dan menghitung paritasnya . Jika (?
) hasilnya benar, yaitu isi array aneh, array dibalik (P
).Tumpukan secara implisit ditampilkan di akhir. Setiap larik vertikal numerik ditampilkan, memberikan daftar angka yang dipisahkan oleh baris baru.
sumber
Pyth, 14 byte
Uji kasus
sumber
J ,
333130 bytePemakaian
sumber
C #,
179178177 byteSaya menggunakan C # lambda. Anda dapat mencobanya di .NETFiddle .
Kode kurang minify:
Kudos to Byeonggon Lee untuk algoritma asli.
sumber
foreach(var
dan mengubahif(n%2==1)
keif(n%2>0)
untuk menyimpan 2 byte (atau sebenarnya 1, karena jawaban Anda saat ini adalah 179 byte, bukan 178).Pyth,
2928 byteSuite uji.
Terjemahan langsung dari jawaban python saya (kapan menerjemahkan dari python ke pyth menjadi ide yang bagus?)
sumber
TSQL 118 byte
Biola
sumber
Clojure, 86 byte
Ini adalah versi tanpa ungolfed
Pada dasarnya ia melewati urutan input dan jika bertemu bilangan genap ia menambahkan angka dan vektor kosong jika tidak, itu bilangan ganjil menggantikan elemen terakhir dengan angka ini ditambah apa yang ada di elemen terakhir.
Sebagai contoh untuk seq
2 4 6 1 3 7 2
ini seperti ini:[]<=2
[2 []]<=4
[2 [] 4 []]<=6
[2 [] 4 [] 6 []]<=1
[2 [] 4 [] 6 [1 []]]<=3
[2 [] 4 [] 6 [3 [1 []]]]<=7
[2 [] 4 [] 6 [7 [3 [1 []]]]]<=2
[2 [] 4 [] 6 [7 [3 [1 []]]] 2 []]
Dan kemudian meratakan vektor ini memberikan hasil yang benar. Anda dapat melihatnya online di sini: https://ideone.com/d2LLEC
sumber
JavaScript (ES6)
7066Edit 4 byte disimpan thx @Neil
sumber
:r=r.concat(o,x,o=[]),
menghemat beberapa byte. Saya pikir Anda kemudian dapat pergi untuk menyelamatkan dua lain seperti ini:a=>[...a,[]].map(x=>x&1?o=[x,...o]:r=r.concat(o,x,o=[]),r=o=[])&&r
....o
?Stax ,
1510 byte CP437Cobalah online!
Jeli terikat! Sedih karena pengemasan hanya menghemat satu byte.
Versi tanpa paket dengan 11 byte:
Penjelasan
{|e_^*}
adalah sebuah blok yang memetakan semua nomor bahkann
untukn+1
, dan semua angka ganjiln
untuk0
.sumber
Sekam , 7 byte
Cobalah online!
Penjelasan
sumber
Ruby , 51 byte
Cobalah online!
Beberapa variasi kecil:
sumber
Perl 5 dengan
-p
, 42 byteCobalah online!
sumber