Perbaiki Meeesesessessessesseessessed upp teeexexextext

38

Ini terinspirasi oleh Monday Mini-Golf # 6: Meeesesessess upp teeexexextext

Latar Belakang

Produk ETH mengalami kesulitan memasukkan teks pada halaman webnya yang biasa. Setiap kali dia menggunakan angka atau huruf, teksnya akan menjadi milikku yang diakuinya. Tugas Anda adalah membantunya mengetik sehingga perilaku normal tercapai.

Transformasi

Transformasi memengaruhi jalannya [0-9A-Za-z]karakter alfanumerik ( ) yang dibatasi oleh karakter bukan alfanumerik mana pun. Pada contoh berikut, baris pertama akan ditransformasikan menjadi baris kedua (baris lain menunjukkan rincian transformasi)

An12num:
Annn1n12n12nn12nn12nun12nun12numn12num
A
 nn
   n1
     n12
        n12nn12n
                n12nun12nu
                          n12numn12num

Secara khusus, setiap karakter alfanumerik setelah yang pertama dalam proses akan diubah menjadi keseluruhan proses sejauh ini kecuali untuk karakter pertama . Selanjutnya, jika karakternya adalah huruf (bukan digit), karakter tersebut akan berubah menjadi dua kali proses.

Untungnya, backspace akan menghapus karakter terakhir dan juga me-reset awal proses.

Tugas

Kali ini tugas Anda bukan untuk melakukan transformasi. Sebagai gantinya, diberikan string input, Anda harus mengembalikan teks yang disandikan, jika diubah, akan menghasilkan input. Outputnya harus sesingkat mungkin, di mana \<char>dihitung sebagai karakter tunggal.

Teks dikodekan sebagai berikut:

\                   -> \\
backspace character -> \b
linefeed            -> \n

Anda dapat menulis suatu program atau fungsi, mengambil input melalui STDIN (atau alternatif terdekat), argumen baris perintah atau argumen fungsi dan mengeluarkan hasilnya melalui STDOUT (atau alternatif terdekat), nilai pengembalian fungsi atau parameter fungsi (keluar).

Uji kasus

Setiap test case adalah dua baris, yang pertama adalah input, output kedua.

Heeeeeelp me. It shouldn't be messed up.
Hee \blp\b me\b. It\b sh\bou\bld\bn't be\b me\bss\bed\b up\b.

alert("Hello, world!");
al\ber\bt("He\bll\bo, wo\brl\bd!");

1223234234523456
123456
Akangka
sumber
6
Ini didefinisikan dengan baik, tetapi mengapa tidak ada jawaban?
Akangka
1
Entah bagaimana saya melewatkan ini; spin-off yang bagus! Mungkin saya akan mencoba menulis jawaban nanti.
ETHproduk
Ini mengingatkan saya pada waktu seorang teman saya mengirim SMS melalui UDP
TRGWII
1
Saya pikir ujian akhir Anda perlu diperbaiki. Anda memasukkan karakter pertama ( 1setiap kali) dalam menjalankan.
Leif Willerts
Sejujurnya saya tidak mengerti apa yang seharusnya saya lakukan ... Maaf. Bisakah Anda menambahkan beberapa input dan output dan menambahkan beberapa contoh dengan penjelasannya? Maaf.
Yassin Hajaj

Jawaban:

10

CJam, 207

{_,1>{:E1<_0{:I2$,+E=:C+:R1>C'9>)*+:P,E,<{EP#{L0}{PRI)1}?}{PE#L{R8cP,E,-*+}?0}?}g}&}:U;LqS+'a+{_'[,_el^A,s+&,V={+}{s\V!:V{L{:BU_aL?B,,1>Bf{_2$<U_{_W=8>S8c+*+\@>j+}{?;}?}+{,}$0=}j}|\}?}%s'\8cN++'\"\bn"f+er-2<

Cobalah online

Penjelasan:

Hampir lupa menulis ini: hlm

Masalahnya dipecahkan dalam beberapa langkah:

  • teks dipisahkan menjadi karakter alfanumerik (sebut saja kata-kata) dan karakter non-alfanumerik (non-kata)
  • non-kata dicetak apa adanya, dan kata-kata tetap
  • memperbaiki kata dilakukan secara rekursif (dengan memoisasi): pisahkan kata menjadi 2 potongan dengan segala cara yang mungkin (termasuk potongan kedua kosong), coba unmess potongan pertama (lihat di bawah), perbaiki potongan 2 dan gabungkan hasil dengan spasi -Ruang belakang jika diperlukan; ambil sub-solusi terpendek
  • unmessing a chunk berarti menemukan serangkaian karakter alfanumerik minimal yang mungkin diikuti oleh beberapa backspaces (tetapi tanpa backspace di tengah) yang ketika kacau, menghasilkan potongan yang diberikan; itu dilakukan dengan algoritma serakah yang sederhana, bergerak dari kiri ke kanan, membangun string yang tidak di-akses dan versi berantakannya secara paralel, dan menentukan karakter yang diperlukan berikutnya pada setiap langkah; sebagian bongkahan tidak bisa dilepas
aditsu
sumber
1
Astaga ... itu salah satu program CJam! Kerja bagus.
ETHproduksi