En cryptographie, le remplissage PKCS # 7 est un schéma de remplissage qui ajoute un nombre d'octets N ≥ 1, où la valeur de chaque octet ajouté est égale à N.
Par exemple, Hello, World!
qui a 13 octets, est le suivant en hexadécimal:
48 65 6C 6C 6F 2C 20 57 6F 72 6C 64 21
Si nous choisissons de PKCS # 7 pad à la longueur 16, alors le résultat est:
48 65 6C 6C 6F 2C 20 57 6F 72 6C 64 21 03 03 03
Et si nous choisissons de remplir la longueur 20, le résultat est:
48 65 6C 6C 6F 2C 20 57 6F 72 6C 64 21 07 07 07 07 07 07 07
Notez que dans le premier exemple, nous ajoutons trois 03
octets, et dans le second, nous ajoutons sept 07
octets.
Votre tâche consistera à valider si une chaîne (ou un tableau d'entiers) a un remplissage PKCS # 7 correct. Autrement dit, si le dernier octet de la chaîne d'entrée est N, votre programme doit vérifier que les N derniers octets de la chaîne sont égaux à N.
Contribution
Une seule chaîne ASCII non vide contenant des caractères entre les points de code 1 et 127 inclus. Si vous le souhaitez, vous pouvez prendre l'entrée comme un tableau d'entiers à la place.
Sortie
Une valeur vraie si la chaîne d'entrée a un remplissage PKCS # 7 valide, sinon une valeur fausse.
Les fonctions et les programmes complets sont acceptables. Il s'agit de code-golf , donc l'objectif est de minimiser le nombre d'octets dans votre code.
Cas de test
La version du tableau d'entiers d'entrées est présentée ici - la version de chaîne aurait des caractères non imprimables pour la plupart des cas de test suivants:
Vérité:
[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]
Faux:
[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]
vrai ou falsey? Je pense que cela devrait être vrai mais je ne suis pas positif.7
s). Vous pouvez penser à cela comme, après le décapage, vous vous retrouveriez avec[1 2 3]
.Réponses:
Python,
473433 octetss[-1]
est le dernier membre de la listes
. Vérifie que les dernierss[-1]
membres du tableau d'entrées
sont les mêmes qu'un tableau des[-1]
répétitions autant de fois.Prend l'entrée comme un tableau d'entiers. Il s'agit d'une expression lambda; pour l'utiliser, affectez-le en préfixant
lambda
avecf=
.Essayez-le sur Ideone!
Tester:
13 octets enregistrés grâce à Leaky Nun!
Enregistré un octet grâce à Dennis!
la source
def f(s)=
est un octet plus court.return
. Lalambda
version est 7 octets plus courte.lambda s:[s[-1]]*s[-1]=s[-s[-1]:]
Brachylog , 14 octets
Essayez-le en ligne!
la source
Pyth, 5 octets
RLE en entrée, prenez la dernière paire et vérifiez si le nombre de répétitions est supérieur ou égal à la valeur.
Essayez-le en ligne: démonstration ou suite de tests
la source
Gelée , 5 octets
L'entrée est un tableau de points de code, la sortie est un tableau non vide (véridique) ou un tableau vide (faux).
Essayez-le en ligne! ou vérifiez tous les cas de test .
Comment ça marche
la source
CJam,
98 octetsMerci à Sp3000 pour avoir économisé 1 octet.
Prend une liste entière comme entrée et retourne
0
(fausse) ou un entier positif (vrai).Suite de tests.
Explication
la source
05AB1E , 9 octets
Aucun encodage de longueur pour osabie :(
Explication:
Avec un exemple:
Utilise l' encodage CP-1252 . Essayez-le en ligne!
la source
MATL , 10 octets
Merci à @Adnan d'avoir remarqué un problème avec une version antérieure du code
Lorsque l'entrée a un remplissage correct, la sortie est un tableau ne contenant que des éléments, ce qui est vrai . Lorsqu'il a un remplissage incorrect, la sortie est un tableau contenant au moins un zéro, tout comme la fausse .
Essayez-le en ligne! Ou vérifiez tous les cas de test .
Explication
la source
Mathematica, 29 octets
Divisez l'entrée en séries d'éléments égaux, extrayez le dernier et vérifiez que son premier élément est inférieur ou égal à la longueur de cette série.
la source
Haskell, 50 octets
Prend un tableau d'entiers en entrée.
la source
J, 13 octets
Prend la liste comme un seul argument et
1
affiche si elle est véridique et0
si falsey.Usage
Explication
la source
3 4 3 3 3
aurait~.
comme de3 4
sorte que la dernière ligne=
est0 1 0 0 0
. Je pense que le fonctionnement inverse{:*/@{.0{=@|.
devrait fonctionner, mais il se termine également par 13 octets.Brain-Flak , 54 octets
L'entrée est une liste d'entiers, la sortie est 1 pour véridique et vide pour falsey.
Explication
La boucle ne se termine pas immédiatement lorsqu'une valeur qui entraînerait un retour de falsey est rencontrée. Au lieu de cela, il est basculé vers l'autre pile qui est vide et passe le reste de ses itérations à comparer 0 et 0.
la source
Lot, 101 octets
Prend l'entrée en tant que paramètres de ligne de commande, les boucle sur tous afin qu'il puisse obtenir le dernier
n
, les boucle à nouveau pour compter la série den
s finaux , pour finalement imprimer1
si le nombre est au moins égal àn
. Alternativement, si l'impression0
ou une valeur non nulle est acceptable, alors pour 93 octets, remplacez la dernière ligne par@cmd/cset/ac/n
.la source
Haskell, 49 octets
Essayez-le sur Ideone.
Version plus courte qui revient
True
pour la vérité etFalse
ou une exception pour la fausse:la source
Dyalog APL , 10 octets
⊃
Le premier∧.=
tout égal au⊃
premier↑
n est-il tiré de⊢
l'⌽
argument inversé?TryAPL en ligne!
la source
Javascript (ES6),
514741 octetsExemples:
la source
C 91 octets
Entrée: un pointeur vers un tableau terminé par null.
Sortie: renvoie
0
pour un remplissage non valide et non nul pour valide (le dernier élément du tableau)Exemples:
Donne:
Cela dépend d'un comportement non défini. Si le remplissage est valide, il n'y a pas de déclaration de retour, mais son utilisation
gcc -std=c99
renvoie le dernier élément du tableau qui a été transmis (au moins sur ma machine).la source
Perl 5 , 30 octets
Comprend
+1
pour-p
Essayez-le en ligne!
la source
Brachylog , 6 octets
Essayez-le en ligne!
Sorties par succès ou échec de prédicat, comme le fait la réponse Brachylog v1 de Leaky Nun. Adopte également une approche similaire, mais sort beaucoup plus court.
Brachylog , 6 octets
Essayez-le en ligne!
Une version alternative qui sort dans la même longueur qui s'inspire de la réponse de Dennis 'Jelly.
la source
Rétine , 34 octets
Le nombre d'octets suppose un codage ISO 8859-1.
L'entrée est une liste d'entiers séparés par des sauts de ligne. Imprime
0
ou1
.Essayez-le en ligne! (La première ligne active une suite de tests, où il y a un cas de test séparé par espace par ligne.)
Une idée alternative qui se termine à 35 octets et imprime
0
ou un entier positif:la source
Pyke, 7 octets
Essayez-le ici!
la source
Javascript (ES5), 89 octets
Non golfé:
la source
Brain-Flak 84 octets
100000000 me battre ici
Essayez-le en ligne!
Prend l'entrée comme un tableau d'entiers.
Explication à venir.
Voici une version 64 octets qui sort le non de la réponse:
la source