Введение
Имена файлов могут быть разными, от простых blah.txt
до 303549020150514101638190-MSP0.txt
. Первый обычно генерируется человеком, а второй - машиной. Разве не было бы неплохо иметь простую функцию, чтобы делать обоснованные предположения о том, можно ли считать файл «дружественным человеку»?
Вдохновлен постом Эдуарда Флоринеску, который с тех пор был удален. Его идея была хороша, но просто нужно было немного доработать.
Вызов
Напишите программу или функцию на выбранном вами языке, которая может принимать строку, и определить, считается ли она «дружественной человеку», как определено в этой задаче.
Некоторые дополнительные детали и правила заключаются в следующем:
- На входе будет строка, состоящая из 95 печатных символов ascii.
- «дружественный человеку» определяется следующим образом:
- Исключить расширение в рассмотрении. Расширение определяется как последний период, за которым следует серия буквенно-цифровых символов (всего от 1 до 6).
- Не более половины строки по длине (исключая расширение) может состоять из следующих определенных групп символов (вместе взятых):
- Десятичные знаки длиннее 8 подряд.
- Шестнадцатеричные символы (верхний или нижний регистр) не менее 16 в строке (должны состоять из букв и цифр, из которых не менее трети символов составляют цифры).
- Символы Base64 (с использованием
%+=
в качестве специальных символов) не менее 12 в строке (должны состоять из букв и цифр в смешанном регистре, из которых не менее трети символов составляют заглавные буквы).
- Если любая из вышеперечисленных группировок пересекается в определении (например, такая, которая квалифицируется как base64, но имеет 8 цифр подряд), выберите самую длинную из них, которую следует исключить.
- Вывод должен быть истинным или ложным значением, в зависимости от того, считается ли строка «удобной для человека» или нет.
- Предположим, что будет использоваться только действительный ввод. Не беспокойтесь об обработке ошибок.
Победитель будет определен самой короткой программой / функцией. Они будут выбраны не позднее, чем через 7 дней, или если / когда было достаточно заявок. В случае ничьей, ответ, который пришел раньше, выигрывает.
Примеры
Вот несколько примеров ввода и вывода, которые ваш код должен уметь обрабатывать:
"results_for__michael_greer.txt.zip" => true
"Georg Feuerstein - Connecting the Dots.pdf" => true
"M People - Search for the Hero-ntuqTuc6HxM.mp4" => true
"index.html?v=QTR4WGVTUzFsV3d8NHxvcmlnaW5hbHx8MTExMTAxBHxodHRwOi8vLCwsLHRyLDcsMA%3D%3D.html" => false
"ol2DCE0SIyQC(173).pdf" => false
"d41d8cd98f00b204e9800998ecf8427e.md5" => false
"12792331_807918856008495_7076645197310150318_o.jpg" => false