В криптографии заполнение PKCS # 7 является схемой заполнения, которая добавляет количество байтов 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]
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]
7
s). Вы можете думать об этом, как после раздевания, вы в конечном итоге [1 2 3]
.
[1 2 3 3 3 3]
правда или ложь? Я думаю, что это должно быть правдой, но я не уверен.