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 eval
funkcji 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, i
kiedy 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: