MATLAB, 63 41 40 38 36 байт
Дякую Тому Карпентеру за гоління 1 байта!
Дякуємо Стіві Гріффін за бриття 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 байта!
Дякуємо Стіві Гріффін за бриття 2-х байт!
@(x)eval('if strcmp(''google'',x),web([x ''.com/i'']);else nnz(x),end');
Сказане не є офіційним поданням, але бігти трохи веселіше. Зловживаючи eval
в рамках анонімних функцій, код робить те, що він перевіряє, чи вводиться рядок введення 'google'
... та якщо він є, це відкриє вбудований веб-браузер MATLAB і показує сторінку помилки 404 Google, що намагається отримати доступ до підсторінка, розташована тоді, 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'
дає нам цей екран: