Tulis program yang menyandikan teks yang diberikan ke teksnya sendiri, disediakan sebagai input, tanpa mengganggu logikanya. Program juga harus berfungsi sebagai dekoder, memulihkan pesan asli dari teksnya. Itu harus mempertahankan fungsi encoding / decoding setelah transformasi.
Secara lebih formal, program yang diperlukan P harus melakukan transformasi berikut dengan teks pesan yang diberikan M:
P (M, P) -> P *
P * (P *) -> M
Di sini P * adalah program yang diubah, yang juga harus memenuhi aturan di atas, yaitu:
P * (M2, P *) -> P **
P ** (P **) -> M2
dan seterusnya ... Setiap penyandian selanjutnya tidak menghapus teks yang disandikan sebelumnya, jadi P ** membawa dua pesan - M dan M2.
Cara termudah untuk membedakan program antara mode encoding / decoding adalah dengan adanya argumen tambahan M, tetapi keputusan akhir terserah Anda, asalkan dinyatakan dengan jelas. Program dapat membaca teksnya sendiri dari file. Jika bahasa yang dipilih tidak memiliki sarana untuk ini, teks sumber dapat diteruskan ke program dengan cara lain.
Ada solusi sepele, tentu saja, jadi ini bukan kontes popularitas. Meskipun demikian, saya memaksakan pembatasan untuk melarang komentar dalam teks program.
sumber
Jawaban:
Perl
Ini adalah one-liner di Perl hanya karena itu mungkin.
Pesan-pesan ditulis setelah
__DATA__
, paling baru terlebih dahulu.sumber
Python
Kamu tahu apa? Mengapa tidak menjadikannya ekspresi tunggal?
Pesan lama; Fungsi P mengambil argumen seperti yang ditentukan dan mengeluarkan kode yang dihasilkan / teks yang diterjemahkan.
sumber
JavaScript
Tidak yakin apakah saya memahami pernyataan masalah dengan benar: decoder saya akan mendekode program apa pun dan mengembalikan pesan terbaru yang disandikan dalam program yang diberikan.
Kode uji:
sumber
Batch
Perhatikan harus ada carriage return setelah 'baris terakhir' dari
goto :EOF
.Ini mengambil dua input dari stdin. Yang pertama adalah apa yang ingin Anda lakukan;
e
, ataud
(encode dan decode). Input kedua tergantung pada yang pertama - jika input pertama adalahe
, maka input kedua akan menjadi pesan yang ingin Anda encode - jika yad
, maka input kedua adalah jumlah pesan yang ingin Anda dekode (yang akan disediakan setelah menyandikan pesan).sumber
Kobra
Meskipun idenya sepele, pelaksanaan ide tersebut kurang begitu.
Pengkodean
Pengkodean pesan dalam program akan menambahkan baris
.message = .message ? x
segera setelahnyadef main
. Baris ini memeriksa apakah.message
nil, dan jika demikian, maka ia menetapkan.message
ke array integer yang berisi nilai kode karakter dari setiap karakter dalam pesan; pemeriksaan nil dan penentuan posisi menghindari menimpa pesan baru dengan yang lebih lama. Program baru disimpan keencode.cobra
Decoding
Decoding program akan menambahkan tiga baris di akhir metode utama yang menyebabkan program untuk mengubah kode char
.message
ke string, yang kemudian disimpanmessage.txt
ketika program baru dijalankan. Program baru kemudian disimpan kedecode.cobra
dan kompiler dipanggil di atasnya.decode.cobra
digunakan seperti file sementara dan tidak dapat digunakan untuk menyandikan atau mendekode pesan lain, gunakan aslinya atauencode.cobra
sumber