Na criptografia, o preenchimento PKCS # 7 é um esquema de preenchimento que adiciona um número de bytes N ≥ 1, em que o valor de cada byte adicionado é igual a N.
Por exemplo, Hello, World!
com 13 bytes, é o seguinte em hexadecimal:
48 65 6C 6C 6F 2C 20 57 6F 72 6C 64 21
Se optarmos pelo PKCS # 7 no comprimento 16, o resultado será:
48 65 6C 6C 6F 2C 20 57 6F 72 6C 64 21 03 03 03
E se optarmos pelo comprimento 20, o resultado será:
48 65 6C 6C 6F 2C 20 57 6F 72 6C 64 21 07 07 07 07 07 07 07
Observe que no primeiro exemplo adicionamos três 03
bytes e no segundo adicionamos sete 07
bytes.
Sua tarefa será validar se uma sequência de caracteres (ou matriz inteira) possui o preenchimento PKCS # 7 correto. Ou seja, se o último byte da string de entrada for N, seu programa deverá verificar se os últimos N bytes da string são iguais a N.
Entrada
Uma única sequência ASCII não vazia contendo caracteres entre os pontos de código 1 e 127, inclusive. Se desejar, você pode usar a entrada como uma matriz de números inteiros.
Saída
Um valor verdadeiro se a sequência de entrada tiver preenchimento PKCS # 7 válido, caso contrário, um valor falso.
Ambas as funções e programas completos são aceitáveis. Isso é código-golfe , então o objetivo é minimizar o número de bytes no seu código.
Casos de teste
A versão do array inteiro das entradas é apresentada aqui - a versão da string teria caracteres não imprimíveis para muitos dos seguintes casos de teste:
Verdade:
[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). Você pode pensar nisso como, depois de retirar, você acabaria com [1 2 3]
.
[1 2 3 3 3 3]
verdade ou falsey? Eu acho que deveria ser verdade, mas não sou positivo.