MATLAB, 63 41 40 38 36 bytes
¡Gracias a Tom Carpenter por eliminar 1 byte!
¡Gracias a Stewie Griffin por eliminar 2 bytes!
@(x)nnz(x(+~strcmp('google',x):end))
A diferencia de otras soluciones más elegantes, realizar una operación de división por cero en MATLAB no dará un error, sino más bien Inf
. Esta solución determina que la longitud de la cadenannz
. La cadena que se produce es de tal manera que se indexa desde el principio de la cadena hasta el final, que es esencialmente una copia de la cadena. Sin embargo, lo importante es que el comienzo de dónde acceder a la cadena se produce al verificar si la entrada es igual o no 'google'
. Si no lo es, esto produce un índice inicial de 1 e indexamos en la cadena normalmente ... ya que MATLAB comienza a indexar en 1. Si es igual, el índice producido es 0 y MATLAB arrojará un error de indexación que indica que El índice debe ser un número entero positivo. El extra+
es asegurar que la salida de la verificación de igualdad sea numérica en lugar de booleana / logical
. Omitir +
producirá una advertencia, pero debido a que las especificaciones de este desafío no permiten advertencias, +
se requiere ... completando así el código.
Usos de ejemplo
>> 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))
Una versión más divertida, 83 77 76 74 72 bytes
¡Gracias a Tom Carpenter por eliminar 1 byte!
¡Gracias a Stewie Griffin por eliminar 2 bytes!
@(x)eval('if strcmp(''google'',x),web([x ''.com/i'']);else nnz(x),end');
Lo anterior no es una presentación oficial, pero es algo más divertido de ejecutar. Abusando de eval
las funciones anónimas, lo que hace el código es que verifica si la cadena de entrada es igual a 'google'
... y si es así, esto abrirá el navegador web incorporado de MATLAB y muestra la página de error 404 de Google tratando de acceder al subpágina ubicada en i
cuando eso no existe. Si no, mostramos la longitud de la cadena normalmente.
Usos de ejemplo
>> f=@(x)eval('if strcmp(''google'',x),web([x ''.com/i'']);else nnz(x),end'); %// Declare anonymous function
>> f('bing')
ans =
4
>> f('google')
>>
La última llamada usando 'google'
nos da esta pantalla: