MATLAB, 63 41 40 38 36 байт
Спасибо Тому Карпентеру за то, что он сбрил 1 байт!
Спасибо Stewie Griffin за то, что он сбрил 2 байта!
@(x)nnz(x(+~strcmp('google',x):end))
В отличие от других более элегантных решений, выполнение операции деления на ноль в MATLAB не приведет к ошибке, а скорее Inf
. Это решение находит длину строки по nnz
. Строка, которая создается таким образом, что вы индексируете от начала строки до конца, который по сути является копией строки. Тем не менее, важно то, что начало доступа к строке производится путем проверки того, равен или нет вход 'google'
. Если это не так, это создает начальный индекс 1, и мы обычно индексируем в строку ... так как MATLAB начинает индексировать с 1. Если он равен, создается индекс 0, и MATLAB выдаст ошибку индексации, утверждая, что Индекс должен быть положительным целым числом. Экстра+
чтобы убедиться, что выходные данные проверки равенства являются числовыми, а не логическими / logical
. Пропуск +
будет выдавать предупреждение, но поскольку спецификации этого вызова не допускают предупреждений, +
требуется ... таким образом, завершается код.
Пример использования
>> f=@(x)nnz(x(+~strcmp('google',x):end)) %// Declare anonymous function
f =
@(x)nnz(x(+~strcmp('google',x):end))
>> f('bing')
ans =
4
>> f('google')
Subscript indices must either be real positive integers or logicals.
Error in @(x)nnz(x(+~strcmp('google',x):end))
Более веселая версия, 83 77 76 74 72 байта
Спасибо Тому Карпентеру за то, что он сбрил 1 байт!
Спасибо Stewie Griffin за то, что он сбрил 2 байта!
@(x)eval('if strcmp(''google'',x),web([x ''.com/i'']);else nnz(x),end');
Вышеуказанное не является официальным представлением, но в нем немного веселее. Злоупотребление eval
внутри анонимных функций, код выполняет то, что проверяет, равна ли входная строка'google'
... и если это так, то это открывает встроенный веб-браузер MATLAB и показывает страницу ошибки Google 404, пытающуюся получить доступ к подстраница, расположенная там, i
где ее нет. Если нет, мы отображаем длину строки как обычно.
Пример использования
>> f=@(x)eval('if strcmp(''google'',x),web([x ''.com/i'']);else nnz(x),end'); %// Declare anonymous function
>> f('bing')
ans =
4
>> f('google')
>>
Последнее использование вызова 'google'
дает нам этот экран: