Skip to content

Instantly share code, notes, and snippets.

@chuckha
Created September 21, 2012 14:07
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save chuckha/3761654 to your computer and use it in GitHub Desktop.
Save chuckha/3761654 to your computer and use it in GitHub Desktop.
Erlang fizzbuzz
-module(fizzbuzz).
-export([fizzbuzz/1]).
-define(MOD_THREE, "fizz").
-define(MOD_FIVE, "buzz").
% Helper function to map fizzbuzz across a sequence of numbers
fizzbuzz(To) ->
lists:map(fun nt/1, lists:seq(1, To)).
% initiate the number transform for a Number
nt(Number) ->
number_transform(Number, []).
% transform the number to either nothing or 'fizz' or 'buzz' or 'fizzbuzz'
%% NOTE: This style of fizzbuzz allows arbitrary matching
%% e.g. add bazz for number where Number rem 7 == 0
number_transform(0, Words) ->
lists:flatten(lists:reverse(Words));
number_transform(Number, Words) when Number rem 3 == 0 ->
case lists:member(?MOD_THREE, Words) of
true -> number_transform(round(Number / 3), Words);
false -> number_transform(round(Number / 3), [?MOD_THREE|Words])
end;
number_transform(Number, Words) when Number rem 5 == 0 ->
case lists:member(?MOD_FIVE, Words) of
true -> number_transform(round(Number / 5), Words);
false -> number_transform(round(Number / 5), [?MOD_FIVE|Words])
end;
number_transform(Number, []) ->
Number;
number_transform(Number, Words) ->
Number,
lists:flatten(lists:reverse(Words)).
@chuckha
Copy link
Author

chuckha commented Sep 29, 2012

my newest version of fizzbuzz in erlang!

@singingwolfboy
Copy link

I can almost read that! Almost.

Oh, erlang. I want to love you, but your syntax gives me nightmares.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment