Diberi pola (format string atau array) Bit:
[0,1,1,1,0,1,1,0,0,0,1,1,1,1,1,1]
Tugasnya adalah mengganti sejumlah 1-Bit berturut-turut dengan urutan angka naik mulai dari 1.
Memasukkan
- Pola (dapat diterima sebagai string atau larik) Contoh:
- Tali:
1001011010110101001
- Array:
[1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1]
- Tali:
Keluaran
- Urutan angka menaik (dapat dikembalikan sebagai string atau array) Contoh:
- Tali:
1 0 0 1 0 1 2 0 1 0 1 2 0 1 0 1 0 0 1
- Array:
[1, 0, 0, 1, 0, 1, 2, 0, 1, 0, 1, 2, 0, 1, 0, 1, 0, 0, 1]
- Tali:
Aturan
- (hanya berlaku untuk string) Input tidak akan berisi spasi antara
1
dan0
- Asumsikan Input
length > 0
- (hanya berlaku untuk string) Output dipisahkan oleh spasi (gunakan pemisah lain jika Anda perlu selama bukan angka atau huruf dari alfabet)
Contoh:
Given [0,1,1,1,0,1,1,0,0,0,1,1,1,1,1,1]
Output [0,1,2,3,0,1,2,0,0,0,1,2,3,4,5,6]
--------------------------------------------------------------------------
Given 0110101111101011011111101011111111
Output 0 1 2 0 1 0 1 2 3 4 5 0 1 0 1 2 0 1 2 3 4 5 6 0 1 0 1 2 3 4 5 6 7 8
---------------------------------------------------------------------------
Given 11111111111101
Output 1 2 3 4 5 6 7 8 9 10 11 12 0 1
Kriteria kemenangan: Codegolf
03 B3 20 AC 01 B6 02 DC
) atau 9 byte (utf-8:)CE B3 E2 82 AC C6 B6 CB 9C
atau 10 byte (mis., UTF-16 termasuk BOM 2 byte) dalam penyandian selain mainan? (Ya, orang bisa membuat mainan 8-bit yang mirip dengan iso-8859 dengan 4 simbol ini diwakili sebagai 1-byte, tapi itu sepertinya curang.)γ€ƶ˜
akan direpresentasikan sebagai04 80 8F 98
. Halaman kode utamanya ada untuk memudahkan penulisan kode. Untuk menjalankan file 4-byte ini, Anda perlu menjalankan interpreter dengan--osabie
flag.Haskell , 15 byte
Cobalah online!
Penjelasan / Tidak Diundang
scanl1
beralih dari kiri daftar menggunakan fungsi yang mengambil hasil terakhir dan elemen saat ini menghasilkan daftar baru dengan hasilnya, meninggalkan daftar kosong dan lajang "tidak dimodifikasi".(*).succ
adalah setara dengan\x y-> (x+1)*y
Menggunakan fungsi itu bersama-sama
scanl1
hanya berfungsi karena urutan meningkat ( 1,2,3, .. ) mulai dengan 1 dan keduanya tidak memiliki elemen sebelumnya (dalam hal ini elemen pertama dalam daftar yang tidak akan "dimodifikasi") atau mereka memiliki 0 terkemuka .sumber
Python 2 , 36 byte
Cobalah online!
sumber
Sekam ,
5 43 byteCobalah online!
Penjelasan
Edit riwayat
-1 byte dengan menggunakan
scanl1
lebih darizipWith
-1 byte oleh porting Dennis 's solusi
sumber
APL (Dyalog Unicode) , 5 byte
Cobalah online!
Bagaimana itu bekerja
sumber
⊥⍨
trik yang bagus.JavaScript (ES6), 22 byte
Mengambil input sebagai array.
Cobalah online!
Yang lebih pendek
a=>a.map(n=>a=n*-~a)
(20 byte) sayangnya akan gagal[1]
karena paksaan array singleton ke integer yang mereka pegang.sumber
J , 4 byte
Sebuah port dari solusi APL Bubbler
Cobalah online!
J , 8 byte
Bagaimana?
Hanya jarak ke pendahulunya
0
Cobalah online!
sumber
Python 2 ,
3938 byte-1 byte terima kasih kepada Erik the Outgolfer
Cobalah online!
sumber
,
.,
Anda tidak berada dalam kode lagi, tetapi Anda akan berada di hati saya selamanyaJelly , 4 byte
Cobalah online!
sumber
K (oK) ,
118 byteLarutan:
Cobalah online!
Penjelasan:
Iterate atas daftar. Akumulator kenaikan, kalikan dengan item saat ini (yang me-reset akumulator jika item adalah 0):
sumber
Jelly , 4 byte
Cobalah online!
Bagaimana itu bekerja
sumber
R ,
4631 byteCobalah online!
sequence
, yang "terutama ada dalam penghormatan terhadap sejarah awal R" , cukup berguna di sini.sumber
RAD, 8 byte
Cobalah online!
Bagaimana?
(⊢×1+⊣)
, jika argumen yang benar adalah0
, kembali0
, jika tidak, tambahkan argumen kiri⍂
, LTR Scan ((A f B) f C
bukanA f (B f C)
), terapkan ini melintasi arraysumber
Japt,
765 byteCobalah
Penjelasan
sumber
Java 8,
5548 byteMemodifikasi array input alih-alih mengembalikan yang baru untuk menghemat byte.
-7 byte terima kasih kepada @TimSeguine .
Cobalah online.
Penjelasan:
sumber
a->{int p=0,i=0;for(int b:a)a[i++]=b<1?p=0:++p;}
a->{int i=0;for(int v:a)a[i]+=v*i++<1?0:a[i-2];}
TIS , 68 + 33 = 101 byte
Kode (68 byte):
Tata Letak (33 byte):
Cobalah online!
Penjelasan:
sumber
Gaia , 5 byte
Cobalah online!
Penjelasan
Ugh, saya pikir font kode SE adalah monospace ....
sumber
C (gcc) ,
454438 byteCobalah online!
Simpan satu byte berkat Toby Speight!
Hemat 6 byte dengan menggunakan * = dan kondisi saat lebih pintar.
sumber
*(a-1)
→a[-1]
Perl 6 ,
29 2418 byte-6 byte terima kasih kepada Sean!
Cobalah online!
Fungsi dalam bisa lewat
($+=1)*=*
, tetapi variabel anonim akan tetap ada di seluruh panggilan fungsi. Kami mendapatkannya dengan membungkusnya dalam blok kode eksplisit.Penjelasan:
sumber
*.map(($+=1)*=*)
. Solusi ini memiliki ketentuan bahwa variabel status$
tetap ada di seluruh panggilan ke fungsi, jadi jika elemen terakhir yang diteruskan ke satu panggilan dan elemen pertama yang diteruskan ke panggilan berikutnya sama-sama tidak nol, maka penghitungan akan dimulai dengan nomor yang salah.*.map:{...}
.Jelly , 5 byte
Cobalah online!
sumber
Haskell , 19 byte
Cobalah online!
Penjelasan: Kode ini sama dengan
scanl1(\b a->(b+a)*a)
, di manab
bit saat ini dana
akumulator.scanl1
mengambil daftar, instantiate elemen daftar pertama sebagai akumulator, dan melipat daftar dan mengumpulkan nilai-nilai perantara dalam daftar baru.Sunting: BMO mengalahkan saya dengan beberapa detik dan 4 byte .
sumber
Pyth , 6 byte
Coba di sini!
Bagaimana itu bekerja
sumber
Ingin mendapatkan jawaban dalam menggunakan ekspresi reguler. Mungkin ada solusi yang lebih mudah yang saya tinggalkan sebagai latihan untuk pembaca.
Core PowerShell , 86 byte
Cobalah online!
sumber
Bahasa Wolfram (Mathematica) , 16 byte
Cobalah online!
sumber
QBasic, 60 byte
Mengambil input sebagai string; memberikan output sebagai angka yang dipisahkan oleh baris baru.
Penjelasan
Kami membaca string
s$
dan loopi
dari1
panjangnya.MID$(s$,i)
mendapatkan substring dari karakteri
(1-diindeks) ke akhir string. Jika ini dimulai dengan a1
, itu akan menjadi>=
string leksikografis"1"
; jika dimulai dengan0
, itu tidak akan. Jadib
didapat0
jika karakter pada indeksi
adalah0
, atau-1
jika karakter1
.Selanjutnya, kami memperbarui nilai saat ini
v
. Jika kita hanya membaca a0
, kita inginv
menjadi0
; jika tidak, kami ingin menambahv
satu. Dengan kata lain,v = (-b) * (v+1)
; menyederhanakan matematika memberikan ekspresi lebih pendek yang terlihat dalam kode. Akhirnya, kami mencetakv
dan mengulang.sumber
Brain-Flak , 60 byte
Cobalah online!
Penjelasan:
sumber
Retina , 14 byte
Cobalah online!
sumber
C (gcc),
575251 bytePort of JavaScript jawaban Arnauld , memodifikasi array di tempat. Cobalah online di sini .
sumber
f(a,l,c)int*a;{for(c=0;l--;)c=*a++*=c+1;}
Shakespeare, 365 byte
coba di sini
versi kurang golf
sumber
C ++, 47 byte
Sebuah lambda yang memodifikasi array di tempat, diberikan petunjuk awal dan akhir.
Cobalah online! (membutuhkan Javascript)
Versi generik pada 55 byte (ini berfungsi untuk wadah apa pun dengan elemen tipe aritmatika):
sumber