Judul salah eja dengan sengaja. Baca lebih lanjut untuk mengetahui alasannya.
Tugas Anda: diberi string atau daftar terbatas termasuk karakter A,B,C,D
, output indeks dari semua karakter yang sama yang berdekatan. Output dapat berupa banyak string / integer pada banyak baris, daftar / array, atau string yang dibatasi.
Semua output harus dalam daftar atau string, atau beberapa baris yang dicetak. Setiap baris yang dicetak, jika ada banyak, hanya boleh berisi 1 string atau angka. Whatevers yang tertinggal tidak apa-apa.
Metode input / output standar. Celah standar berlaku.
Sebagai contoh, input 'ABCDDCBA'
harus di-output 3,4
atau 4,5
, tergantung pada apakah itu 0 ke 1- diindeks, karena angka-angka itu adalah indeks dari D
dan di D
sebelahnya.
Kasus uji:
,
Kasing uji memiliki input yang diberikan sebagai string tunggal, dan output sebagai string -drivisi. Output diindeks 0, tambahkan 1 ke setiap item yang di-output untuk menjadikannya 1-diindeks.
Input: 'ABCDCABCD'
Output: ''
Input: 'AABBCCDD'
Output: '0,1,2,3,4,5,6,7'
Input: 'ABCDDDCBA'
Output: '3,4,5'
Input: 'ABBCDD'
Output: '1,2,4,5'
Ini kode-golf , jadi kode terpendek menang!
3,4,4,5
valid juga?AABBCD
->
1,2,3,4
Jawaban:
MATL ,
87 byteOutput berbasis 1.
Cobalah online!
Penjelasan dengan contoh
Pertimbangkan input
'ABCDDDCBA'
.sumber
Retina ,
332923 byteDisimpan 6 byte berkat Martin Ender
Menghasilkan daftar indeks yang dipisahkan oleh linefeed.
Cobalah online!
Penjelasan
Aliran transliterasi dari karakter yang sama ke titik dua, untuk menandai posisi di mana ada karakter duplikat.
Kemudian ganti setiap titik dua dengan panjang teks sebelum itu, diikuti oleh linefeed.
Akhirnya, hapus semua huruf yang tersisa.
sumber
Jelly , 7 byte
Berbasis 1; mengembalikan daftar daftar indeks yang diizinkan oleh OP.
Cobalah online!
Bagaimana?
sumber
ṁ
- Hal-hal yang saya harap 05AB1E bisa lakukan untuk 500, tolong.Brain-Flak ,
5746 byteTermasuk +2 untuk
-ar
Menggunakan pengindeksan berbasis 0.
Cobalah online!
sumber
Mathematica, 32 byte
Fungsi murni yang mengembalikan posisi 1-indeks karakter yang berdekatan dengan karakter yang identik.
Penjelasan:
StringPosition["string","sub"]
memberikan daftar posisi karakter awal dan akhir yang"sub"
muncul sebagai substring dari"string"
.x_~~x_
adalahStringExpression
yang cocok dengan dua karakter yang berdekatan dan identik. Misalnya,StringPosition["ABCDDDCBA",x_~~x_]
memberi{{4, 5}, {5, 6}}
. MenerapkanUnion
bergabung dengan daftar, mengurutkan, dan menghapus duplikat.sumber
Brain-Flak ,
69, 59, 56 byteCobalah online!
+2 byte untuk
-ar
flag yang memungkinkan input ASCII dan membalikkan stack.Menggunakan pengindeksan berbasis 0. Disimpan 10 byte dengan mengurangi redundansi push-pop saya . Menyimpan 4 byte lainnya dengan beralih dari pengindeksan berbasis 1 ke 0.
Ini adalah satu-satunya tantangan berbasis string yang bisa dilakukan oleh brain-flak. Itu karena brain-flak sangat bagus dalam membandingkan karakter yang berurutan, meskipun itu mengerikan dalam pemrosesan string secara umum. Ini adalah versi kode yang dapat dibaca dengan komentar untuk menjelaskan cara kerjanya:
sumber
-r
. Itu membawa saya ke 46.Brachylog , 19 byte
Cobalah online!
Penjelasan
Brachylog biasanya mengerikan dengan indeks, yang sekali lagi ditampilkan di sini.
Jika
false.
output yang dapat diterima dalam kasus di mana tidak ada karakter yang berdekatan, maka ini akan menjadi 1 byte lebih sedikit dengan menggantiᶠd
denganᵘ
.sumber
Oktaf , 35 byte
Cobalah online!
Mirip dengan jawaban MATL saya . Di sini
unique
secara otomatis macam. Masukan untukdiff
harus dikonversi kedouble
, yang dilakukan oleh unary+
.sumber
Cubix,
37 32 31 2928 byteTerima kasih kepada ETHProductions karena menunjuk saya ke arah penghematan tiga byte
Coba di sini ! Perhatikan bahwa indeks output berbasis 1 dan tidak dalam urutan menaik.
Diperluas:
Penjelasan
Ini bekerja dengan membaca karakter input oleh karakter. Untuk membandingkan dua karakter, kami cukup mengurangi kode karakter mereka, dan jika hasilnya 0, kami mencetak panjang tumpukan saat ini, spasi, panjang tumpukan saat ini - 1 dan ruang lain. Lalu kami membersihkan tumpukan sedikit, dan kami mulai dengan loop baca lagi. Jika akhir dari string input tercapai, program berhenti.
sumber
#
untuk mendapatkan panjang tumpukan saat Anda membutuhkannya. (Juga, LOL'ed di;_;
dalam kode;))!$w
bukan!w
dan pindah bagian dari logika baris kelima ke baris keempat? (Tidak dapat mencoba sekarang karena saya sedang menuju keluar pintu)C, 75 byte
Menggunakan spasi sebagai pembatas. (Tanda koma tidak terlihat terlalu bagus.)
Cobalah online!
sumber
C # , 115 byte
Golf
Tidak disatukan
Tidak terbaca dibaca
Kode lengkap
Rilis
115 bytes
- Solusi awal.Catatan
Tidak ada yang perlu ditambahkan
sumber
Jelly , 8 byte
Cobalah online!
sumber
Ṗ=ḊTµ2Ḷ+€
k, 18 byte
Contoh:
Terjemahan ke
q
lebih mudah dipahami:sumber
JavaScript, 52 byte
Terima kasih @Neil untuk bermain golf 1 byte
Menerima input sebagai array karakter yang diindeks 0
Mengembalikan output sebagai array yang diindeks 1
Penjelasan
Untuk setiap karakter dalam string
Jika sama dengan karakter sebelumnya atau karakter berikutnya, kembalikan indeks + 1 jika tidak, jangan kembali (membiarkan undefined dalam array)
Hapus semua elemen yang tidak terdefinisi dari array yang dihasilkan
Cobalah online!
sumber
&&i
menghemat lebih dari satu byte(...)*i
?0|0&&6
is 0,1|0&&6
is 6,0|1&&6
is 6,1|1&&6
is 6. Bukankah itu yang Anda inginkan?Python 2,
5554 byteCobalah secara Online!
Indeks output dipisahkan oleh spasi (perhatikan bahwa indeks ini menampilkan beberapa indeks dua kali sebagaimana diizinkan oleh OP)
sumber
Perl 5 , 37 byte
35 byte kode +
pl
bendera.Cobalah online!
(?<=(.))\1|(.)(?=\2)
akan cocok dengan antara dua karakter yang diulang ((?<=(.))\1
), atau sebelum karakter yang diulang ((.)(?=\2)
).Lalu,
print pos
cetak posisi korek api. (pos
berisi indeks kecocokan saat ini ketika digunakan dalam regex dengan/g
pengubah).sumber
Perl 6 ,
6657 byteCobalah
Cobalah
sumber
PHP, 100 Bytes
sumber
Ruby , 51 + 1 = 52 byte
Menggunakan
-n
bendera.Cobalah online!
sumber
Batch, 139 byte
Mengambil input pada STDIN. Bekerja dengan melacak berapa banyak angka yang akan dicetak dalam
c
variabel, yang diatur ulang ke 2 ketika pasangan terdeteksi. Catatan: Dengan biaya 6 byte, dapat diperkeras untuk bekerja dengan sebagian besar karakter ASCII dan bukan hanyaABCD
.sumber
C #, 89 Bytes
Jika ada tiga atau lebih karakter berturut-turut indeks diulang. @Comrade SparklePony yang diizinkan di komentar.
Program lengkap tidak digabungkan:
sumber
QBIC , 42 byte
Output sampel:
Penjelasan:
EDIT: QBIC sekarang memiliki Substring! Tantangan ini sekarang dapat diselesaikan dalam 32 byte:
Dimana:
sumber
k, 14 byte
Ini adalah fungsi, mengambil string, dan mengembalikan daftar indeks.
Penjelasan:
Cobalah online!
Bagaimana cara menggunakan:
sumber
PHP, 70 byte
menerima input dari STDIN; jalankan bersama
-R
.sumber