В криптографии заполнение PKCS # 7 является схемой заполнения, которая добавляет количество байтов N ≥ 1, где значение каждого добавленного байта равно N.
Например, Hello, World!
который имеет 13 байтов, является следующим в шестнадцатеричном виде:
48 65 6C 6C 6F 2C 20 57 6F 72 6C 64 21
Если мы выберем для пэда PKCS # 7 длину 16, то результатом будет:
48 65 6C 6C 6F 2C 20 57 6F 72 6C 64 21 03 03 03
И если мы выберем длину до 20, то результат будет следующим:
48 65 6C 6C 6F 2C 20 57 6F 72 6C 64 21 07 07 07 07 07 07 07
Обратите внимание, что в первом примере мы добавляем три 03
байта, а во втором мы добавляем семь 07
байтов.
Ваша задача будет проверить, имеет ли строка (или целочисленный массив) правильное заполнение PKCS # 7. То есть, если последний байт входной строки равен N, то ваша программа должна проверить, что последние N байтов строки равны N.
вход
Одна непустая строка ASCII, содержащая символы между кодовыми точками 1 и 127 включительно. Если вы хотите, вы можете принять входные данные в виде массива целых чисел.
Выход
Truthy значение , если входная строка имеет действительный PKCS # 7 обивки, в противном случае falsy значение.
Обе функции и полные программы являются приемлемыми. Это код-гольф , поэтому цель состоит в том, чтобы минимизировать количество байтов в вашем коде.
Контрольные примеры
Здесь представлена версия входных данных целочисленного массива - строковая версия будет иметь непечатаемые символы для многих из следующих тестовых случаев:
Truthy:
[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]
правда или ложь? Я думаю, что это должно быть правдой, но я не уверен.7
s). Вы можете думать об этом, как после раздевания, вы в конечном итоге[1 2 3]
.Ответы:
Python,
473433 байтаs[-1]
последний член спискаs
. Проверяет, что последниеs[-1]
члены входного массиваs
совпадают с массивомs[-1]
повторяющихся столько раз.Принимает ввод как массив целых чисел. Это лямбда-выражение; использовать его, назначить его предваряя
lambda
сf=
.Попробуйте это на Ideone!
Тестировать:
Сохранено 13 байтов благодаря Leaky Nun!
Спас Байт благодаря Денису!
источник
def f(s)=
на байт короче.return
.lambda
Версия 7 байт короче.lambda s:[s[-1]]*s[-1]=s[-s[-1]:]
Брахилог , 14 байт
Попробуйте онлайн!
источник
Pyth, 5 байт
RLE на входе, возьмите последнюю пару и проверьте, больше или равно ли количество повторений, чем значение.
Попробуйте онлайн: демонстрация или тестовый набор
источник
Желе , 5 байт
Входные данные - это массив кодовых точек, выходные данные - непустой массив (истинный) или пустой массив (ложный).
Попробуйте онлайн! или проверьте все контрольные примеры .
Как это работает
источник
CJam,
98 байтовСпасибо Sp3000 за сохранение 1 байта.
Принимает целочисленный список как входные данные и возвращает
0
(ложь) или положительное целое число (правда).Тестирование.
объяснение
источник
05AB1E , 9 байтов
Для osabie нет кодировок длин серий :(
Объяснение:
С примером:
Использует кодировку CP-1252 . Попробуйте онлайн!
источник
MATL , 10 байт
Спасибо @Adnan за замечание проблемы с более ранней версией кода
Когда вход имеет правильное заполнение, вывод представляет собой массив, содержащий только те, что является правдой . Когда он имеет неправильное заполнение, выводом является массив, содержащий по крайней мере ноль, и это также ложно .
Попробуйте онлайн! Или проверьте все тестовые случаи .
объяснение
источник
Mathematica, 29 байт
Разбейте входные данные на серии одинаковых элементов, извлеките последний и убедитесь, что его первый элемент меньше или равен длине этого цикла.
источник
Haskell, 50 байтов
Принимает массив целых чисел в качестве входных данных.
источник
J, 13 байт
Принимает список в качестве единственного аргумента и выводит,
1
если он верный и0
если ложный.использование
объяснение
источник
3 4 3 3 3
бы ,~.
как3 4
так , чтобы последняя строка=
находится0 1 0 0 0
. Я думаю, что работа с реверсом{:*/@{.0{=@|.
должна работать, но в итоге получается также 13 байтов.Brain-Flak , 54 байта
Входные данные представляют собой список целых чисел, выходные данные равны 1 для истинности и пустые для фальси.
объяснение
Цикл не заканчивается немедленно, когда встречается значение, которое приведет к возврату фальси. Вместо этого он переключается на другой стек, который пуст и проводит оставшиеся итерации, сравнивая 0 и 0.
источник
Пакет, 101 байт
Принимает входные данные в качестве параметров командной строки, циклически обходит их все, чтобы он мог получить последний
n
, циклически повторяет их все снова, чтобы подсчитать пробег конечныхn
s, и, наконец, вывести результат ,1
если счетчик хотя бы равенn
. В качестве альтернативы, если печать0
или ненулевое значение приемлемы, тогда для 93 байтов измените последнюю строку на@cmd/cset/ac/n
.источник
Haskell, 49 байтов
Попробуйте это на Ideone.
Укороченная версия, которая возвращает
True
правду и /False
или исключение для фальсификации:источник
Dyalog APL , 10 байт
⊃
Является первым∧.=
все равно⊃
первым↑
п , взятым из⊢
в⌽
обратном аргументе?Попробуй APL онлайн!
источник
Javascript (ES6),
514741 байтПримеры:
источник
C 91 байт
Ввод: указатель на массив с нулевым символом в конце.
Вывод: возвращает
0
недопустимое заполнение и ненулевое значение допустимо (последний элемент в массиве)Примеры:
дает:
Это зависит от неопределенного поведения. Если заполнение допустимо, оператора return нет, но использование
gcc -std=c99
этого возвращает последний элемент массива, который был передан (по крайней мере, на моем компьютере).источник
Perl 5 , 30 байт
Включает
+1
в себя для-p
Попробуйте онлайн!
источник
Брахилог , 6 байт
Попробуйте онлайн!
Выводится через предикат успеха или неудачи, как и в ответе Brachylog v1 от Leaky Nun. Использует аналогичный подход, но выходит намного короче.
Брахилог , 6 байт
Попробуйте онлайн!
Альтернативная версия, которая выходит той же длины, которая берет некоторое вдохновение от ответа Желе Денниса.
источник
Сетчатка , 34 байта
Число байтов предполагает кодировку ISO 8859-1.
Input представляет собой список целых чисел, разделенных переводом строки. Отпечатки
0
или1
.Попробуйте онлайн! (Первая строка включает набор тестов, где в каждой строке есть один пробел.)
Альтернативная идея, которая заканчивается в 35 байтах и печатает
0
или положительное целое число:источник
Пайк, 7 байт
Попробуй это здесь!
источник
Javascript (ES5), 89 байт
Ungolfed:
источник
Brain-Flak 84 байта
100000000 бей меня здесь
Попробуйте онлайн!
Принимает ввод как массив целых чисел.
Объяснение впереди.
Вот 64-байтовая версия, которая выводит not of answer:
источник