ビンゴの結果を整形表示
Posted feedbacks - Erlang
formatでの整数指定がBなのに気がつかず、
ちょっと悩みました。
実数指定はC言語と同じくfなのに…。
1> c(show_bingo).
{ok,show_bingo}
2> show_bingo:bingo(30).
1 2 3 4 5 6 7 8 9 10
23 19 12 14 2 13 29 7 1 26
11 12 13 14 15 16 17 18 19 20
4 5 24 20 16 8 22 30 3 17
21 22 23 24 25 26 27 28 29 30
6 9 18 25 15 21 28 11 27 10
ok
3> show_bingo:bingo(35).
1 2 3 4 5 6 7 8 9 10
5 2 21 29 10 33 4 7 20 6
11 12 13 14 15 16 17 18 19 20
34 30 3 16 24 22 23 12 18 14
21 22 23 24 25 26 27 28 29 30
17 28 9 15 26 13 11 8 27 1
31 32 33 34 35
25 35 32 19 31
ok
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 30 31 32 33 | -module(show_bingo).
-export([bingo/1]).
show_line([X | []], Size) -> io:format("~" ++ Size ++ "B~n", [X]);
show_line([X | XS], Size) ->
io:format("~" ++ Size ++ "B ", [X]),
show_line(XS, Size).
column_size(Num) ->
Max = length(lists:last(io_lib:format("~B", [Num]))),
lists:last(io_lib:format("~B", [Max])).
bingo_sub(Num) -> bingo_sub(lists:seq(1, Num), Num * Num).
bingo_sub(List, 0) -> List;
bingo_sub(List, Num) ->
R = lists:nth(random:uniform(length(List)), List),
bingo_sub([R] ++ [X || X <- List, X =/= R], Num - 1).
bingo(Num) -> bingo(bingo_sub(Num), lists:seq(1, Num), column_size(Num)).
bingo([], _, _) -> true;
bingo(Rnd, Seq, Size) ->
if
length(Rnd) > 10 ->
show_line(lists:sublist(Seq, 10), Size),
show_line(lists:sublist(Rnd, 10), Size),
io:nl(),
bingo(lists:nthtail(10, Rnd), lists:nthtail(10, Seq), Size);
true ->
show_line(Seq, Size),
show_line(Rnd, Size)
end.
|



raynstard
#3403()
Rating1/1=1.00
「重複無し乱数」で作ったbingo関数の結果を下のように「何番目の乱数か」とセットにして10個ずつ折り返して表示するコードを書いてください。
[ reply ]