アルファサード株式会社 代表取締役 野田 純生のブログ


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で書いてみた。シンプルに書けます。

カテゴリ


このブログを書いている人
野田純生の写真
野田 純生 (のだ すみお)

大阪府出身。ウェブアクセシビリティエバンジェリスト。 アルファサード株式会社の代表取締役社長であり、現役のプログラマ。経営理念は「テクノロジーによって顧客とパートナーに寄り添い、ウェブを良くする」。 プロフィール詳細へ