MTのテンプレートタグでFizzBuzz。
公開日 : 2008-01-11 23:49:11
1から100までの数をプリントするプログラムを書け。ただし3の倍数のときは数の代わりに「Fizz」と、5の倍数のときは「Buzz」とプリントし、3と5両方の倍数の場合には「FizzBuzz」とプリントすること。
ということで、例えばこんな感じとか。
perl -e 'for(1..100){print$_ if$_%3&&$_%5;print"Fizz"unless$_%3;print"Buzz"unless$_%5;print"\n"}'
で、これをMT4のテンプレートタグだけで出力してみようということで。意味があるのかどうかわからんが。
* 見やすさのためにインデントや改行入れてます。
<mt:setvar name="count_3" value="1">
<mt:setvar name="count_5" value="1">
<MTEntries lastn="100">
<mt:setvar name="out" value="0">
<mt:if name="count_3" eq="3">
<mt:setvar name="count_3" value="1">
Fizz
<mt:setvar name="out" value="1">
<mt:else>
<mt:if name="count_3" eq="2">
<mt:setvar name="count_3" value="3">
<mt:else>
<mt:if name="count_3" eq="1">
<mt:setvar name="count_3" value="2">
</mt:if>
</mt:else>
</mt:if>
</mt:else>
</mt:if>
<mt:if name="count_5" eq="5">
<mt:setvar name="count_5" value="1">
Buzz
<mt:setvar name="out" value="1">
<mt:else>
<mt:if name="count_5" eq="4">
<mt:setvar name="count_5" value="5">
<mt:else>
<mt:if name="count_5" eq="3">
<mt:setvar name="count_5" value="4">
<mt:else>
<mt:if name="count_5" eq="2">
<mt:setvar name="count_5" value="3">
<mt:else>
<mt:if name="count_5" eq="1">
<mt:setvar name="count_5" value="2">
</mt:if>
</mt:else>
</mt:if>
</mt:else>
</mt:if>
</mt:else>
</mt:if>
</mt:else>
</mt:if>
<mt:if name="out" eq="0">
<mt:getvar name="__counter__">
</mt:if>
</MTEntries>
さて問題(?)。MT4.1/MTOSだともっとスマートにプログラミングチックな書き方ができると思います。
* 流行んないかな?
追記: 4.1/MTOSで書いてみた。シンプルに書けます。