En criptografía, el relleno PKCS # 7 es un esquema de relleno que agrega un número de bytes N ≥ 1, donde el valor de cada byte agregado es igual a N.
Por ejemplo, Hello, World!
que tiene 13 bytes, es el siguiente en hexadecimal:
48 65 6C 6C 6F 2C 20 57 6F 72 6C 64 21
Si elegimos PKCS # 7 pad a la longitud 16, entonces el resultado es:
48 65 6C 6C 6F 2C 20 57 6F 72 6C 64 21 03 03 03
Y si elegimos rellenar hasta la longitud 20, entonces el resultado es:
48 65 6C 6C 6F 2C 20 57 6F 72 6C 64 21 07 07 07 07 07 07 07
Tenga en cuenta que en el primer ejemplo agregamos tres 03
bytes, y en el segundo agregamos siete 07
bytes.
Su tarea será validar si una cadena (o matriz de enteros) tiene el relleno PKCS # 7 correcto. Es decir, si el último byte de la cadena de entrada es N, entonces su programa debe verificar que los últimos N bytes de la cadena sean iguales a N.
Entrada
Una sola cadena ASCII no vacía que contiene caracteres entre los puntos de código 1 y 127 inclusive. Si lo desea, puede tomar la entrada como una matriz de enteros en su lugar.
Salida
Un valor verdadero si la cadena de entrada tiene un relleno PKCS # 7 válido; de lo contrario, un valor falso.
Ambas funciones y programas completos son aceptables. Este es el código de golf , por lo que el objetivo es minimizar el número de bytes en su código.
Casos de prueba
Aquí se presenta la versión de matriz entera de entradas: la versión de cadena tendría caracteres no imprimibles para muchos de los siguientes casos de prueba:
Verdad:
[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]
veraz o falsey? Yo creo que debería ser Truthy pero no soy positivo.7
s). Puedes pensar que, después de desnudarte, terminarías con[1 2 3]
.Respuestas:
Python,
473433 bytess[-1]
es el último miembro de la listas
. Comprueba que los últimoss[-1]
miembros de la matriz de entradas
son iguales a una matrizs[-1]
repetida tantas veces.Toma datos como una matriz de enteros. Esta es una expresión lambda; para usarlo, asígnele el prefijo
lambda
conf=
.Pruébalo en Ideone!
Probar:
¡Guardado 13 bytes gracias a Leaky Nun!
¡Ahorré un byte gracias a Dennis!
fuente
def f(s)=
Es un byte más corto.return
. Lalambda
versión es 7 bytes más corta.lambda s:[s[-1]]*s[-1]=s[-s[-1]:]
Brachylog , 14 bytes
Pruébalo en línea!
fuente
Pyth, 5 bytes
RLE en la entrada, tome el último par y verifique si el número de repeticiones es mayor o igual que el valor.
Pruébelo en línea: Demostración o conjunto de pruebas
fuente
Jalea , 5 bytes
La entrada es una matriz de puntos de código, la salida es una matriz no vacía (verdad) o una matriz vacía (falsa).
Pruébalo en línea! o verificar todos los casos de prueba .
Cómo funciona
fuente
CJam,
98 bytesGracias a Sp3000 por guardar 1 byte.
Toma una lista entera como entrada y devuelve
0
(falso) o un entero positivo (verdadero).Banco de pruebas.
Explicación
fuente
05AB1E , 9 bytes
No hay codificaciones de longitud de ejecución para osabie :(
Explicación:
Con un ejemplo:
Utiliza la codificación CP-1252 . Pruébalo en línea!
fuente
MATL , 10 bytes
Gracias a @Adnan por notar un problema con una versión anterior del código
Cuando la entrada tiene el relleno correcto, la salida es una matriz que contiene solo unos, lo cual es cierto . Cuando tiene un relleno incorrecto, la salida es una matriz que contiene al menos un cero, por lo que es falso .
Pruébalo en línea! O verificar todos los casos de prueba .
Explicación
fuente
Mathematica, 29 bytes
Divida la entrada en corridas de elementos iguales, extraiga el último y verifique que su primer elemento sea menor o igual a la longitud de esa corrida.
fuente
Haskell, 50 bytes
Toma una matriz de enteros como entrada.
fuente
J, 13 bytes
Toma la lista como un argumento único y
1
muestra0
si es verdadera y si es falsa.Uso
Explicación
fuente
3 4 3 3 3
tendría~.
como3 4
para que la última fila de=
es0 1 0 0 0
. Creo que operar en el reverso como{:*/@{.0{=@|.
debería funcionar, pero también termina en 13 bytes.Brain-Flak , 54 bytes
La entrada es una lista de enteros, la salida es 1 para verdadero y vacía para falsey.
Explicación
El ciclo no termina inmediatamente cuando se encuentra un valor que resultaría en un retorno de falsey. En cambio, se cambia a la otra pila que está vacía y gasta el resto de sus iteraciones comparando 0 y 0.
fuente
Lote, 101 bytes
Toma la entrada como parámetros de la línea de comandos, recorre todos ellos para que pueda ingresar el último
n
, los repite nuevamente para contar la serie den
s finales , finalmente imprime1
si el conteo es al menos igual an
. Alternativamente, si la impresión0
o un valor distinto de cero es aceptable, entonces para 93 bytes, cambie la última línea a@cmd/cset/ac/n
.fuente
Haskell, 49 bytes
Pruébalo en Ideone.
Versión más corta que devuelve
True
verdad y /False
o una excepción por falsedad:fuente
Dyalog APL , 10 bytes
⊃
Es el primero en∧.=
todo igual a⊃
la primera↑
n tomada desde⊢
el⌽
argumento inverso?TryAPL en línea!
fuente
Javascript (ES6),
514741 bytesEjemplos:
fuente
C 91 Bytes
Entrada: un puntero a una matriz terminada en nulo.
Salida: devuelve el
0
relleno no válido y no es cero para el válido (el último elemento de la matriz)Ejemplos:
Da:
Esto se basa en un comportamiento indefinido. Si el relleno es válido, no hay una declaración de devolución, pero el uso de
gcc -std=c99
este devuelve el último elemento de la matriz que se pasó (al menos en mi máquina).fuente
Perl 5 , 30 bytes
Incluye
+1
para-p
Pruébalo en línea!
fuente
Brachylog , 6 bytes
Pruébalo en línea!
Salidas a través del éxito o fracaso del predicado, como lo hace la respuesta Brachylog v1 de Leaky Nun. También adopta un enfoque similar, pero sale mucho más corto.
Brachylog , 6 bytes
Pruébalo en línea!
Una versión alternativa que tiene la misma longitud que se inspira en la respuesta de Dennis 'Jelly.
fuente
Retina , 34 bytes
El recuento de bytes asume la codificación ISO 8859-1.
La entrada es una lista de enteros separada por salto de línea. Impresiones
0
o1
.Pruébalo en línea!(La primera línea habilita un conjunto de pruebas, donde hay un caso de prueba separado por espacios por línea).
Una idea alternativa que termina en 35 bytes e imprime
0
o un entero positivo:fuente
Pyke, 7 bytes
Pruébalo aquí!
fuente
Javascript (ES5), 89 bytes
Sin golf:
fuente
Brain-Flak 84 bytes
100000000 me ganó aquí
¡Pruébelo en línea!
Toma entrada como un conjunto de enteros.
Explicación por venir.
Aquí hay una versión de 64 bytes que genera el no de la respuesta:
fuente