Dalam kriptografi, padding PKCS # 7 adalah skema padding yang menambahkan sejumlah byte N ≥ 1, di mana nilai setiap byte yang ditambahkan sama dengan N.
Misalnya,, Hello, World!
yang memiliki 13 byte, adalah yang berikut dalam hex:
48 65 6C 6C 6F 2C 20 57 6F 72 6C 64 21
Jika kita memilih pad PKCS # 7 dengan panjang 16, maka hasilnya adalah:
48 65 6C 6C 6F 2C 20 57 6F 72 6C 64 21 03 03 03
Dan jika kita memilih untuk mengisi panjang 20, maka hasilnya adalah:
48 65 6C 6C 6F 2C 20 57 6F 72 6C 64 21 07 07 07 07 07 07 07
Perhatikan bahwa pada contoh pertama kita menambahkan tiga 03
byte, dan yang kedua kita tambahkan tujuh 07
byte.
Tugas Anda adalah memvalidasi apakah string (atau array integer) memiliki padding PKCS # 7 yang benar. Artinya, jika byte terakhir dari string input adalah N, maka program Anda harus memeriksa bahwa N byte terakhir dari string sama dengan N.
Memasukkan
String ASCII nonempty tunggal yang mengandung karakter antara titik kode 1 dan 127 inklusif. Jika mau, Anda dapat mengambil input sebagai array bilangan bulat.
Keluaran
Sebuah truthy nilai jika input string memiliki PKCS valid # 7 padding, jika nilai falsy.
Fungsi dan program lengkap dapat diterima. Ini adalah kode-golf , jadi tujuannya adalah untuk meminimalkan jumlah byte dalam kode Anda.
Uji kasus
Versi input integer array disajikan di sini - versi string akan memiliki karakter yang tidak dapat dicetak untuk banyak kasus uji berikut:
Benar:
[1]
[1, 1]
[2, 1]
[2, 2]
[5, 6, 5, 3, 3, 3]
[1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 2, 2]
[95, 115, 80, 32, 71, 7, 122, 49, 13, 7, 7, 7, 7, 7, 7, 7, 7]
[27, 33, 54, 65, 97, 33, 52, 55, 60, 1, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10]
[15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15]
Falsy:
[2]
[1, 2]
[5, 5, 5, 5]
[5, 6, 5, 4, 4, 4]
[3, 3, 3, 94, 3, 3]
[1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2]
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 127]
[50, 39, 94, 105, 49, 29, 74, 102, 2, 106, 44, 7, 7, 7, 7, 7, 7]
[26, 27, 59, 25, 122, 110, 20, 30, 114, 6, 9, 62, 121, 42, 22, 60, 33, 12]
[1 2 3 3 3 3]
atau salah? Saya pikir itu harus benar tetapi saya tidak positif.7
s). Anda dapat menganggapnya sebagai, setelah stripping, Anda akan berakhir dengan[1 2 3]
.Jawaban:
Python,
473433 bytes[-1]
adalah anggota terakhir dari daftars
. Memeriksa bahwas[-1]
anggota terakhir dari array inputs
sama dengan arrays[-1]
berulang yang berkali-kali.Mengambil input sebagai array bilangan bulat. Ini adalah ungkapan lambda; untuk menggunakannya, tetapkan dengan awalan
lambda
denganf=
.Cobalah di Ideone!
Untuk menguji:
Disimpan 13 byte berkat Leaky Nun!
Menyimpan satu byte berkat Dennis!
sumber
def f(s)=
byte lebih pendek.return
. Thelambda
versi 7 byte lebih pendek.lambda s:[s[-1]]*s[-1]=s[-s[-1]:]
Brachylog , 14 byte
Cobalah online!
sumber
Pyth, 5 byte
RLE pada input, ambil pasangan terakhir dan periksa apakah jumlah pengulangan lebih besar atau sama dari nilainya.
Cobalah online: Demonstrasi atau Test Suite
sumber
Jelly , 5 byte
Input adalah array dari titik kode, output adalah array yang tidak kosong (kebenaran) atau array kosong (palsu).
Cobalah online! atau verifikasi semua kasus uji .
Bagaimana itu bekerja
sumber
CJam,
98 byteTerima kasih kepada Sp3000 untuk menghemat 1 byte.
Mengambil daftar bilangan bulat sebagai input dan pengembalian
0
(falsy) atau bilangan bulat positif (kebenaran).Suite uji.
Penjelasan
sumber
05AB1E , 9 byte
Tidak ada penyandian run-length untuk osabie :(
Penjelasan:
Dengan sebuah contoh:
Menggunakan pengkodean CP-1252 . Cobalah online!
sumber
MATL , 10 byte
Terima kasih kepada @Adnan karena melihat masalah dengan versi kode yang lebih lama
Ketika input memiliki bantalan yang benar, output adalah array yang berisi hanya orang-orang, yang truthy . Ketika memiliki padding yang salah, output adalah array yang mengandung setidaknya nol, dan juga palsu .
Cobalah online! Atau verifikasi semua kasus uji .
Penjelasan
sumber
Mathematica, 29 byte
Pisahkan input ke dalam run dari elemen yang sama, ekstrak yang terakhir, dan periksa bahwa elemen pertama kurang dari atau sama dengan panjang run itu.
sumber
Haskell, 50 byte
Mengambil array bilangan bulat sebagai input.
sumber
J, 13 byte
Membawa daftar sebagai argumen tunggal dan menghasilkan
1
jika itu benar dan0
jika palsu.Pemakaian
Penjelasan
sumber
3 4 3 3 3
akan~.
sebagai3 4
sehingga baris terakhir=
adalah0 1 0 0 0
. Saya pikir beroperasi pada kebalikannya seperti yang{:*/@{.0{=@|.
seharusnya bekerja, tetapi berakhir sebagai 13 byte juga.Brain-Flak , 54 byte
Input adalah daftar bilangan bulat, output adalah 1 untuk truey dan kosong untuk falsey.
Penjelasan
Loop tidak segera berakhir ketika nilai yang akan menghasilkan pengembalian falsey ditemui. Alih-alih beralih ke tumpukan lain yang kosong dan menghabiskan sisa iterasi membandingkan 0 dan 0.
sumber
Batch, 101 byte
Mengambil input sebagai parameter baris perintah, lilitkan semuanya sehingga bisa masuk yang terakhir
n
, lilitkan semua untuk menghitung run dari trailingn
, akhirnya mencetak1
jika jumlah paling tidak sama dengann
. Atau jika pencetakan0
atau nilai bukan nol dapat diterima, maka untuk 93 byte, ubah baris terakhir menjadi@cmd/cset/ac/n
.sumber
Haskell, 49 byte
Cobalah di Ideone.
Versi lebih pendek yang mengembalikan
True
kebenaran danFalse
atau pengecualian untuk kepalsuan:sumber
Dyalog APL , 10 byte
⊃
Adalah yang pertama∧.=
semua-sama dengan⊃
pertama↑
n diambil dari⊢
para⌽
argumen terbalik?TryAPL online!
sumber
Javascript (ES6),
514741 byteContoh:
sumber
C 91 Bytes
Input: pointer ke array yang diakhiri null.
Output: pengembalian
0
untuk padding tidak valid dan non-nol untuk valid (elemen terakhir dalam array)Contoh:
Memberi:
Ini bergantung pada perilaku yang tidak terdefinisi. Jika padding valid tidak ada pernyataan kembali, tetapi menggunakan
gcc -std=c99
ini mengembalikan elemen terakhir dari array yang dilewatkan (setidaknya pada mesin saya).sumber
Perl 5 , 30 byte
Termasuk
+1
untuk-p
Cobalah online!
sumber
Brachylog , 6 byte
Cobalah online!
Keluaran melalui keberhasilan atau kegagalan predikat, seperti yang dilakukan oleh Brachylog v1 Leaky Nun. Mengambil pendekatan yang sama, juga, tetapi keluar jauh lebih pendek.
Brachylog , 6 byte
Cobalah online!
Versi alternatif yang keluar dengan panjang yang sama yang mengambil beberapa inspirasi dari jawaban Dennis 'Jelly.
sumber
Retina , 34 byte
Hitungan byte mengasumsikan penyandian ISO 8859-1.
Input adalah daftar bilangan bulat yang dipisahkan baris-umpan. Cetakan
0
atau1
.Cobalah online! (Baris pertama memungkinkan suite uji, di mana ada satu test case yang dipisahkan ruang per baris.)
Gagasan alternatif yang berakhir pada 35 byte dan cetakan
0
atau bilangan bulat positif:sumber
Pyke, 7 byte
Coba di sini!
sumber
Javascript (ES5), 89 byte
Tidak Disatukan:
sumber
Brain-Flak 84 byte
100000000 mengalahkan saya di sini
Cobalah secara Online!
Mengambil input sebagai array bilangan bulat.
Penjelasan yang akan datang.
Berikut adalah versi 64 byte yang menghasilkan yang bukan dari jawabannya:
sumber