MATLAB, 63 41 40 38 36 bytes
Agradecimentos a Tom Carpenter por reduzir 1 byte!
Agradecimentos a Stewie Griffin por remover 2 bytes!
@(x)nnz(x(+~strcmp('google',x):end))
Ao contrário das outras soluções mais elegantes, executar uma operação de divisão por zero no MATLAB não dará um erro, mas sim Inf
. Esta solução encontra o comprimento da cadeia por nnz
. A sequência produzida é de maneira que você indexe do início à sequência, o que é essencialmente uma cópia da sequência. No entanto, o importante é que o início de onde acessar a sequência seja produzido, verificando se a entrada é igual ou não 'google'
. Caso contrário, produz um índice inicial de 1 e indexamos normalmente na string ... quando o MATLAB inicia a indexação em 1. Se for igual, o índice produzido é 0 e o MATLAB emitirá um erro de indexação informando que o O índice precisa ser um número inteiro positivo. O Extra+
é garantir que a saída da verificação de igualdade seja numérica em vez de booleana / logical
. A omissão do +
aviso produzirá um aviso, mas como as especificações deste desafio não permitem avisos, +
é necessário ... completando o código.
Exemplo de usos
>> 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))
Uma versão mais divertida, 83 77 76 74 72 bytes
Agradecimentos a Tom Carpenter por reduzir 1 byte!
Agradecimentos a Stewie Griffin por remover 2 bytes!
@(x)eval('if strcmp(''google'',x),web([x ''.com/i'']);else nnz(x),end');
A descrição acima não é uma inscrição oficial, mas é algo mais divertido de executar. Abusando eval
em funções anônimas, o que o código faz é verificar se a sequência de entrada é igual a 'google'
... e, se for, isso abrirá o navegador da web incorporado do MATLAB e exibirá a página de erro 404 do Google tentando acessar o subpágina localizada em i
quando isso não existe. Caso contrário, exibimos o comprimento da string normalmente.
Exemplo de usos
>> f=@(x)eval('if strcmp(''google'',x),web([x ''.com/i'']);else nnz(x),end'); %// Declare anonymous function
>> f('bing')
ans =
4
>> f('google')
>>
A última chamada usando 'google'
nos fornece esta tela: