トップ画像
【クソ記事】TypstでFizzBuzzを書く

執筆者: ごま

最終更新: 2025/04/26

【クソ記事】TypstでFizzBuzzを書く

はじめに

おひさしぶりです、ごまです。 この記事ではRust製の組版システムであるTypstを使ってFizzBuzzを実装してみます。 Typstって?という方は以前私が書いたこちらの記事を読んでいただけると概略がつかめるかもしれません。

FizzBuzzとは

FizzBuzzとは、プログラミングの基礎的な練習問題の1つで、次のようなルールに従って数列を出力する課題です。

【ルール】 1から順に整数を出力していくが、

  • 3の倍数のときは数の代わりに "Fi zz" を出力

  • 5の倍数のときは数の代わりに "Buzz" を出力

  • 3と5の両方の倍数(=15の倍数)のときは "FizzBuzz" を出力

  • それ以外の数はそのまま出力

今回はこのような挙動をTypstで実装してみます。

環境

今回はtypst 0.13.1を使用します。

使用する機能

今回主に使用するTypstの機能は

  • for
  • 条件分岐
  • calcモジュール

です。

for文

Typstではfor文を用いて配列や文字などを反復処理することができます。

#for i in (1, 2, 3, 4, 5) {
  [#i ]
}

このようにfor文を使用すると次のように表示されます。見やすさのために若干スペースを空けています。

for文の記法

数字で構成される配列を準備するには、次のようなrange関数を使用することもできます。

#range(5)\
#range(1, 7)\
#range(2, step: 3, 20)

このようにすると、次のように表示されます。 for文の記法 range関数は、指定した範囲の整数を生成するための便利な関数です。ほとんどPythonなどと同じような使い方ができるので、特に難しいことはないと思います。

条件分岐

Typstではif文を用いて条件分岐を行うことができます。

#let x = 3
#let y = 5
#if x == y {
  "xとyは等しい"
} else if x < y {
  "xはyより小さい"
} else {
  "xはyより大きい"
}

このようにすると、次のように表示されます。 条件分岐の記法

こちらもクセのない記法なのでかなり書きやすい印象です。

calcモジュール

Typstではcalcモジュールを用いて数値の計算と処理を行うことができます。 絶対値や平方根などはもちろん、逆三角関数のような関数の計算までできるようですが、ここでは除算における余りを求めるrem関数を使用します。rem(x,y)の形で使用すると、xyで割った余り(符号はxに従う)を返します。

#let x = 10
#let y = 3
#let z = calc.rem(x, y)

xをyで割った余りは#z です。

このようにすると、次のように表示されます。 calcモジュールの記法

これとif文を組み合わせるとxyで割り切れるかどうかを判定することができます。

#let x = 10
#let y = 3
#if calc.rem(x, y) == 0 {
  "xはyで割り切れる"
} else {
  "xはyで割り切れない"
}

このようにすると、次のように表示されます。 calcモジュールの記法

これらの機能を組み合わせてFizzBuzzを実装していきます。

FizzBuzzの実装

#for i in range(1, 101) {
  if ((calc.rem(i, 3) == 0) and (calc.rem(i, 5) == 0 )){
    [FizzBuzz#h(1em)]
  } else if calc.rem(i, 3) == 0 {
    [Fizz#h(1em)]
  } else if calc.rem(i, 5) == 0 {
    [Buzz#h(1em)]  
  } else {
    [#i#h(1em)]
  }
}

このようにすると、次のように表示されます。

FizzBuzzの実装

これだけです。簡単ですね。

Q. えっ.......それだけ?

A. これだけです。

この記事がクソ記事である所以がこれです

おわりに

組版システムでFizzBuzzを実装するということでもっと時間がかかるかと思いきや、Typst側の機能が強力だったためほとんど一瞬で終わってしまいました...。何か誤りなどがあれば教えていただけると幸いです。 また、今回作成したコードはGitHubのリポジトリに置いてあるので、興味のある方はぜひご覧ください。

取得に失敗しました

2022年度 入部

GitHub