初投稿といえばFizzBuzz! 渾身の縛りFizzBuzzを投稿するぜ

公開日:2018-10-14
最終更新:2018-10-24

初投稿といえばFizzBuzz! というわけで渾身の縛りFizzBuzzを投稿します。 だいぶ昔に書いたコードなので今ならもっとかっこいいの書けるかもしれません。

縛り内容

  • 実行文(一行)、defmodule文以外ワンライナーのdef文
  • 剰余禁止

コード

defmodule FizzBuzz do

  def fizzBuzz(num), do: _notFB(_fizz(_oneDigit(Integer.to_charlist(num))) <> _buzz(_getLastDigit(Integer.to_charlist(num))) , num)

  def _sumDigit([head | []]), do: head - 48
  def _sumDigit([head | tail]), do: head - 48 + _sumDigit(tail)

  def _oneDigit([head | []]), do: head - 48
  def _oneDigit(list), do: _oneDigit(Integer.to_charlist(_sumDigit(list)))

  def _fizz(3), do: "Fizz"
  def _fizz(6), do: "Fizz"
  def _fizz(9), do: "Fizz"
  def _fizz(_), do: ""

  def _getLastDigit([head | []]), do: head - 48
  def _getLastDigit([_ | tail]), do: _getLastDigit(tail)

  def _buzz(5), do: "buzz"
  def _buzz(0), do: "buzz"
  def _buzz(_), do: ""

  def _notFB("", num), do: Integer.to_charlist(num)
  def _notFB(some, _), do: some
end

Enum.map(1..100, fn(x) -> IO.puts FizzBuzz.fizzBuzz(x) end)

解説

Elixirで書きました。 3の倍数の判定には、各桁の数字の和が3の倍数になるあれ、5の倍数の判定は単純に最後の桁を見ています。

記事が少しでもいいなと思ったらクラップを送ってみよう!
18
+1
@aimofの技術ブログ

よく一緒に読まれている記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう
目次をみる

技術ブログをはじめよう

Qrunch(クランチ)は、ITエンジニアリングに携わる全ての人のための技術ブログプラットフォームです。

技術ブログを開設する

Qrunchでアウトプットをはじめよう

Qrunch(クランチ)は、ITエンジニアリングに携わる全ての人のための技術ブログプラットフォームです。

Markdownで書ける

ログ機能でアウトプットを加速

デザインのカスタマイズが可能

技術ブログ開設

ここから先はアカウント(ブログ)開設が必要です

英数字4文字以上
.qrunch.io
英数字6文字以上
ログインする