У криптографії PKCS # 7 padding - це схема прокладки, яка додає кількість байтів N ≥ 1, де значення кожного доданого байта дорівнює N.
Наприклад, Hello, World!
що має 13 байт, у шістнадцятковій кількості є наступне:
48 65 6C 6C 6F 2C 20 57 6F 72 6C 64 21
Якщо ми вирішимо зробити PKCS # 7 накладку довжиною 16, то результат такий:
48 65 6C 6C 6F 2C 20 57 6F 72 6C 64 21 03 03 03
І якщо ми вирішимо прокладку довжиною 20, то результат такий:
48 65 6C 6C 6F 2C 20 57 6F 72 6C 64 21 07 07 07 07 07 07 07
Зауважимо, що в першому прикладі ми додаємо три 03
байти, а у другому - сім 07
байтів.
Вашим завданням буде перевірити, чи має рядок (або цілочисельний масив) правильний PKCS # 7. Тобто, якщо останній байт вхідного рядка дорівнює N, то ваша програма повинна перевірити, чи останні N байти рядка дорівнюють N.
Вхідні дані
Один непорожній рядок ASCII, що містить символи між кодовими точками 1 та 127 включно. За бажанням ви можете замість цього взяти введення як масив цілих чисел.
Вихідні дані
Truthy значення , якщо вхідний рядок має дійсний PKCS # 7 оббивки, в іншому випадку falsy значення.
Прийнятні як функції, так і повні програми. Це код-гольф , тому метою є мінімізація кількості байтів у вашому коді.
Тестові справи
Тут представлена ціла версія масиву вхідних даних - версія рядка мала б недруковані символи для багатьох наступних тестових випадків:
Truthy:
[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]
Фальсі:
[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]
7
s). Ви можете подумати про це, як після зняття, ви закінчилися [1 2 3]
.
[1 2 3 3 3 3]
truthy чи falsey? Я думаю, що це повинно бути правдою, але я не позитивний.