MATLABでFizzBuzzを書いてみた

TwitterFizzBuzzが少し話題にあがっていたので,
MATLABで書いてみました.

何も考えず書いてみた

とりあえず,普通に書くとこんな感じ.

for i = 1:15
    if mod(i,15) == 0
        fprintf('FizzBuzz,');
    elseif mod(i,3) == 0
        fprintf('Fizz,');
    elseif mod(i,5) == 0
        fprintf('Buzz,');
    else
        fprintf('%d,',i);
    end
end
fprintf('\n');

出力

1,2,Fizz,4,Buzz,Fizz,7,8,Fizz,Buzz,11,Fizz,13,14,FizzBuzz,

MATLABらしいコード

forを使っててMATLABらしさが全く出ていないので,
MATLABらしいコードを書いて見ました.

n = 15;
flag = [mod(1:n,3)==0; mod(1:n,5)==0; mod(1:n,3)+mod(1:n,5)~=0];
str(1,flag(1,:)) = {'Fizz'};
str(2,flag(2,:)) = {'Buzz'};
str(3,flag(3,:)) = arrayfun(@num2str, find(flag(3,:)), 'UniformOutput', false);
str(4,:) = {','};
disp(strcat(str{:}));

出力

1,2,Fizz,4,Buzz,Fizz,7,8,Fizz,Buzz,11,Fizz,13,14,FizzBuzz,

これでこそMATLABらしいよね.

もう少しスマートに書ける気がするけど難しいなー.