Pengantar:
Saya memiliki banyak cipher yang berbeda yang disimpan dalam dokumen yang pernah saya kompilasi sebagai seorang anak, saya memilih beberapa yang saya pikir paling cocok untuk tantangan (tidak terlalu sepele, dan tidak terlalu keras) dan mengubahnya menjadi tantangan. Sebagian besar dari mereka masih berada di kotak pasir, dan saya belum yakin apakah saya akan memposting semuanya, atau hanya beberapa. Ini yang kedua ( Computer Cipher adalah yang pertama kali saya posting).
Untuk Trifid Cipher (tanpa menggunakan kata kunci) alfabet (dan wildcard tambahan) dibagi menjadi tiga tabel 3 oleh 3:
table 1: table 2: table 3:
|1 2 3 |1 2 3 |1 2 3
-+----- -+----- -+-----
1|a b c 1|j k l 1|s t u
2|d e f 2|m n o 2|v w x
3|g h i 3|p q r 3|y z
Teks yang ingin kami enkripsikan adalah karakter pertama dengan karakter yang disandikan ke dalam nomor kolom-baris-tabel. Misalnya, teks this is a trifid cipher
menjadi:
t h i s i s a t r i f i d c i p h e r
table: 3 1 1 3 3 1 3 3 1 3 3 2 1 1 1 1 3 1 1 2 1 1 2
row: 1 3 3 1 3 3 1 3 1 3 1 3 3 2 3 2 3 1 3 3 3 2 3
column: 2 2 3 1 3 3 1 3 1 3 2 3 3 3 3 1 3 3 3 1 2 2 3
Kami kemudian meletakkan semuanya satu demi satu baris demi baris dalam tabel di atas dalam kelompok tiga:
311 331 331 332 111 131 121 121 331 331 313 133 232 313 332 322 313 313 132 333 313 331 223
Dan itu diubah kembali ke karakter menggunakan tabel yang sama:
s y y z a g d d y y u i q u z w u u h u y o
Satu hal yang perlu diperhatikan, panjang input harus coprime ke 3. Jadi jika panjangnya adalah kelipatan 3, kami menambahkan satu atau dua spasi tambahan untuk membuat panjang input tidak kelipatan 3 lagi.
Tantangan:
Diberikan string sentence_to_encipher
, enkripsinya seperti dijelaskan di atas.
Anda hanya perlu mengenkripsikan yang diberikan sentence_to_encipher
, jadi tidak perlu membuat program / fungsi penguraikan juga. Saya mungkin membuat tantangan bagian 2 untuk menguraikan di masa depan (meskipun saya merasa itu sepele / mirip dengan proses penyandian).
Aturan tantangan:
- Anda dapat mengasumsikan surat
sentence_to_encipher
wasiat tersebut hanya berisi huruf dan spasi. - Anda dapat menggunakan huruf besar atau huruf besar penuh (sebutkan mana yang Anda gunakan dalam jawaban Anda).
- Anda dapat memilih untuk menambahkan satu atau dua spasi tambahan saat panjang input 3 untuk membuatnya bukan kelipatan 3 lagi.
- I / O fleksibel. Baik input dan output dapat berupa string, daftar / array / aliran karakter, dll.
Aturan umum:
- Ini adalah kode-golf , jadi jawaban tersingkat dalam byte menang.
Jangan biarkan bahasa kode-golf mencegah Anda memposting jawaban dengan bahasa non-codegolf. Cobalah untuk memberikan jawaban sesingkat mungkin untuk bahasa pemrograman 'apa saja'. - Aturan standar berlaku untuk jawaban Anda dengan aturan I / O default , sehingga Anda diizinkan untuk menggunakan STDIN / STDOUT, fungsi / metode dengan parameter yang tepat dan tipe pengembalian, program penuh. Panggilanmu.
- Celah default tidak diperbolehkan.
- Jika memungkinkan, silakan tambahkan tautan dengan tes untuk kode Anda (yaitu TIO ).
- Juga, menambahkan penjelasan untuk jawaban Anda sangat dianjurkan.
Kasus uji:
Input: "this is a trifid cipher"
Output: "syyzagddyyuiquzwuuh uyo"
Input: "test"
Output: "utbk"
Input: "output"
Possible outputs: "rrvgivx" (one space) or "rrzcc lr" (two spaces)
Input: "trifidcipher"
Possible output: "vabbuxlzz utr" (one space) or "vabbyzv rx ie " (two spaces)
Jawaban:
Jelly ,
292625 byteCobalah online!
Bagaimana itu bekerja
sumber
;L3ḍƊ¡⁶µ⁶Øa;3ṗ¤,ðṚyZFs3⁸y
dapat menghapusµ
jika itu dapat diterima untuk 24.Arang , 39 byte
Cobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan:
sumber
Python 2 ,
180176174165163 byteCobalah online!
Input dapat berupa atas atau bawah. Output huruf besar
sumber
Pyth,
3433 byteProgram lengkap. Input diharapkan sebagai huruf kecil, output adalah array karakter. Cobalah online di sini , atau verifikasi semua uji sekaligus di sini .
Alternatif 34 byte solusi:
sm@+G;id3csCm.[03jx+G;d3+W!%lz3zd3
- daripada +27 dan ekor, gunakan.[03
untuk pad dengan 0 hingga panjang 3. Dapat 33 jika mengarahs
dijatuhkan.Sunting: menyimpan satu byte dengan menjatuhkan dulu
s
karena array karakter adalah output yang validsumber
Ruby ,
153145138131 byteCobalah online!
Pendekatan cepat dan naif, bekerja dengan teks huruf kecil. Input dan output array karakter.
sumber
Java (JDK) , 192 byte
Cobalah online!
Pendekatan yang sangat naif. Mengambil huruf kecil
char[]
sebagai input tetapi menghasilkan aString
.Penjelasan
Kredit
sumber
Integer.valueOf
keByte.valueOf
danR+=c<26?(char)(c+97):' ';
keR+=(char)(c<26?c+97:32);
R , 145 byte
Cobalah online!
I / O sebagai string; menambahkan satu spasi. Pengulangan aneh
[,3:1]
adalah karena pengindeksan array alami R agak berbeda.sumber
APL + WIN, 102 byte
Penjelasan:
Contoh tangkapan layar dari test case:
sumber
SAS, 305 byte
Sebuah 'oof' yang kuat untuk monster SAS ini. Ada banyak format string acak yang saya pikir saya bisa hindari membahas ini; Saya yakin ada cara yang lebih baik untuk melakukan ini.
Input dimasukkan pada baris baru setelah pernyataan kartu, seperti:
Keluaran dataset yang berisi output dalam variabel
f
, bersama dengan sekelompok variabel pembantu / nilai array.Tidak dikelompokkan / penjelasan:
sumber
JavaScript (Node.js) ,
146 141 139136 byteI / O dalam huruf kecil.
Cobalah online!
Berkomentar
sumber
(o=...,++i)%3
kerjanya di JS lagi? Apakah(o,i)
tuple atau sesuatu, dan kedua bilangan bulat dalam dikonversi ke modulo-3 mereka? Sebagai pengembang Java, masih sedikit membingungkan saya untuk melihatnya(a,b)%c
. Jawaban yang bagus! Saya suka bagaimana Anda mengonversi setiap digit ketiga, dan kemudian menghapus dua byte pertama nol. +1 dari saya.++i
.05AB1E , 25 byte
Karena belum ada yang mengirim jawaban 05AB1E, saya pikir saya akan memposting solusi saya sendiri. Saya melihat sekarang ini sangat mirip dengan @ Dennis ♦ Jelly jawaban , meskipun saya datang dengan itu secara mandiri sebelum saya memposting tantangan.
Input sebagai string, output sebagai daftar karakter. Menambahkan satu spasi jika panjangnya dapat dibagi 3.
Cobalah secara online atau verifikasi semua kasus uji .
Penjelasan:
sumber
Japt , 42 byte
Cobalah online!
Inti dari jawaban ini berasal dari jawaban yang dihapus oleh Shaggy, tetapi ia tidak pernah kembali untuk menangani input dengan panjang 3 yang dapat habis dibagi jadi ini adalah versi tetap .
Penjelasan:
sumber
C # (Visual C # Interactive Compiler) , 178 byte
Cobalah online!
Kurang golf ... Masih membingungkan :)
sumber