MATLAB, 63 41 40 38 36 byte
Cảm ơn Tom Carpenter đã cạo sạch 1 byte!
Cảm ơn Stewie Griffin đã cạo sạch 2 byte!
@(x)nnz(x(+~strcmp('google',x):end))
Không giống như các giải pháp thanh lịch khác, thực hiện phép chia bằng phép toán zero trong MATLAB sẽ không gây ra lỗi mà thay vào đó Inf
. Giải pháp này tìm độ dài của chuỗi bằng nnz
. Chuỗi được tạo ra theo cách mà bạn lập chỉ mục từ đầu chuỗi đến cuối, về cơ bản là một bản sao của chuỗi. Tuy nhiên, điều quan trọng là sự bắt đầu của nơi truy cập chuỗi được tạo ra bằng cách kiểm tra xem đầu vào có bằng hay không 'google'
. Nếu không, điều này tạo ra chỉ mục bắt đầu là 1 và chúng tôi lập chỉ mục vào chuỗi một cách bình thường ... vì MATLAB bắt đầu lập chỉ mục ở mức 1. Nếu bằng nhau, chỉ mục được tạo là 0 và MATLAB sẽ đưa ra lỗi lập chỉ mục cho biết rằng chỉ số cần phải là một số nguyên dương. Thêm+
là để đảm bảo rằng đầu ra của kiểm tra đẳng thức là số chứ không phải Boolean / logical
. Việc bỏ qua +
sẽ tạo ra một cảnh báo, nhưng vì thông số kỹ thuật của thử thách này không cho phép cảnh báo, nên +
bắt buộc ... do đó hoàn tất mã.
Ví dụ sử dụng
>> 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))
Một phiên bản thú vị hơn, 83 77 76 74 72 byte
Cảm ơn Tom Carpenter đã cạo sạch 1 byte!
Cảm ơn Stewie Griffin đã cạo sạch 2 byte!
@(x)eval('if strcmp(''google'',x),web([x ''.com/i'']);else nnz(x),end');
Trên đây không phải là một đệ trình chính thức, nhưng đó là một cái gì đó thú vị hơn để chạy. Lạm dụng eval
trong các hàm ẩn danh, mã mà nó kiểm tra để xem chuỗi đầu vào có bằng 'google'
... và nếu có, điều này sẽ mở ra trình duyệt web tích hợp của MATLAB và hiển thị trang lỗi 404 của Google đang cố truy cập vào trang con nằm ở i
đó khi không tồn tại. Nếu không, chúng tôi hiển thị độ dài của chuỗi bình thường.
Ví dụ sử dụng
>> f=@(x)eval('if strcmp(''google'',x),web([x ''.com/i'']);else nnz(x),end'); %// Declare anonymous function
>> f('bing')
ans =
4
>> f('google')
>>
Cuộc gọi cuối cùng sử dụng 'google'
cho chúng ta màn hình này: