Tugas
Diberikan array non-kosong dari 0
dan 1
, membagi dua panjang berjalan dari 0
.
Memasukkan
Array dari 0
dan 1
. Format yang dapat diterima:
- Array nyata dalam bahasa Anda
- String yang dipisahkan oleh linefeed dari
0
dan1
- String berdekatan
0
dan1
- Format wajar lainnya
Misalnya, tiga input berikut semuanya dapat diterima:
[1, 0, 0, 1]
"1\n0\n0\n1"
(di mana\n
Linefeed U + 000A)"1001"
Anda mungkin berasumsi bahwa jangka waktu 0
akan genap .
Keluaran
Array 0
dan 1
, dalam format yang dapat diterima di atas.
Testcases
input ↦ output
[1,0,0,1,0,0,1] ↦ [1,0,1,0,1]
[1,1,0,0,1,1,0,0,1] ↦ [1,1,0,1,1,0,1]
[1,1,0,0,1,1,1,0,0,1,1] ↦ [1,1,0,1,1,1,0,1,1]
[1,1,1] ↦ [1,1,1]
[0,0,1] ↦ [0,1]
[0,0] ↦ [0]
[1,1,1,0,0,0,0,1,1,1,1,0,0,1,0,0,1,1,0,0,1,1,1,1,0,0,1,0,0] ↦ [1,1,1,0,0,1,1,1,1,0,1,0,1,1,0,1,1,1,1,0,1,0]
Mencetak gol
Ini adalah kode-golf . Jawaban terpendek dalam byte menang.
Celah standar berlaku.
code-golf
array-manipulation
Biarawati Bocor
sumber
sumber
true
danfalse
bukannya1
dan0
?0
.Jawaban:
Retina , 4 byte
Cobalah online!
sumber
05AB1E , 5 byte
Cobalah online!
Penjelasan
sumber
00
adalah perilaku aneh ...11
sebelas dan tidak1,1
. Efek sampingnya adalah00
menjadi00
bukan0,0
:)0
atau0 0
sebagai gantinya, tapi apa pun.Haskell , 33 byte
Cobalah online! Penggunaan:
f[1,1,0,0,1,1,0,0,1]
. Iterasi daftar dan ganti dua nol berturut-turut dengan satu nol.sumber
C (gcc) , 35 byte
48 adalah kode ascii dari '0'
versi 43 byte yang lebih baik seperti yang disarankan oleh Neil
40 byte lain kali ini (lagi seperti yang disarankan oleh Neil & VisualMelon) :)
dan kemudian 35 byte berkat Khaled.K
Cobalah online!
sumber
s+=2-*s%2
bekerjafor(;*s;s+=2-*s%2)putchar(*s);
menyimpan byte lain.s+=50-*s
? Tidak melakukan C selama berabad-abad dan tidak ingin mempermalukan diri sendiri dengan menerapkan perilaku yang tidak terdefinisi (berasal dari C # di mana tidak ada)putchar
dokumen, dapatkah Anda melakukannyaf(char*s){for(;*s;s+=50-putchar(*s));}
?f(char*s){*s&&f(s+50-putchar(*s));}
sed , 8 byte
Cobalah online!
sumber
0
dengan0
.Oktaf, 22 byte
Verifikasi semua kasus uji di sini.
Ini adalah fungsi anonim yang mengambil string pada format
'1001000011'
sebagai input, dan mengganti dua nol berturut-turut dengan nol tunggal.sumber
Java, 50 byte
Coba Online
sumber
s->s.replaceAll("00","0")
.replace
sebagai gantireplaceAll
menyimpan 3 bytereplace
hanya akan menggantikan kejadian pertamaHaskell , 28 byte
Cobalah online!
Secara rekursif mengambil elemen pertama, menjatuhkan yang kedua jika yang pertama adalah nol, sampai daftar kosong. Jika entri pertama adalah
h
, maka entri pertama1-h
dijatuhkan dari sisanya.sumber
Japt ,
7 65 byteCobalah online!
Cukup ganti setiap jalankan dari dua nol di input dengan satu nol. Menggunakan input string (yaitu
"1001001"
).sumber
'
saya pikir"00"
dengan'0²
:-)PHP, 26
cukup ganti semua
00
dengan0
.sumber
Alice , 13 byte
Cobalah online!
Penjelasan
Ini adalah templat sederhana untuk program linier yang beroperasi sepenuhnya dalam mode Ordinal. Awal
/
mencerminkan IP untuk bergerak ke tenggara dan kemudian memantul secara diagonal ke atas dan ke bawah melalui kode sampai mirror di akhir. Mereka hanya mengimbangi posisi dengan satu sehingga dalam perjalanan kembali IP melintasi sel yang tersisa. Membaca kode dengan cara zigzag ini menjadi:Ini adalah substitusi string sederhana:
Ada beberapa cara lain untuk mendorong dua string, misalnya
'00'0
ataue000t
, tapi saya belum menemukan apa pun yang mengalahkan 5 byte di sana (dan saya harus mencukur dua byte untuk dapat mempersingkat program).sumber
Prolog (SWI) , 42 byte
Cobalah online!
sumber
*
operator.Java ,
131123 byteCobalah online!
sumber
JavaScript (ES6),
2621 byteMengambil input sebagai string dan mengembalikan string.
Cobalah
sumber
Lua, 33 byte
Mengambil string melalui input dan mengembunkan nol ganda. Mudah.
sumber
Jelly , 8 byte
Cobalah online!
Kemungkinan jawaban lain dalam bahasa tanpa
.replace()
atau serupa dapat menggunakan trik ini.Penjelasan
sumber
Alice ,
1210 byte2 byte disimpan berkat Martin Ender
Cobalah online!
Penjelasan
Ini adalah kode 1-D yang beroperasi dalam mode kardinal, jadi mudah untuk mengikuti alurnya:
sumber
i.h%...
Python (daftar I / O), 36 byte
Cobalah online!
Secara rekursif mengambil elemen pertama, lalu menghapus yang tersisa jika yang pertama adalah nol.
38 byte:
Cobalah secara online Ini membutuhkan daftar Python dan mengeluarkan daftar Python dengan melakukan penggantian pada representasi string-nya. String I / O akan memungkinkan solusi yang lebih langsung dan lebih pendek, seperti
untuk
'1001'
format.sumber
lambda s:s.replace('00','0')
harus baik-baik saja.APL (Dyalog) , 9 byte
Cobalah online!
sumber
Perl 5, 7 + 1 (-p flag) = 8 byte
Mengambil input sebagai angka yang dipisahkan oleh baris baru. Melewati baris berikutnya jika melihat nol.
sumber
V , 4 byte
Cobalah online!
sumber
MATL , 5 byte
Cobalah online!
Penjelasan
Ini mirip dengan jawaban Octave Stewie Griffin :
8 byte
Ini menghindari penggantian string / array bawaan.
Cobalah online!
Penjelasan
Pertimbangkan input
[1,0,0,1,0,0,1]
sebagai contoh:sumber
Brachylog , 10 byte
Cobalah online!
Belum yakin ini belum optimal ...
Penjelasan
Ini mengeksploitasi bug yang ada
c
di daftar bilangan bulat yang memiliki angka nol di depannya akan gagal.sumber
[0,0,4,2]
ke42
. Nol terkemuka membuatnya gagal sekarang karena di sini untuk mencegah nol memimpin terkemuka ketika input adalah variabel, tapi di sini input sepenuhnya didasarkan sehingga batasan seharusnya tidak ada.C #, 191 byte
Cobalah online!
Ini tidak bersih atau pendek, tetapi berhasil.
Mengambil input sebagai rangkaian karakter yang berdekatan, menghasilkan dalam format yang sama
Penjelasan:
Catatan
Ya saya sadar ini bisa dilakukan dengan menggunakan
s.Replace("00","0")
, tujuan saya adalah untuk menghindari menggunakan solusi yang jelas. Bagaimanapun, inti dari PPCG adalah untuk bersenang-senang, bukan? ;)sumber
Replace
saya menggunakan C # jadi saya tidak memiliki delusi tentang mendapatkan kode sesingkat mungkin, terutama dengan bahasa seperti Jelly sekitar, jadi mungkin juga bersenang-senang sedikit dalam proses.string a(string s){var r="";for(int i=0;i<s.Length;i+=50-s[i])r+=s[i];return r;}
(Sepertinya ini pada dasarnya adalah jawaban C)Pyth, 8 byte
Tautan coba-coba.
Penjelasan:
sumber
Awk - 18 byte
Pertama-tama coba lakukan apa saja dengan Awk sehingga dimungkinkan untuk bermain golf lebih banyak.
Pemakaian:
echo "1001001" | awk '{gsub(00,0);print}'
sumber
Batch, 24 byte
Mengambil input pada STDIN. Agak kompetitif untuk sekali.
sumber
Gangguan Umum, SBCL,
4832 byte-16 Bytes terima kasih kepada Julian Wolf
memasukkan:
keluaran:
Penjelasan
Kami membaca daftar input. Daftar digunakan dalam
format
fungsi. Kami mengulanginya dengan mengeluarkan1
elemen jika1
mengeluarkan0
dan melewatkan elemen berikutnya dari daftar0
.sumber
~[
daripada~:[
memungkinkan Anda mengindeks dengan 0 dan 1 secara langsung, yang seharusnya menghemat banyak byteMathematica, 24 byte
Fungsi yang mengharapkan string
"0"
s dan"1"
s dan mengembalikan string yang sama. Sintaks penjelasan sendiri. Mathematica memiliki banyak transformasi bawaan; kuncinya adalah menggunakan yang mengubah setiap sub-ekspresi yang relevan (tidak seperti/.
) tetapi hanya melewati ekspresi sekali (tidak seperti//.
).sumber
Jelly , 10 byte
Cobalah online!
Penjelasan
sumber