Masalah:
Anda harus membuat program yang melakukan hal berikut:
- mengambil string besar huruf kecil, dan menghitung semua kemunculan setiap huruf.
- maka Anda menempatkan huruf-huruf secara berurutan dari yang paling besar hingga yang paling kecil.
- kemudian Anda mengambil daftar itu dan mengubahnya menjadi encoder / decoder untuk teks tersebut.
- kemudian mengkodekan teks dengan sandi itu.
Sulit dimengerti? Lihat contoh ini:
Contoh:
Masukkan teks:
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Tidak ada yang tersedia di situs ini untuk mendapatkan informasi lebih lanjut. Anda hanya perlu menambahkan beberapa faucibus, seperti portingitor. Pellentesque atau pharetra nisl. Vestibulum congue ultrices magna a fringilla. Portirator yang cepat, dan kontrol tristique yang berisiko, orci lorem accumsan nisi, scelerisque viverra turpis metus sit amet sapien. Bersama-sama dengan turpis, tidak ada lobortis dui blandit nec. Vestibulum dan semua komoditas komoditi tidak tersedia. Nulla cursus urna sem, at tincidunt sem molestie vel. Tidak ada foto yang tersedia untuk bibendum berwarna, lebih baik dari sekarang. Dengan asumsi, Anda dapat memilih. Phasellus lobortis mewarnai sodales sapien mollis hendrerit. Integer scelerisque tempor tellus, viverra varius neque mattis in. Integer porta vestibulum nisl, et feugiat tortor tincidunt vel. Aenean dignissim eleifend faucibus. Lebih dari itu, semua harus tersedia di ipsum.
Konversikan ke huruf kecil.
Hitungan Char (per huruf. Spasi dan tanda baca diabaikan):
[('a', 49), ('b', 11), ('c', 34), ('d', 22), ('e', 93), ('f', 9), ( 'g', 10), ('h', 3), ('i', 89), ('j', 1), ('k', 0), ('l', 61), ('m ', 31), (' n ', 56), (' o ', 37), (' p ', 20), (' q ', 12), (' r ', 47), (' s ', 71), ('t', 59), ('u', 65), ('v', 15), ('w', 0), ('x', 0), ('y', 0) , ('z', 0)]
Jumlah char yang dipesan:
[('e', 93), ('i', 89), ('s', 71), ('u', 65), ('l', 61), ('t', 59), ( 'n', 56), ('a', 49), ('r', 47), ('o', 37), ('c', 34), ('m', 31), ('d' ', 22), (' p ', 20), (' v ', 15), (' q ', 12), (' b ', 11), (' g ', 10), (' f ', 9), ('h', 3), ('j', 1), ('k', 0), ('w', 0), ('x', 0), ('y', 0) , ('z', 0)]
Kemudian buat tabel pencarian menggunakan daftar asli dan diurutkan:
abcdefghijklmnopqrstuvwxyz
||||||||||||||||||||||||||
eisultnarocmdpvqbgfhjkwxyz
Kamus Python:
{'o': 'v', 'n': 'p', 'm': 'd', 'l': 'm', 'k': 'c', 'j': 'o', 'i': 'r', 'h': 'a', 'g': 'n', 'f': 't', 'e': 'l', 'd': 'u', 'c': 's', 'b': 'i', 'a': 'e', 'z': 'z', 'y': 'y', 'x': 'x', 'w': 'w', 'v': 'k', 'u': 'j', 't': 'h', 's': 'f', 'r': 'g', 'q': 'b', 'p': 'q'}
Dan sekarang menyandikan teks asli dengan tabel pencarian ini:
'Lvgld rqfjd uvmvg dari edlh, svpflshlhjg eurqrfsrpn lmrh. Njps flu ujr eh prfr ljrfdvu qlmmlphlfbjl dari flu lprd. Menambah ejshvg ojfhv bjrf ured tejsrijf, lj tgrpnrmme lfh qvghhrhvg. Tolong tunjukkan. Vlfhrijmjd svpnjl jmhgrslf denpe e tgrpnrmme. Qjrfbjl qvghhrhvg, grfjf fjfsrqrh qlmmlphlfbjl hgrfhrbjl, vgsr mvgld essjdfep prfr, fslmlgrfbjl krklgge hjgqrf dlhjf frl edlh fe Fjfsl tesrmrfrf ured hjgqrf, pls mvivghrf ujr imepurh pls. Vlfhrijmjd es jgpe jh mesjf svddvuv fvmmrsrhjurp pls pvp klmrh. Njmme sjgfjf jgpe fld, eh hrpsrujph fld dvmlfhrl klm. Tlp tlpnrmme tlp lj uvmvg irilpujd, qvfjlgl resjmrf pjps mesrpre. Llu qglhrjd lfh, klm fslmlgrfbjl prfm Meflmmjf mvivghrf uvmvg fvuemlf feqrlp dvmmrf alpuglgrh. Iphlnlg fslmlgrfbjl hldqvg hlmmjf, krklgge kegrjf plbjl dehhrf rp. Iphlnlg qvghe klfhrijmjd prfm, lh tljnreh hvghvg hrpsrujph klm. Alplep urnprffrd lmlrtlpu tejsrijf. Mvgir, tolong, tolong, buka, lewati, lj, rjfjd. '
Saya suka python!
Aturan:
- Program Anda akan menerima string dan output.
- Ubah semua input menjadi huruf kecil sebelum melakukan apa pun
- Saya tidak peduli bagaimana Anda melakukan pengurutan daftar, tetapi hanya menghitung huruf kecil
- Poin bonus (-30) untuk membuat dekripsi (tidak menyalin daftar dekripsi, lakukan dari awal
- Ini adalah kode-golf, jadi kode terpendek menang!
- Selamat bersenang-senang!
Bonus points (-30) for making a decryptor (no copying the decryption list, do it from scratch
? ITU TIDAK MUNGKIN! Anda perlu memiliki kunci ("daftar dekripsi" alias "tabel pencarian") Anda untuk dapat melakukannya. Hanya dengan mengambil ciphertext dan mengharapkan siapa pun untuk memberikan decryptor yang mengubahnya kembali menjadi plaintext tanpa menggunakan kunci apa pun adalah seolah-olah Anda meminta kami untuk mengirim pertanyaan ke StackOverflow tanpa mengetik huruf atau angka. Teori informasi sudah memberi tahu kami bahwa Anda tidak dapat memperoleh informasi entah dari mana ... sehingga cipher substitusi Anda memerlukan tabel pencarian (alias kunci).Jawaban:
GolfScript, 39 karakter
Versi online untuk pengujian. Perhatikan bahwa pengurutan tidak ditentukan jika beberapa karakter memiliki jumlah yang sama dalam string input.
Contoh output
sumber
Bash / coreutils, 91 karakter
Simpan sebagai
cipher.sh
, chmod + x dan jalankan:sumber
Rubi,
1049291 karakterMenyimpan beberapa karakter berkat @Chron
Versi Online di sini. Penyortiran karakter dengan jumlah yang sama tidak didefinisikan, sebagaimana disebutkan dalam jawaban lain. Dengan input "asdf", setiap jawaban memiliki output lain sejauh ini.
Dengan kata lain: semua jawaban memiliki perilaku yang sama (dengan demikian mewakili pengodean yang dapat didekodekan) ketika input berisi seluruh alfabet dengan setiap huruf memiliki hitungan unik.
sumber
("a".."z").to_a
bisa[*?a..?z]
,m.join
bisam*''
dandef f(s)...end
bisaf=->s{...}
Mathematica 171
Dengan asumsi
t
adalah teks Lorem ipsum.Aturan penggantian yang dihasilkan oleh
Thread…-> l
adalah:sumber
K, 43
sumber
C # 386
Tidak terkompresi.
sumber
e93i89s71u65l61t59n56a49r47o37c34m31d22p20v15q12b11g10f9h3j1k0w0x0y0z0
. Dan itu tidak mendekati tantangan.PHP, 151
(dengan pengaturan
short_open_tag = On
)Ini mengharapkan teks sebagai argumen pertama untuk skrip. Seperti itu:
sumber
R, 137
Keluaran (berdasarkan contoh dalam pertanyaan):
sumber
Smalltalk, 138
masukan dalam s:
dekoder adalah:
tetapi karena (jika saya mengerti dengan benar) saya mungkin tidak menggunakan kembali "i" dan "m", saya akan bermain golf tanpa itu. Kode di atas memiliki dua CR tambahan yang dimasukkan untuk dibaca, yang tidak terhitung dalam hitungan char.
sumber
Clojure, 135
(Dengan asumsi teks input terkandung dalam var
s
)sumber
Python 2.7 (147)
Bukan kode terpendek sama sekali tetapi sebagai Python belum diwakili dan seperti yang saya lihat "Saya suka python!" dalam pengaturan masalah, ini dia,
Mengharapkan string input dilewatkan melalui baris perintah. (jumlah karakter dikurangi menjadi 122 jika string input secara ajaib dimasukkan ke dalam variabel "s")
Ouput
sumber
Perl, 84
.
PS Apakah itu lelucon, tentang menguraikan? Atau haruskah saya mengklaim 30 bonus karena membuktikannya tidak mungkin? Apakah
aab
diuraikan keaab
ataubba
? Ataubabaca
, apakah itucacaba
atauababcb
dalam bahasa aslinya, ataubabaca
sendiri, secara harfiah?sumber
C # - 393 byte
Versi diperpanjang dari jawaban @ PauloHDSousa ...
sumber