MATLAB, 63 41 40 38 36 bajtów
Dzięki Tomowi Carpenterowi za zgolenie 1 bajta!
Dzięki Stewie Griffin za zgolenie 2 bajtów!
@(x)nnz(x(+~strcmp('google',x):end))
W przeciwieństwie do innych bardziej eleganckich rozwiązań, wykonanie operacji dzielenia przez zero w MATLAB-ie nie spowoduje błędu, a raczej Inf. To rozwiązanie znajduje długość ciągu według nnz. Wytworzony ciąg znaków umożliwia indeksowanie od początku ciągu do końca, który jest w zasadzie kopią ciągu. Ważne jest jednak to, że początek miejsca dostępu do ciągu jest tworzony przez sprawdzenie, czy dane wejściowe są równe 'google'. Jeśli tak nie jest, daje to początkowy indeks 1, a my indeksujemy do łańcucha normalnie ... ponieważ MATLAB rozpoczyna indeksowanie od 1. Jeśli jest równy, wygenerowany indeks wynosi 0, a MATLAB zgłosi błąd indeksowania stwierdzający, że indeks musi być dodatnią liczbą całkowitą. Statysta+ma zapewnić, że wynik kontroli równości jest liczbowy, a nie logiczny / logical. Pominięcie +spowoduje wygenerowanie ostrzeżenia, ale ponieważ specyfikacja tego wyzwania nie zezwala na ostrzeżenia, +jest wymagana ... w ten sposób uzupełniając kod.
Przykładowe zastosowania
>> 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))
Bardziej zabawna wersja, 83 77 76 74 72 bajtów
Dzięki Tomowi Carpenterowi za zgolenie 1 bajta!
Dzięki Stewie Griffin za zgolenie 2 bajtów!
@(x)eval('if strcmp(''google'',x),web([x ''.com/i'']);else nnz(x),end');
Powyższe nie jest oficjalnym oświadczeniem, ale jest czymś, co sprawia nieco więcej radości. Nadużywanie evalfunkcji anonimowych polega na tym, że sprawdza, czy ciąg wejściowy jest równy 'google'... a jeśli tak, otworzy się wbudowana przeglądarka internetowa MATLAB i wyświetli stronę błędu 404 Google próbującą uzyskać dostęp do podstrona zlokalizowana, ikiedy to nie istnieje. Jeśli nie, wyświetlamy długość łańcucha normalnie.
Przykładowe zastosowania
>> f=@(x)eval('if strcmp(''google'',x),web([x ''.com/i'']);else nnz(x),end'); %// Declare anonymous function
>> f('bing')
ans =
4
>> f('google')
>>
Ostatnie użycie połączenia 'google'daje nam ten ekran:
