fizzbuzzっぽいの書いてみました。
今回書いたfizzbuzzのルール。
・3で割り切れる。
・5で割り切れる。
・3と5両方で割り切れる。
・数のリストを受け取りfizzbuzzした結果リストを返す。
ーコードーーーーーーーーーーーーーーーーーーーーーーー
fizzbuzz(L) -> fizzbuzz(L, []).
fizzbuzz([H|T], Result) ->
case {H rem 3, H rem 5} of
{0,0} -> fizzbuzz(T, [fizzbuzz|Result]);
{0,_} -> fizzbuzz(T, [fizz|Result]);
{_,0} -> fizzbuzz(T, [buzz|Result]);
{_,_} -> fizzbuzz(T, [H|Result])
end;
fizzbuzz([], Result) -> lists:reverse(Result).
ー実行結果ーーーーーーーーーーーーーーーーーーーーーー
1> c(test).
{ok,test}
2> test:fizzbuzz([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]).
[1,2,fizz,4,buzz,fizz,7,8,fizz,buzz,11,fizz,13,14,fizzbuzz,16]
ーーーーーーーーーーーーーーーーーーーーーーーーーーー
こんな簡単な処理を書くのにも数時間かかった・・。
ちゃんと実践せずに本を読んでるだけじゃだめってことですね。
早く並列分散をガシガシ書きたい!
こんな感じで、今回は以上です。
追記:
出力バージョンも作ってみました。
ーコードーーーーーーーーーーーーーーーーー
%% 受け取ったリストに対して以下の処理を行う
%% 3で割り切れる場合は「Hello」を出力。
%% 5で割り切れる場合は「World」を出力。
%% 3,5どちらでも割り切れる場合は「Hello World」を出力。
%% すべてのリスト要素を処理したら「End」を出力。
fizzbuzz([H|T]) ->
case {H rem 3, H rem 5} of
{0,0} -> io:format("~p:Hello World~n", [H]),fizzbuzz(T);
{0,_} -> io:format("~p:Hello~n", [H]),fizzbuzz(T);
{_,0} -> io:format("~p:World~n", [H]),fizzbuzz(T);
{_,_} -> io:format("~p~n", [H]),fizzbuzz(T)
end;
fizzbuzz([]) -> io:format("End~n").
追記:
出力バージョンも作ってみました。
ーコードーーーーーーーーーーーーーーーーー
%% 受け取ったリストに対して以下の処理を行う
%% 3で割り切れる場合は「Hello」を出力。
%% 5で割り切れる場合は「World」を出力。
%% 3,5どちらでも割り切れる場合は「Hello World」を出力。
%% すべてのリスト要素を処理したら「End」を出力。
fizzbuzz([H|T]) ->
case {H rem 3, H rem 5} of
{0,0} -> io:format("~p:Hello World~n", [H]),fizzbuzz(T);
{0,_} -> io:format("~p:Hello~n", [H]),fizzbuzz(T);
{_,0} -> io:format("~p:World~n", [H]),fizzbuzz(T);
{_,_} -> io:format("~p~n", [H]),fizzbuzz(T)
end;
fizzbuzz([]) -> io:format("End~n").
% 引数の数値nから1~nのリスト作成
make_list(MaxNum) -> make_list(1, MaxNum, []).
make_list(MinNum,MaxNum) -> make_list(MinNum, MaxNum, []).
make_list(I, Max, List) when Max >= I-> make_list(I + 1, Max, [I|List]);
make_list(I, Max, List) when Max =< I -> lists:reverse(List).
ー実行結果ーーーーーーーーーーーーーーーーーーーーーー
1> c(hello).
{ok,hello}
2> L = hello:make_list(30).
[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,
23,24,25,26,27,28,29|...]
3> hello:fizzbuzz(L).
1
2
3:Hello
4
5:World
6:Hello
7
8
9:Hello
10:World
11
12:Hello
13
14
15:Hello World
16
17
18:Hello
19
20:World
21:Hello
22
23
24:Hello
25:World
26
27:Hello
28
29
30:Hello World
End
ok
4>
2> L = hello:make_list(30).
[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,
23,24,25,26,27,28,29|...]
3> hello:fizzbuzz(L).
1
2
3:Hello
4
5:World
6:Hello
7
8
9:Hello
10:World
11
12:Hello
13
14
15:Hello World
16
17
18:Hello
19
20:World
21:Hello
22
23
24:Hello
25:World
26
27:Hello
28
29
30:Hello World
End
ok
4>
ーーーーーーーーーーーーーーーーーーーーーーーーーーー
「;」と「,」の使いどころがまだ理解できてないため、毎回コンパイラに怒られる。
あと、 io:formatとかもうちょいドキュメント(Erlang -- io)読まなきゃなぁ。
追記は以上です。
0 件のコメント:
コメントを投稿