Skip to content

ushibutatory/fizzbuzz

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

FizzBuzz & NabeAtsu

概要

FizzBuzz を実装しました。

ただ、それだけだとつまらないので、その派生である世界のナベアツ氏の「3 の倍数だけアホになる」を実装しました。

  • 3 の倍数または 3 が付く → アホになる
  • 5 の倍数 → 犬になる
  • 3 の倍数または 3 が付く、かつ 5 の倍数の時 → アホな犬になる

30 に入った時の怒涛のたたみかけが好きです。

Web 版

https://fizzbuzz.ushibutatory.net/

  • API
    • .NET
    • AWS Lambda + API Gateway
  • UI
    • Next.js
    • Vercel
    • Route53

コンソールアプリ版

実行例

# NabeAtsu.App.exe run -?

Usage: NabeAtsu.App run [arguments] [options]

Arguments:
  start  開始する数値
  count  数える数

Options:
  -?|-h|--help  Show help information
# NabeAtsu.App.exe run 1 15
1
2
さぁん
4
わん!U^ェ^U
ろぉく
7
8
きゅう
わん!U^ェ^U
11
じゅうにぃ
じゅうさぁん
14
わおーーーーーーーん!U゜ェ。U
# NabeAtsu.App.exe run 1000000001 15
1000000001
じゅうおくにぃ
じゅうおくさぁん
1000000004
わおーーーーーーーん!U゜ェ。U
1000000006
1000000007
じゅうおくはぁち
1000000009
わん!U^ェ^U
じゅうおくじゅういち
1000000012
じゅうおくじゅうさぁん
じゅうおくじゅうよぉん
わん!U^ェ^U

工夫したこと、苦労したこと

「条件(例:3 の倍数または 3 が付く)」と「状態(アホになる)」のセットをクラス化して拡張しやすい作りを目指した

  • 具体的には、GoF の State パターンを流用しました。
    • 例: 「アホ State」「犬 State」など
  • 「アホな犬 State」のような、複合条件をどう定義するかに悩みました。
    • 内部的に「アホ State」「犬 State」を保持し、すべてに該当するかどうかでチェックするようにしました。
    • このへんはもうちょっと改善の余地がありそうです。

アホ出力(=かな変換)における、桁数による発音のパターンの実装に苦労した

  • 例: 6。同じ「6」でも、位によって発音が異なる。
    • 60 → ろくじゅう
    • 600 → ろっぴゃく
  • 例: 100。同じ「100」でも、位の数値によって発音が異なる。
    • 100 → ひゃく
    • 300 → さんびゃく
    • 600 → ろっぴゃく
  • 実装としては、ひたすらパターンマッチで対応しています。

所感

真面目に作ろうとすると個人によって色んな設計案・実装案が出てくると思います。なので、新人研修の課題等にすると面白そうだと感じました。

参考