// مولد شبه عشوائي ببذرة: البذرة نفسها تعطي التسلسل نفسه.
استورد std.io.println;
استورد std.text.number;
استورد std.text.transform;
استورد std.random.prng;
استورد std.text.compare;
عرف ارم_النرد(البذرة: طبيعي, العدد: طبيعي): نص {
دع المولد: متغير مولد_عشوائي = أنشئ_مولد_عشوائي(البذرة);
دع الرميات: متغير متجه نص = [];
دع ف: متغير طبيعي = 0;
طالما (ف < العدد) {
طابق عشوائي_بين(&متغير المولد, 1, 7) مع
| اختياري.موجود(الوجه) -> { ألحق(الرميات, طبيعي_إلى_نص(الوجه)); }
| اختياري.لا_شيء -> { };
ف := ف + 1;
}
دع المسافة: نص = " ";
أرجع صل_النصوص(&الرميات, &المسافة);
}
عرف الرئيسية(): عدد {
دع الأول: نص = ارم_النرد(2026, 8);
دع مرة_أخرى: نص = ارم_النرد(2026, 8);
اطبع_سطر(استنسخ(&الأول));
إذا (نصان_متساويان(&الأول, &مرة_أخرى)) { اطبع_سطر("البذرة نفسها تعطي الرميات نفسها"); };
أرجع 0;
}// A seeded pseudo-random generator: the same seed gives the same sequence.
import std.io.println;
import std.text.number;
import std.text.transform;
import std.random.prng;
import std.text.compare;
def roll_dice(seed: uint, count: uint): string {
let generator: mutable prng = new_prng(seed);
let rolls: mutable vector string = [];
let i: mutable uint = 0;
while (i < count) {
match prng_range(&mutable generator, 1, 7) with
| option.some(face) -> { append(rolls, uint_to_text(face)); }
| option.none -> { };
i := i + 1;
}
let space: string = " ";
return join(&rolls, &space);
}
def main(): int {
let first: string = roll_dice(2026, 8);
let again: string = roll_dice(2026, 8);
println(clone(&first));
if (texts_equal(&first, &again)) { println("same seed, same rolls"); };
return 0;
}
التشغيل
بالمفسر، دون ترجمة:
./build/sultanc run examples/ar/random/seeded_random.snأو ترجمه إلى ملف تنفيذي:
./build/sultanc examples/ar/random/seeded_random.sn -o build/example && ./build/example