Ini kebalikan dari Let's do some "deciph4r4ng"
Dalam tantangan ini, tugas Anda adalah menyandikan string. Untungnya, algoritme ini cukup sederhana: membaca dari kiri ke kanan, setiap karakter penulisan khas (rentang ASCII 32-126) harus diganti dengan angka N (0-9) untuk menunjukkan bahwa itu sama dengan karakter N + 1 posisi sebelumnya. Pengecualian adalah ketika karakter tidak muncul dalam 10 posisi sebelumnya di string asli. Dalam hal ini, Anda cukup mencetak karakter lagi. Secara efektif, Anda harus dapat membalikkan operasi dari tantangan asli.
Contoh
String input "Programming"
akan dikodekan dengan cara ini:
Oleh karena itu, output yang diharapkan adalah "Prog2am0in6"
.
Klarifikasi dan aturan
- String input akan berisi karakter ASCII dalam kisaran 32 - 126 secara eksklusif. Anda dapat berasumsi bahwa itu tidak akan pernah kosong.
- String asli dijamin tidak mengandung digit apa pun.
- Setelah karakter dikodekan, karakter tersebut dapat direferensikan oleh digit berikutnya. Misalnya,
"alpaca"
harus dikodekan sebagai"alp2c1"
. - Referensi tidak akan pernah membungkus string: hanya karakter sebelumnya yang dapat direferensikan.
- Anda dapat menulis program lengkap atau fungsi, yang mencetak atau menampilkan hasilnya.
- Ini adalah kode golf, jadi jawaban tersingkat dalam byte menang.
- Celah standar dilarang.
Uji kasus
Input : abcd
Output: abcd
Input : aaaa
Output: a000
Input : banana
Output: ban111
Input : Hello World!
Output: Hel0o W2r5d!
Input : this is a test
Output: this 222a19e52
Input : golfing is good for you
Output: golfin5 3s24o0d4f3r3y3u
Input : Programming Puzzles & Code Golf
Output: Prog2am0in6 Puz0les7&1Cod74G4lf
Input : Replicants are like any other machine. They're either a benefit or a hazard.
Output: Replicants 4re3lik448ny3oth8r5mac6in8.8T64y'r371it9376a1b5n1fit7or2a1h2z17d.
Jawaban:
05AB1E ,
20 1918 byte-2 Terima kasih kepada Emigna
Cobalah online!
sumber
)¹vDyåiDykëy}?y¸ìT£
berfungsi.õIvDyåiDykëy}?yìT£
untuk 18 :)Retina ,
2423 byteCobalah online!
Substitusi regex yang cukup sederhana. Kami mencocokkan setiap karakter dan mencoba menemukan salinannya 0-9 karakter sebelum itu. Jika kami menemukannya, kami mengganti karakter dengan jumlah karakter yang kami harus cocok untuk mendapatkan salinan.
Hasilnya tidak cukup cocok dengan kasus uji, karena yang ini menggunakan digit terbesar yang mungkin bukan yang terkecil.
sumber
JavaScript (ES6),
745754 byteDisimpan 3 byte berkat ETHproduksi dengan yang brilian,
p=/./g
bukanp={}
(terinspirasi oleh Neil)Uji kasus
Tampilkan cuplikan kode
sumber
s
bukanp
?find
versi asli Anda dengan menggunakanlastIndexOf
, yang sedikit mengejutkan mengingat bahwa panjangnya 11 huruf ....)s=>s.replace(p=/./g,(c,i)=>(i=p[c]-(p[c]=i))>-10?~i:c)
untuk menghemat 3 byte.Haskell ,
7266 byteTerima kasih kepada Laikoni untuk bermain golf 6 byte!
Cobalah online!
Fungsi ini
%
membuat string yang diproses sebagian terbalik dalam argumen kedua, sehingga dapat mencari 10 elemen pertama dari string ini untuk mencari kejadian dari karakter yang diperiksa. Pengajuan terdiri dari fungsi(%"")
yang tidak disebutkan namanya yang memanggil fungsi sebelumnya dengan string kosong sebagai argumen kedua.sumber
f(a:s)=f s++(last$[a]:[show n|(n,b)<-zip[0..9]s,b==a])
menghemat dua byte.f(a:s)=f s++[last$a:[n|(n,b)<-zip['0'..'9']s,b==a]]
simpan lebih banyak lagi.reverse
menyimpan satu byte lebih lanjut: Cobalah online!Python 2 , 64 byte
Cobalah online!
sumber
~10
cant Anda hanya menggunakan-11
?Perl 5 , 36 byte
35 byte kode +
-p
bendera.Cobalah online!
Beberapa penjelasan:
Tujuannya adalah untuk mengganti karakter non-digit (
\D
tetapi itu sesuai dengan referensi-ulang\1
di regex saya) yang didahului oleh kurang dari 10 karakter (.{0,9}
) dan karakter yang sama ((\D)
...\1
) pada panjang.{0,9}
grup (length$2
). Danredo
sementara karakter diganti.sumber
.*
tidak diperlukan, karakter apa pun yang valid dalam kisaran sebelum digit yang diganti ok.Python 2,
8984 byteCobalah secara Online!
Iterasikan melalui string secara terbalik, dan buat string baru dengan angka yang benar dimasukkan.
sumber
Japt , 18 byte
Cobalah online!
Penjelasan
sumber
JavaScript,
10080 byteCobalah online!
sumber
05AB1E , 20 byte
Cobalah online!
Penjelasan
sumber
Python 3,
125118 byteCobalah online!
sumber
C (tcc) , 113 byte
Karena fungsi membuat salinan string input, ukuran input maksimum adalah 98 karakter (lebih dari cukup untuk memenuhi input uji terpanjang). Tentu saja, ini dapat diubah ke nilai lainnya.
Cobalah online!
Edit
-15 byte. Terima kasih Johan du Toit .
sumber
i,j;f(char*s){char n[99];strcpy(n,s);for(i=1;s[i];i++)for(j=i-1;j>-1&&i-j<11;j--)if(n[i]==n[j])s[i]=47+i-j,j=-1;}
Java 7,
102101 byteCobalah online!
-1 byte terima kasih kepada Kevin Cruijssen . Saya selalu menikmati alasan untuk menggunakan operator masuk.
sumber
--c>=0
? Anda dapat menggantinya denganc-->0
untuk menyimpan byte.MATL,
3130 byteCobalah di MATL Online!
Penjelasan
sumber
this is a test
menghasilkanthis 222a1te52
bukanthis 222a19e52
. Yang keduat
tidak dikonversi menjadi9
.PHP, 104 Bytes
solusi ke depan
Solusi mundur
Versi Online
PHP, 111 Bytes
PHP, 112 Bytes
Versi Online
sumber
REXX,
124125 bytesumber
s<9
bukans<10
ataus<=9
. Inputthis is a test
menghasilkanthis 222a1te52
bukanthis 222a19e52
. Yang keduat
tidak dikonversi menjadi9
. Cobalah onlineC (gcc) ,
117103 byteCobalah online!
103 byte tanpa impor string.h, berfungsi dengan peringatan. Jika ini melanggar aturan, saya akan menariknya
Kode Cantik:
Suntingan:
sumber
(i=strlen(s);s[--i];)
alih-alih(i=strlen(s)-1;s[i];i--)