数値配列のシャッフル
- このフォーラムに新規トピックを投稿できます
- このフォーラムではゲスト投稿が許可されています
4件表示
(全4件)
すべてのコメント一覧へ
投稿ツリー




数値配列のシャッフル
msg# 1
Donut
uint max;
uint[] values;
このような配列に、0~maxまでの値が重複なく存在しています。
ちなみに、初期化時には[0,1,2,3,4,...max]という感じで、規則正しく並んでいます。
この配列の中身を、なるべく偏りないようにかき混ぜるというか、シャッフルしたいのですが、どのように実現すればよいのか分かりません。
よい方法ご存じでしたらお助けくださいまし
よろしくお願い致します。
uint[] values;
このような配列に、0~maxまでの値が重複なく存在しています。
ちなみに、初期化時には[0,1,2,3,4,...max]という感じで、規則正しく並んでいます。
この配列の中身を、なるべく偏りないようにかき混ぜるというか、シャッフルしたいのですが、どのように実現すればよいのか分かりません。
よい方法ご存じでしたらお助けくださいまし
よろしくお願い致します。
投票数:7
平均点:5.71
返信する
SHOO
投稿数: 658

これでいかがでしょう
#code(d){{{
import std.stdio, std.random, std.algorithm;
T[] shuffleInPlace(T)(T[] values)
{
foreach (i; 0..values.length)
{
values[i].swap(values[uniform(0, values.length)]);
}
return values;
}
void main()
{
uint max = 100;
uint[] values;
foreach (i; 0..max+1)
{
values ~= i;
}
writeln(values.shuffleInPlace());
}
}}}
(Range対応は諦めた…)
#code(d){{{
import std.stdio, std.random, std.algorithm;
T[] shuffleInPlace(T)(T[] values)
{
foreach (i; 0..values.length)
{
values[i].swap(values[uniform(0, values.length)]);
}
return values;
}
void main()
{
uint max = 100;
uint[] values;
foreach (i; 0..max+1)
{
values ~= i;
}
writeln(values.shuffleInPlace());
}
}}}
(Range対応は諦めた…)
投票数:9
平均点:5.56
返信する
Re: 数値配列のシャッフル
msg# 1.2
ゲスト
import std.stdio;
import std.random;
void main() {
auto a = [0, 1, 2, 3, 4];
randomShuffle(a);
writeln(a);
}
import std.random;
void main() {
auto a = [0, 1, 2, 3, 4];
randomShuffle(a);
writeln(a);
}
投票数:8
平均点:5.00
返信する
Re: 数値配列のシャッフル
msg# 1.3
Donut
SHOOさん、ゲストさん
返信ありがとうございます。
お陰様で、どうにか解決できそうです。
ありがとうございました。
返信ありがとうございます。
お陰様で、どうにか解決できそうです。
ありがとうございました。
投票数:6
平均点:3.33
返信する
4件表示
(全0件)
すべてのコメント一覧へ