Steganografi menyembunyikan pesan yang diberikan di dalam pembawa yang diberikan, menghasilkan paket yang tidak terlihat mencurigakan. Untuk tantangan ini, Anda akan menulis sebuah program yang mengambil pesan ASCII dan operator ASCII sebagai input, dan mengembalikan atau mencetak paket yang identik dengan operator kecuali karakter yang terkait dengan pesan tersebut digandakan, dalam urutan yang sama ketika muncul di pesan.
Aturan:
- Jika operator sudah berisi urutan karakter yang sama lebih dari sekali, dan mereka tidak digunakan untuk menyandikan karakter pesan, program akan menguranginya menjadi satu karakter.
- Jika operator tidak berisi karakter pesan dalam urutan yang benar, program mungkin tidak menghasilkan apa-apa, operator itu sendiri, atau kesalahan.
- Anda dapat mengasumsikan bahwa pesan dan operator adalah string ASCII yang tidak kosong.
- Masalah huruf besar: A tidak setara dengan a.
- Ketika lebih dari satu paket valid, program Anda dapat menampilkan salah satu atau semuanya.
- Ruang adalah karakter seperti karakter lainnya.
Kasus uji:
Paket Pengangkut Pesan "Hai," "sudah sampai?" "Apakah dia baru saja berubah?" ATAU "Apakah ini terjadi?" "Tuan," "sudah sampai?" "Apa aku sudah sampai?" "foo" "sudah tiba?" "" ATAU "sudah tiba?" ATAU kesalahan. "Mobil" "Kucing itu keren." "CCaats arre col." "mobil" "Kucing itu keren." "" ATAU "Kucing itu keren." ATAU kesalahan. "Sofa" "Sofa" "CCoouucchh" "oo" "oooooooooo" "oooo" "o o" "oooo oooa" "oo ooa"
Ini adalah kode golf, byte paling sedikit menang.
code-golf
string
steganography
jkpate
sumber
sumber
"oooo oa"
(dengan 2 spasi) output yang valid untuk test case terakhir?Jawaban:
Jelly , 28 byte
Program penuh mengambil
carrier
danmessage
sebagai argumen baris perintah yang mencetak hasilnya(Untuk paket yang tidak dapat
message
dicetak, tidak berubahcarrier
).Cobalah online! Atau lihat test-suite .
Bagaimana?
sumber
JavaScript (ES6), 71 byte
Mengambil input sebagai
(message)(carrier)
.Cobalah online!
Versi alternatif, 66 byte
Jika kita dapat menerima pesan sebagai array karakter:
Cobalah online!
Sunting : Terima kasih kepada @tsh karena memperhatikan bahwa saya lupa menghapus beberapa kode ketika beralih dari versi non-rekursif ke rekursif.
sumber
p=
karena p dilewatkan oleh parameter.Haskell,
124121107101979590 byteMeningkatkan pengecualian "Pola non-lengkap" jika operator tidak mengandung pesan.
Cobalah online!
Sunting: -5 byte terima kasih kepada @Laikoni.
sumber
m==c
: Coba online!Retina 0.8.2 , 67 byte
Cobalah online! Membawa operator di baris pertama dan pesan di baris kedua. Penjelasan:
Proses berjalan dari 1 atau lebih karakter identik dari operator. Jika ada juga menjalankan 1 atau lebih dari karakter yang sama dalam pesan, kemudian menambahkan lebih pendek dari dua berjalan ke output dalam rangkap dua, jika tidak menambahkan satu karakter pembawa ke output. Setiap rangkaian karakter keluaran diakhiri dengan baris baru untuk membedakannya dari input. Pada
(?!¶)
akhirnya mencegah regex dari berpikir pembawa adalah pesan setelah pesan habis, karena biasanya$
diperbolehkan untuk mencocokkan mana yang¶$
akan cocok.Hapus semua jika pesan tidak sepenuhnya dikodekan.
Hapus baris baru dari output.
sumber
Bersih , 118 byte
Cobalah online!
Mengambil operator terlebih dahulu, lalu pesan.
Kesalahan dengan
Run time error, rule '$;2' in module 'main' does not match
jika pesan tidak sesuai.sumber
Ruby , 73 byte
Cobalah online!
Fungsi rekursif, mengambil input sebagai array karakter.
Untuk kali ini saya berharap untuk menggunakan
squeeze
metode built-in Ruby yang mengontrak run berturut-turut dari karakter yang sama menjadi satu instance. Tapi sayangnya, tidak - dua test case yang terakhir mengacaukan segalanya, sehingga saya harus menggunakan pendekatan yang sama sekali berbeda, dan ini ternyata pada dasarnya merupakan pelabuhan jawaban Arnauld .sumber
Powershell, 134 byte
Script mengembalikan
empty string
jika pembawa tidak berisi karakter pesan dalam urutan yang benar.Skrip uji yang kurang golf:
Keluaran:
sumber
C (gcc) , 69 + 12 = 81 byte
Kompilasi dengan (12 byte)
Cobalah online!
sumber