Terapkan kunci sandi ini
Tujuan
Gunakan algoritma (dijelaskan di bagian Algoritma) untuk mengimplementasikan cipher tertentu.
Program harus membaca input dari STDIN atau yang setara terdekat yang tersedia, gunakan algoritma untuk menghasilkan ciphertext dan kunci.
Ciphertext dan kunci akan ditulis ke STDOUT atau setara terdekat yang tersedia. Format apa pun diperbolehkan, selama itu output ciphertext dan kunci.
Algoritma
Konversi karakter dalam string menjadi nilai ASCII masing-masing. Sebagai contoh:
Hello -> 72 101 108 108 111
Selanjutnya, Anda harus membuat kunci selama string dengan angka acak di kisaran 0-9.
Hello -> 62841
Tambahkan bilangan bulat dalam urutan angka acak ke nilai ASCII dari string. Dalam contoh di atas, 72 akan menjadi 78, dan 101 akan menjadi 104.
72 + 6 = 78, 101 + 2 = 103, 108 + 8 = 116, etc
Selanjutnya, ubah nilai-nilai baru kembali ke karakter. Dalam contoh di atas, teks Hello
menjadi Ngtpp
.
Contohnya
(Ini hanya contoh dari apa output mungkin terlihat seperti. Output dapat dan akan bervariasi.)
Hello World
Lfrlu)_supg
41606984343
This will be encoded
Zhjs$~koo gj$iuhofgj
60104723305544750226
Aturan
- Anda dapat mengasumsikan bahwa input hanya akan berisi karakter dalam rentang az, AZ, dan spasi.
- Pengajuan harus berupa program atau fungsi lengkap.
- Pengajuan akan dicetak dalam byte.
- Celah standar dilarang.
- Ini kode-golf, jadi kode terpendek menang.
(Ini adalah salah satu tantangan pertama saya, jika ada yang salah dengan itu, jangan ragu untuk memberi tahu saya bagaimana saya bisa memperbaikinya.)
sumber
preferably with the format (ciphertext)\n(key).
"fitur yang disukai" dan golf kode tidak bercampur dengan baik. Anda harus membuat itu wajib atau mengizinkan format output lainnya. 3. Apakah kunci harus dicetak tanpa spasi? Bagaimana dengan mencetaknya dalam format daftar, misalnya[0, 5, 2, ...]
?Jawaban:
Jelly ,
129 byteCobalah online!
Bagaimana itu bekerja
sumber
Python 3, 130 byte
Terima kasih kepada @Rod untuk menunjukkan bug
Fungsi yang mengambil input melalui argumen sebagai string dan mencetak ke STDOUT.
Bagaimana itu bekerja
Cobalah di Ideone
sumber
m=10**len(x);k=str(randint(m,m*10))[1:];
dan Anda bahkan menyimpan byte dalam proses c:randint
inklusif, artinya Anda perlu melakukannyam*10-1
. Saya baru saja memikirkan cara untuk memperbaikinya untuk jumlah byte yang sama.Pyth - 16 byte
Menunggu keputusan OP tentang format output.
Test Suite .
sumber
Sebenarnya, 17 byte
Cobalah online!
Penjelasan:
sumber
CJam - 14 byte
Ketika saya melihat kode ascii matematika, saya tahu saya harus menulis jawaban CJam.
Cobalah online di sini .
sumber
MATL, 13 byte
Outputnya terlihat seperti ini:
Cobalah online!
Penjelasan:
sumber
r
atauYr
PowerShell v2 +,
7977 byteMengambil input
$n
, memutar setiap karakter dan mendapatkanRandom
elemen dari0..9
setiap iterasi. Menyimpan angka-angka itu (sebagai array) ke dalam$x
. Pipa array itu ke loop lain. Setiap iterasi, mengambil elemen saat ini$_
, menambahkannya ke char posisi yang diiris dari$n
(cast char-to-int implisit), kemudian cast kembali sebagai[char]
. Meninggalkan itu di saluran pipa. Itu diringkas dalam parens dan diedit-join
bersama untuk membentuk kata. Tersisa di saluran pipa. Selain itu, nomor$x
tersebut juga-join
diedit bersama dan dibiarkan di dalam pipa. Mereka dicetak secara implisit dengan aWrite-Output
pada akhir eksekusi, yang mengakibatkan mereka dicetak dengan baris baru secara default.Contoh
sumber
C #,
252247245232216 BytesUkurannya sangat buruk dibandingkan dengan solusi lain tetapi ...
Ini adalah jawaban kedua saya untuk codegolf dan saya cukup pemula mempertimbangkan C # jadi saya akan senang mendengar bagaimana membuatnya lebih pendek :)
Tidak Disatukan:
static
dari p kelassumber
b++<i.Count()
dan membiarkan klausa ketiga kosong? Juga, saya rasa Anda tidak perlu mengekor baris baru, jadi panggilan terakhir untukWriteLine
menjadiWrite
sebaliknya.var
. yaitu-var c=
bukannyastring c=
mencukur beberapa byte.Console.ReadLine()
sebagai string?i.Length
lebih pendek darii.Count()
, Anda tidak perlu System.Linq. string memiliki pengindeks char. Juga menciptakan Acak baru objek dalam lingkaran kurang byte:new Random().Next(10)
.CJam, 11 byte
Cobalah online!
Bagaimana itu bekerja
sumber
05AB1E ,
1817 bytePenjelasan
Cobalah online
sumber
Python 3, 112 byte
c adalah fungsi yang mengembalikan teks dan kunci terenkripsi
Berikut adalah kode yang melakukan hal yang sama dan sedikit lebih mudah dibaca
Keluaran:
sumber
PHP,
638682 byteEdit: lupa mencetak kunci ...
Terima kasih kepada Alex Howansky karena telah menyelamatkan saya 4 byte.
Input diberikan melalui argumen baris perintah. Mengambil setiap karakter dalam string dan menambahkan int acak dari 0-9 ke kode ASCII-nya, lalu mengonversi kode kembali ke ASCII. Setiap nomor acak ditambahkan
$s
, yang dicetak di bagian akhir.sumber
$s.=$r
setelah semi ke-2 di dalam for loop, menyimpan byte karena Anda dapat membuang semi trailing-nya. Maka loop Anda hanya akan menjadi satu pernyataan sehingga Anda dapat memotong kawat pembungkus, menghemat 2 byte lebih. Kemudian pada akhirnya, Anda bisa meletakkan bagian$s
dalam string yang dikutip menyimpan.
operator untuk satu byte lagi. :)J, 32 byte
setara python:
sumber
Perl, 34 byte
Termasuk +1 untuk
-p
sumber
Perl, 65 byte
Butuh beberapa saat untuk mencari cara mendapatkan input tanpa baris baru di akhir. Mengambilnya sebagai baris perintah arg
sumber
$;
jangan mulai kosong sehingga ia mencetak konten lama dan rand tidak pernah dapat menghasilkan 9. Mereka mudah diperbaiki dan menggunakan STDIN akan membuat kode Anda lebih pendek :-)<>=~/./g
. Dan tidak,int
dalam perl memotong menuju 0, itu tidak bulat.perl -wle 'print int 8.6'
keluaran8
Python 2,
8499 byteMenggunakan
id()
nilai string untuk menghasilkan angka acak.Cobalah
sumber
map(chr,[ord(a)+int(b)for a,b in zip(x,y)])
menjadimap(lambda x,y:chr(ord(x)+int(y)),x,y)
? yang seharusnya menyimpan sesuatuSenva , 74 byte
Ini adalah program terpendek yang saya buat:
Sedikit penjelasan? (Catatan: BM berarti Memori Kembali ):
Itu tampak lebih besar sekarang, benar: p? Mungkin dimungkinkan untuk mengoptimalkan kode ini, tetapi untuk saat itu terpendek yang saya temukan.
sumber
C #, 174 byte
Tidak Disatukan:
Sangat mudah, sungguh.
sumber
Perl 6: 55 atau 70 byte
Sebagai fungsi anonim yang mengambil parameter string, dan mengembalikan daftar dua string (54 karakter, 55 byte) :
Sebagai program yang membaca dari STDIN dan menulis ke STDOUT (69 karakter, 70 byte) :
sumber