W kryptografii dopełnianie PKCS # 7 to schemat dopełniania, który dodaje liczbę bajtów N ≥ 1, gdzie wartość każdego dodanego bajtu jest równa N.
Na przykład, Hello, World!
który ma 13 bajtów, ma postać szesnastkową:
48 65 6C 6C 6F 2C 20 57 6F 72 6C 64 21
Jeśli zdecydujemy się na pad PKCS # 7 do długości 16, wówczas wynik będzie:
48 65 6C 6C 6F 2C 20 57 6F 72 6C 64 21 03 03 03
A jeśli wybierzemy pad do długości 20, wynik będzie:
48 65 6C 6C 6F 2C 20 57 6F 72 6C 64 21 07 07 07 07 07 07 07
Zauważ, że w pierwszym przykładzie dodajemy trzy 03
bajty, aw drugim - siedem 07
bajtów.
Twoim zadaniem będzie sprawdzenie, czy łańcuch (lub tablica liczb całkowitych) ma poprawne wypełnienie PKCS # 7. Oznacza to, że jeśli ostatnim bajtem ciągu wejściowego jest N, to twój program powinien sprawdzić, czy ostatnie N bajtów ciągu jest równe N.
Wkład
Pojedynczy niepusty ciąg ASCII zawierający znaki między punktami kodowymi 1 i 127 włącznie. Jeśli chcesz, możesz zamiast tego wprowadzić dane jako tablicę liczb całkowitych.
Wydajność
Truthy wartość jeśli ciąg wejściowy posiada ważne dopełnienie PKCS # 7, w przeciwnym razie wartość falsy.
Zarówno funkcje, jak i pełne programy są dopuszczalne. To jest golf golfowy , więc celem jest zminimalizowanie liczby bajtów w kodzie.
Przypadki testowe
Prezentowana jest wersja danych wejściowych w postaci liczb całkowitych - wersja łańcuchowa zawierałaby znaki niedrukowalne w wielu z następujących przypadków testowych:
Prawda:
[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]
prawda czy falsey? Myślę, że to powinna być prawda, ale nie jestem pozytywny.7
s). Możesz myśleć o tym jak po rozebraniu się[1 2 3]
.Odpowiedzi:
Python,
473433 bajtóws[-1]
jest ostatnim członkiem listys
. Sprawdza, czy ostatnies[-1]
elementy tablicy wejściowejs
są takie same jak tablicas[-1]
powtórzona wiele razy.Pobiera dane wejściowe jako tablicę liczb całkowitych. To jest wyrażenie lambda; go używać, przypisać go poprzedzając
lambda
zf=
.Wypróbuj na Ideone!
Testować:
Zaoszczędź 13 bajtów dzięki Leaky Nun!
Oszczędność bajtu dzięki Dennisowi!
źródło
def f(s)=
jest bajt krótszy.return
.lambda
Wersja 7 bajtów krótszy.lambda s:[s[-1]]*s[-1]=s[-s[-1]:]
Brachylog , 14 bajtów
Wypróbuj online!
źródło
Pyth, 5 bajtów
RLE na wejściu, weź ostatnią parę i sprawdź, czy liczba powtórzeń jest większa czy równa wartości.
Wypróbuj online: pakiet demonstracyjny lub testowy
źródło
Galaretka , 5 bajtów
Dane wejściowe to tablica punktów kodowych, dane wyjściowe to niepusta tablica (prawda) lub pusta tablica (fałsz).
Wypróbuj online! lub zweryfikuj wszystkie przypadki testowe .
Jak to działa
źródło
CJam,
98 bajtówDzięki Sp3000 za oszczędność 1 bajtu.
Pobiera na wejściu listę liczb całkowitych i zwraca
0
(fałsz) lub liczbę całkowitą dodatnią (prawda).Zestaw testowy.
Wyjaśnienie
źródło
05AB1E , 9 bajtów
Brak kodowania długości przebiegu dla osabie :(
Wyjaśnienie:
Na przykład:
Wykorzystuje kodowanie CP-1252 . Wypróbuj online!
źródło
MATL , 10 bajtów
Dziękujemy @Adnan za zauważenie problemu z wcześniejszą wersją kodu
Gdy wejście ma poprawne wypełnienie, wynikiem jest tablica zawierająca tylko te, co jest prawdą . Gdy ma niepoprawne wypełnienie, wynikiem jest tablica zawierająca co najmniej zero, podobnie jak fałsz .
Wypróbuj online! Lub sprawdź wszystkie przypadki testowe .
Wyjaśnienie
źródło
Mathematica, 29 bajtów
Podziel dane wejściowe na przebiegi równych elementów, wyodrębnij ostatni i sprawdź, czy jego pierwszy element jest mniejszy lub równy długości tego przebiegu.
źródło
Haskell, 50 bajtów
Pobiera tablicę liczb całkowitych jako danych wejściowych.
źródło
J, 13 bajtów
1
Traktuje listę jako pojedynczy argument i wypisuje ją, jeśli jest prawdziwa i0
jeśli falsey.Stosowanie
Wyjaśnienie
źródło
3 4 3 3 3
miałby~.
jak3 4
tak, że ostatni wiersz=
jest0 1 0 0 0
. Myślę, że operacja odwrotna{:*/@{.0{=@|.
powinna działać, ale kończy się również na 13 bajtach.Brain-Flak , 54 bajty
Wejście to lista liczb całkowitych, wyjście to 1 dla prawdy i puste dla falsey.
Wyjaśnienie
Pętla nie kończy się natychmiast po napotkaniu wartości, która spowodowałaby powrót falsey. Zamiast tego jest przełączany na inny stos, który jest pusty i spędza resztę iteracji na porównywaniu 0 i 0.
źródło
Partia, 101 bajtów
Pobiera dane wejściowe jako parametry wiersza poleceń, zapętla je wszystkie, aby mógł dostać się do ostatniego
n
, zapętla je wszystkie ponownie, aby zliczyć liczbę ostatnichn
s, w końcu drukuje,1
jeśli liczba jest co najmniej równan
. Alternatywnie, jeśli0
dopuszczalne jest drukowanie lub niezerowa wartość, to dla 93 bajtów zmień ostatni wiersz na@cmd/cset/ac/n
.źródło
Haskell, 49 bajtów
Wypróbuj na Ideone.
Krótsza wersja, która zwraca
True
prawdę i /False
lub wyjątek dla fałszu:źródło
Dyalog APL , 10 bajtów
⊃
Jest to pierwszy∧.=
całkowicie równa⊃
pierwszej↑
n pobranej z⊢
tej⌽
odwróconej argumentu?Wypróbuj APL online!
źródło
JavaScript (ES6),
514741 bajtówPrzykłady:
źródło
C 91 bajtów
Dane wejściowe: wskaźnik do tablicy zakończonej znakiem null.
Dane wyjściowe: zwraca
0
niepoprawne wypełnienie i niezerowe dla poprawnego (ostatni element w tablicy)Przykłady:
Daje:
Polega to na niezdefiniowanym zachowaniu. Jeśli wypełnienie jest poprawne, nie ma instrukcji return, ale użycie
gcc -std=c99
tej wartości zwraca ostatni element tablicy, który został przekazany (przynajmniej na moim komputerze).źródło
Perl 5 , 30 bajtów
Obejmuje
+1
dla-p
Wypróbuj online!
źródło
Brachylog , 6 bajtów
Wypróbuj online!
Wyprowadza poprzez sukces lub porażkę predykatu, jak robi to odpowiedź Brachylog v1 Leaky Nun. Ma również podobne podejście, ale wychodzi znacznie krócej.
Brachylog , 6 bajtów
Wypróbuj online!
Alternatywna wersja, która wychodzi na tę samą długość, która czerpie inspirację z galaretki Dennisa.
źródło
Retina , 34 bajty
Liczba bajtów zakłada kodowanie ISO 8859-1.
Dane wejściowe to lista liczb całkowitych oddzielonych od linii. Odbitki
0
lub1
.Wypróbuj online!(Pierwszy wiersz włącza zestaw testów, w którym przypada jeden rozdzielony spacjami przypadek testowy na wiersz).
Alternatywny pomysł, który kończy się na 35 bajtach i wydrukach
0
lub dodatniej liczbie całkowitej:źródło
Pyke, 7 bajtów
Wypróbuj tutaj!
źródło
JavaScript (ES5), 89 bajtów
Nie golfowany:
źródło
Brain-Flak 84 bajty
100000000 pobił mnie tutaj
Wypróbuj online!
Pobiera dane wejściowe jako tablicę liczb całkowitych.
Wyjaśnienie, które nastąpi.
Oto 64-bajtowa wersja, w której nie ma odpowiedzi:
źródło