Masalah:
Dua agen rahasia musuh telah menemukan metode komunikasi yang hebat (untuk Anda)!
Inilah cara kerja proses enkripsi:
1) Ambil ascii setara dari setiap huruf. (Tidak ada spasi, angka, atau tanda baca dikirim)
2) Untuk setiap huruf dalam pesan, ascii setara dengan dan sesudahnya (jika ada, jika tidak, harus dianggap 0), dikalikan (produk ini disimpan dalam array / daftar) dan dijumlahkan (nomor ini juga disimpan dalam daftar yang berbeda).
3) Dua daftar (jumlah dan produk) bergabung bersama (daftar jumlah, kemudian daftar kelipatan, ke dalam array yang sama) dan ditransmisikan.
Anda harus menulis program terkecil yang dapat membalikkan proses ini dan mendekripsi pesan yang dikirim dalam format ini!
Contoh Pasang Input dan Output:
[173, 209, 216, 219, 198, 198, 225, 222, 208, 100, 7272, 10908, 11664, 11988, 9657, 9657, 12654, 12312, 10800, 0] -> “HelloWorld”
[131, 133, 164, 195, 197, 99, 4290, 4422, 6499, 9506, 9702, 0] -> “ABCabc”
Ini adalah kode-golf , jadi solusi terkecil dalam byte menang.
Pesan kesalahan diizinkan.
Program Anda dapat diberikan daftar / array 1 dimensi atau string yang dipisah koma, jika Anda tentukan dalam kiriman Anda. Standarnya adalah array / daftar.
sumber
Jawaban:
Sekam ,
76 byteCobalah online! Menurut dokumentasi, pimpinan
m
tidak diperlukan, tetapi saat ini sepertinya ada bug.Sunting: -1 byte berkat Zgarb!
Penjelasan:
sumber
`-
bisa≠
. Perilakuc
memang terlihat seperti bug.brainfuck , 66 byte
Input adalah string terenkripsi. Diasumsikan sel berukuran tak terbatas dan 0 pada EOF.
Bagaimana itu bekerja:
sumber
Haskell ,
4535 byteCobalah online!
Penjelasan
fst.span(<245)
mengambil semua angka dari awal daftar yang lebih kecil dari 245. Itu hanya angka-angka dari bagian penjumlahan, karena penjumlahan terbesar yang mungkinz + z = 122 + 122 = 244
, dan produk terkecil yang mungkinA * A = 65 * 65 = 4225
.scanr1(-)
mengambil nilai terakhir dari daftar dan menggunakannya sebagai akumulator awal. Kemudian dari belakang ke depan setiap elemen daftar dikurangi oleh akumulator saat ini, dan hasilnya digunakan sebagai akumulator berikutnya dan dan ditambahkan ke daftar.map toEnum
mengganti setiap angka dalam daftar dengan karakter yang sesuai untuk membuat ulang string.sumber
Jelly , 9 byte
Cobalah online! atau Periksa kedua kasus uji.
Alternatif.
Penjelasan
sumber
Python 2 , 72 byte
Cobalah online!
sumber
Python 2 , 92 byte
Cobalah online!
sumber
Jelly , 11 byte
Tautan monadik yang mengambil daftar bilangan bulat dan mengembalikan daftar karakter.
Cobalah online!
Bagaimana?
sumber
Pyt , 60 byte
Mengambil daftar bilangan bulat dan mengembalikan serangkaian karakter.
Penjelasan:
Cobalah online!
sumber
JavaScript (ES6), 80 byte
Tampilkan cuplikan kode
sumber
VB Script -
7471 byte(Saya berhasil mengurangi dari 74 menjadi 71 dengan menggunakan While..Wend bukannya Do..Loop)
Input dalam array a (), output dalam string d
Penjelasan
Saya menguji ini dalam file vbscript dengan kode di atas dibungkus sebagai fungsi:
sumber
Bersih ,
96817877 bytezero
adalah karakter nol.Saya bisa menyimpan byte lain jika Clean tidak begitu pilih-pilih tentang nulls literal dalam file sumber.
Cobalah online!
sumber
f=
.f=
merupakan tugas terpendek, jadi pemanggilan minimal menambahkan dua.Perl 5 , 39 + 2 (
-ap
) = 41 byteCobalah online!
sumber
C (gcc) ,
9089 bytes+=(i%2?-1:1)*...
<~>s-=~(i%2*-2)
.Cobalah online!
sumber
ML Standar (MLton) ,
858482 byteCobalah online!
Tidak Disatukan:
Cobalah online!
sumber
Perl 6 ,
43 3935 byteMenguji
Mengujinya (melakukan hal yang sama seperti di atas)
Menguji
Menguji
Penjelasan:
sumber
05AB1E , 9 byte
Cobalah online!
Penjelasan
sumber
J
oin.ç
tidak secara implisit mengubah daftar karakter menjadi string. Jika saya memahami masalahnya dengan benar, program harus mengeluarkan string dan bukan daftar karakter.Japt, 12 byte
Harus ada cara yang lebih singkat untuk mendapatkan bagian pertama dari array ...
Cobalah
sumber
Python 2 , 70 byte
Cobalah online!
sumber