Mempersingkat (atau tidak) teks menggunakan pengkodean run run
Memasukkan:
heeeello woooorld
Keluaran:
1h4e2l1o 1w4o1r1l1d
- Baca baris dari stdin.
- Cetak ke stdout.
- Stderr tentu saja dibuang.
- Asumsikan ada testcases tersembunyi (tidak ada embedding dari output)
- Input / Output sebagai ASCII
- Bahasa apa pun diterima
w4orld
alih-alih1w4o1r1l1d
(Anda harus keluar dari angka, mis. `F111 -> f3 \ 1´). Tapi kemudian itu akan menjadi duplikat dekat dari ini: codegolf.stackexchange.com/questions/677422
adalah titik perbaikan sepele.11
tidak mungkin.22
harus berakhir di sana atau diikuti oleh titik tetap lain yang tidak dimulai dengan2
.333nnn
adalah pola yang mustahil, karena Anda tidak akan pernah menemukan karakter yang sama pada indeks ganjil berturut-turut.4444
dan gagal karena alasan yang sama.Jawaban:
Perl:
46→ 36 atau 27 karakterperl -pe's|((.)\2*)|@x=split//,$1;@x.$x[0]|eg'
Semua salam @ardnew untuk memunculkan ide menggunakan
tr///c
operator untuk menghitung jumlah karakter dalam string yang cocok alih-alih membelah:Degolfed:
Pemakaian:
atau melalui STDIN
cetakan
sumber
p
opsi.s|((.)\2*)|$1=~y///c.$2|eg
, yang berjumlah 27 karakter total (menggunakan aturan penghitungan karakter yang sama dengan @Gareth)-p
) dengan menghilangkan paren luar: Coba online!Stax , 7 byte
Jalankan dan debug st stlanglang.xyz!
Dibongkar (8 byte) dan penjelasan:
5 byte, hanya berfungsi pada satu baris:
Jalankan dan debug di staxlang.xyz!
Mungkin tidak legal. Program ini mencetak setiap pasangan pada garisnya sendiri. Agak samar.
Jika format output itu ilegal, saya beri Anda 6 byte :
Jalankan dan debug di staxlang.xyz!
Pencipta bahasa menunjukkan secara rekursif bahwa uncons-right (
N
) dapat mempersingkat ini menjadi enam byte yang dibongkar, karena menanganiE
dan]
dengan sendirinya. Program sesingkat ini, sering kali tidak menjadi lebih pendek saat dikemas, dan ini adalah contohnya. Masih enam byte:|RFNpp
Edit: Harus memperbarui jawaban utama saya; bentuk ini yang saya gunakan.sumber
|RFNpp
dapat memberikan output yang ditentukan dalam 6 byte dibongkar, tetapi sayangnya, tidak dikemas.J,
3531 karakterPemakaian:
sumber
[:,(#,&":{.)/.~
untuk 15: Cobalah online!Brachylog , 11 byte
Cobalah online!
(Jika output benar-benar harus di stdout, tambahkan satu byte
w
di akhir.)sumber
K (oK) , 28 byte
Cobalah online!
Di ponsel, penjelasan untuk mengikuti ...
sumber
Python 3 berulang,
1159997 byteCobalah online!
Python 3 rekursif,
136130129 byteCobalah online!
Pendekatan berulang tampaknya cukup berhasil, sedangkan versi rekursif memiliki banyak ruang untuk perbaikan.
sumber
while
loop dalam kode Anda hanya ada di sana untuk menunjukkan input. Tanpa itu, kode Anda masih valid. Dalam hal ini, loop tidak perlu menjadi bagian dari kode dan Anda dapat mengurangi contoh pertama menjadi 85 byte seperti: Coba online!05AB1E , 9 byte
Cobalah online.
Atau sebagai alternatif:
Cobalah online.
Penjelasan:
sumber
Bahasa Wolfram (Mathematica) , 98 byte
Cobalah online!
Format I / O yang lebih fleksibel mengurangi solusi ini menjadi 54 byte :
Cobalah online!
sumber
Bash: 104 karakter
Contoh dijalankan:
sumber
Zsh, 117
Jalankan seperti ini:
De-golf
sumber
[[
membangun adalah perintah pada itu sendiri (seperti[
) dan telah dipisahkan dari perintah lain. Untuk menggunakan[
lebih dari[[
itu, diperlukan argumen untuk dikutip sehingga empat"
perlu ditambahkan.APL (24)
sumber
Burlesque (17B)
Versi yang lebih lama / Alternatif dan lebih panjang:
sumber
rs , 19 karakter
Ini tidak terlalu diperhitungkan karena saya membuat rs cara setelah ini diposting ... tapi itu tetap menyenangkan!
Coba di sini!
sumber
Retina , 12 byte
Cobalah online.
Penjelasan:
Dapatkan bagian dari 1 atau lebih dari karakter yang sama, menangkap karakter dalam grup tangkapan 1.
Gantilah dengan panjang total pertandingan, digabungkan dengan karakter dari grup tangkapan 1:
sumber
Ruby , 42 byte
Cobalah online!
sumber
Python 3 , 84 byte
Cobalah online!
Penjelasan
Cek apakah karakter pertama dan kedua dari string sama. Jika ya, tambah penghitung dengan 1. Jika tidak, cetak penghitung dan item pertama dan setel ulang penghitung ke 1. Dalam kedua kasus, fungsinya disebut secara rekursif dengan karakter pertama dihapus.
Meningkatkan kesalahan saat akhir string tercapai.
Tanpa batasan I / O, tetapi dengan jumlah byte minimal:
Python 3.8 (pra-rilis) , 70 byte
Cobalah online!
Setara Python 3 (77 byte)
Penjelasan
Lepaskan semua karakter berulang dari awal string. Kemudian mengembalikan string yang berisi (1.) perbedaan panjang antara string asli dan string yang dilucuti; (2.) karakter pertama dari string asli; (3.) hasil dari fungsi rekursif yang diterapkan pada string yang dilucuti. Rekursi berakhir ketika string kosong ditemukan.
sumber
[Scala (shell)], 150 byte
Cobalah online!
Di sini Lambda murni de-golf (103 byte):
sumber
Julia 1.1 ,
948481 byteCobalah online!
sumber
'\n'
untukreadline()
bukannya mencetak tuple terakhir manualCJam , 2 byte
e`
adalah built-in untuk pengkodean run-length. Output implisit CJam mengabaikan tanda kurung array, dan karenanya berubah[[1 'h] [2 'e]]
menjadi"1h2e"
Cobalah online!
sumber
Zsh, 70 byte
coba online!
Ini adalah versi jauh lebih golf dari jawaban zsh sebelumnya ( tautan tio ). Mungkin bisa di-golf lebih banyak menggunakan konversi string => array daripada iterasi.
sumber