In der Kryptographie ist PKCS # 7-Auffüllung ein Auffüllschema, das eine Anzahl von Bytes N ≥ 1 hinzufügt, wobei der Wert jedes hinzugefügten Bytes gleich N ist.
Beispiel: Hello, World!
13 Byte sind hexadezimal wie folgt:
48 65 6C 6C 6F 2C 20 57 6F 72 6C 64 21
Wenn wir PKCS # 7 Pad auf Länge 16 wählen, dann ist das Ergebnis:
48 65 6C 6C 6F 2C 20 57 6F 72 6C 64 21 03 03 03
Und wenn wir uns dafür entscheiden, auf Länge 20 aufzufüllen, lautet das Ergebnis:
48 65 6C 6C 6F 2C 20 57 6F 72 6C 64 21 07 07 07 07 07 07 07
Beachten Sie, dass wir im ersten Beispiel drei 03
Bytes und im zweiten sieben 07
Bytes hinzufügen .
Ihre Aufgabe besteht darin, zu überprüfen, ob eine Zeichenfolge (oder ein ganzzahliges Array) die richtige PKCS # 7-Auffüllung aufweist. Das heißt, wenn das letzte Byte der Eingabezeichenfolge N ist, sollte Ihr Programm prüfen, ob die letzten N Bytes der Zeichenfolge N entsprechen.
Eingang
Eine einzelne nicht leere ASCII-Zeichenfolge, die Zeichen zwischen den Codepunkten 1 und 127 enthält. Wenn Sie möchten, können Sie die Eingabe stattdessen als Array von Ganzzahlen annehmen.
Ausgabe
Ein wahrer Wert, wenn die Eingabezeichenfolge eine gültige PKCS # 7-Auffüllung aufweist, andernfalls ein falscher Wert.
Beide Funktionen und vollständige Programme sind akzeptabel. Dies ist Codegolf , daher ist es das Ziel, die Anzahl der Bytes in Ihrem Code zu minimieren.
Testfälle
Die Integer-Array-Version der Eingaben wird hier dargestellt. Die String-Version würde für viele der folgenden Testfälle nicht druckbare Zeichen enthalten:
Wahrheit:
[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]
Falsch:
[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]
wahr oder falsch? Ich denke, es sollte wahr sein, aber ich bin nicht positiv.7
s endet ). Sie können daran denken , wie, nach dem Strippen, Sie würden am Ende[1 2 3]
.Antworten:
Python,
473433 Bytess[-1]
ist das letzte Mitglied der Listes
. Überprüft, ob die letztens[-1]
Elemente des Eingabearrays mit einem Arrays
identisch sind, das sos[-1]
oft wiederholt wurde.Nimmt die Eingabe als Array von Ganzzahlen. Dies ist ein Lambda-Ausdruck; Um es zu verwenden, weisen Sie es mit einem Präfix
lambda
zuf=
.Probieren Sie es auf Ideone!
Zu testen:
13 Bytes dank Leaky Nun eingespart!
Dank Dennis ein Byte gespart!
quelle
def f(s)=
ist ein Byte kürzer.return
. Dielambda
Version ist 7 Bytes kürzer.lambda s:[s[-1]]*s[-1]=s[-s[-1]:]
Brachylog , 14 Bytes
Probieren Sie es online!
quelle
Pyth, 5 Bytes
RLE bei der Eingabe, nimm das letzte Paar und überprüfe, ob die Anzahl der Wiederholungen größer oder gleich dem Wert ist.
Probieren Sie es online aus: Demo oder Test Suite
quelle
Gelee , 5 Bytes
Eingabe ist ein Array von Codepunkten, Ausgabe ist ein nicht leeres Array (wahr) oder ein leeres Array (falsch).
Probieren Sie es online! oder überprüfen Sie alle Testfälle .
Wie es funktioniert
quelle
CJam,
98 BytesVielen Dank an Sp3000 für das Speichern von 1 Byte.
Nimmt eine Ganzzahlliste als Eingabe und gibt
0
(falsch) oder eine positive Ganzzahl (wahr) zurück.Testsuite.
Erläuterung
quelle
05AB1E , 9 Bytes
Keine Lauflängencodierungen für osabie :(
Erläuterung:
Mit einem Beispiel:
Verwendet die CP-1252- Codierung. Probieren Sie es online!
quelle
MATL , 10 Bytes
Vielen Dank an @Adnan, dass er ein Problem mit einer früheren Version des Codes bemerkt hat
Wenn die Eingabe korrekt aufgefüllt ist, ist die Ausgabe ein Array, das nur Einsen enthält, was wahr ist . Wenn die Auffüllung nicht korrekt ist, ist die Ausgabe ein Array, das mindestens eine Null enthält, und ist daher falsch .
Probieren Sie es online! Oder überprüfen Sie alle Testfälle .
Erläuterung
quelle
Mathematica, 29 Bytes
Teilen Sie die Eingabe in Läufe gleicher Elemente auf, extrahieren Sie den letzten und überprüfen Sie, ob sein erstes Element kleiner oder gleich der Länge dieses Laufs ist.
quelle
Haskell, 50 Bytes
Nimmt ein Array von Ganzzahlen als Eingabe.
quelle
J, 13 Bytes
Nimmt die Liste als einzelnes Argument und gibt aus,
1
ob sie wahr und0
falsch ist.Verwendung
Erläuterung
quelle
3 4 3 3 3
hätte~.
als3 4
so , daß die letzte Reihe=
ist0 1 0 0 0
. Ich denke, auf der Rückseite zu{:*/@{.0{=@|.
arbeiten, wie es funktionieren sollte, aber es endet auch als 13 Bytes.Brain-Flak , 54 Bytes
Die Eingabe ist eine Liste von ganzen Zahlen, die Ausgabe ist 1 für wahr und leer für falsch.
Erläuterung
Die Schleife endet nicht sofort, wenn ein Wert angetroffen wird, der zu einer falschen Rückkehr führen würde. Es wird stattdessen auf den anderen Stapel umgeschaltet, der leer ist und den Rest seiner Iterationen damit verbringt, 0 und 0 zu vergleichen.
quelle
Batch, 101 Bytes
Übernimmt Eingaben als Befehlszeilenparameter, durchläuft sie alle, damit der letzte eingegeben werden kann
n
, durchläuft sie alle erneut, um die Anzahl der nachfolgendenn
s zu zählen, und gibt schließlich aus,1
ob die Anzahl mindestens gleich istn
. Wenn alternativ Drucken0
oder ein Wert ungleich Null zulässig ist, ändern Sie für 93 Byte die letzte Zeile in@cmd/cset/ac/n
.quelle
Haskell, 49 Bytes
Probieren Sie es auf Ideone.
Kürzere Version, die
True
für Wahrhaftigkeit und /False
oder eine Ausnahme für Falschheit zurückgibt:quelle
Dyalog APL , 10 Bytes
⊃
Ist das erste∧.=
all-gleich⊃
dem ersten↑
n aus⊢
dem⌽
umgekehrten Argument?TryAPL online!
quelle
Javascript (ES6),
514741 BytesBeispiele:
quelle
C 91 Bytes
Eingabe: Ein Zeiger auf ein nullterminiertes Array.
Ausgabe: Gibt
0
für eine ungültige Auffüllung und für eine gültige Nicht-Null-Angabe zurück (das letzte Element im Array).Beispiele:
Gibt:
Dies setzt undefiniertes Verhalten voraus. Wenn die Auffüllung gültig ist, gibt es keine return-Anweisung, aber wenn Sie
gcc -std=c99
diese verwenden, wird das letzte Element des Arrays zurückgegeben, das übergeben wurde (zumindest auf meinem Computer).quelle
Perl 5 , 30 Bytes
Beinhaltet
+1
für-p
Probieren Sie es online!
quelle
Brachylog , 6 Bytes
Probieren Sie es online!
Die Ausgabe erfolgt durch Erfolg oder Misserfolg eines Prädikats, wie es die Brachylog v1-Antwort von Leaky Nun tut. Geht ähnlich vor, kommt aber viel kürzer raus.
Brachylog , 6 Bytes
Probieren Sie es online!
Eine alternative Version, die in der gleichen Länge herauskommt und sich von Dennis 'Jelly-Antwort inspirieren lässt.
quelle
Retina , 34 Bytes
Die Anzahl der Bytes setzt die Kodierung nach ISO 8859-1 voraus.
Die Eingabe ist eine durch Zeilenvorschub getrennte Liste von Ganzzahlen. Druckt
0
oder1
.Probieren Sie es online!(Die erste Zeile aktiviert eine Testsuite, bei der es einen durch Leerzeichen getrennten Testfall pro Zeile gibt.)
Eine alternative Idee, die bei 35 Bytes endet und
0
eine positive Ganzzahl ausgibt:quelle
Pyke, 7 Bytes
Probieren Sie es hier aus!
quelle
Javascript (ES5), 89 Byte
Ungolfed:
quelle
Gehirn-Flak 84 Bytes
100000000 schlagen mich hier
Probieren Sie es online!
Übernimmt die Eingabe als Array von Ganzzahlen.
Erklärung zu kommen.
Hier ist eine 64-Byte-Version, die das Nicht der Antwort ausgibt:
quelle