プログラミングのお題スレ Part22 (858レス)
上下前次1-新
抽出解除 レス栞
156(10): デフォルトの名無しさん [sage] 2023/11/25(土) 20:07:06.40 ID:zpqT0hBE(1) AAS
お題:ランダムに1から9999までの整数を得た時、何回で全種類出揃うか確認せよ
擬似乱数列生成法については指定しないものとする
ruby
外部リンク:ideone.com
require 'set'
r = 1..9999
c = r.to_a.fill(0)
s = r.to_set
while !s.empty?
n = rand(r)
c[n - r.first] += 1
s.delete n
end
p c.sum
↓
84736
157(1): デフォルトの名無しさん [] 2023/11/25(土) 22:17:37.68 ID:Al0Rw+0l(1) AAS
>>156
R
外部リンク:ideone.com
159: デフォルトの名無しさん [] 2023/11/26(日) 10:50:43.54 ID:d/KzVdDP(1) AAS
>>156
設定があいまいなんだが
shuffleとかselectとかchoice系なら
高々9999回で必ず全部出る
160: デフォルトの名無しさん [] 2023/11/26(日) 11:41:26.07 ID:1iIVw+fD(1) AAS
>>156
Java
外部リンク:paiza.io
162(1): デフォルトの名無しさん [] 2023/11/26(日) 13:43:11.68 ID:4uIV+oN2(1) AAS
>>156 lisp
外部リンク:ideone.com
165: 17 [] 2023/11/27(月) 10:35:37.58 ID:VB+FhCy9(2/3) AAS
>>156
Kotlin
外部リンク:paiza.io
こんなので良いのか?やっぱ Set とか使わずにやった方が良いかな?
166: デフォルトの名無しさん [sage] 2023/11/27(月) 12:57:15.00 ID:lzpjbGZv(1) AAS
>>156 Ruby
>>156 の例が個別の出現回数をカウントしていたのでそれに合わせた
c = [0] * 9999
9999.times {
redo unless ( c[ rand(9999) ] += 1 ) == 1
}
p c.sum
167: 17 [] 2023/11/27(月) 13:09:30.74 ID:VB+FhCy9(3/3) AAS
>>156
また Kotlin
外部リンク:paiza.io
今度は add ではなく remove でやるようにした。
これでその Ruby の例に近くはなるがカウントする方法は前と同じで個別にはやってない。
168: デフォルトの名無しさん [] 2023/11/27(月) 18:30:50.07 ID:O6HTjvgJ(1) AAS
>>156
Perl
perl -E 'for ($r = 9999; $n < $r; $_++) { $h{int(rand($r)) + 1} ||= ++$n }; say'
79596
169: 156 [sage] 2023/11/27(月) 20:35:49.92 ID:VuTnBSK2(1) AAS
>>156 c
外部リンク:ideone.com
・lispのひとの(>>162)をパク…参考にしました
・乱数生成部分は 外部リンク[html]:c-faq.com からコピペしました
int main() {
int a[9999] = {0}, size = sizeof a / sizeof *a, sum, min, max, r, i, j, k;
srand(time(0));
#define randi(size) ((int)((double)rand() / ((double)RAND_MAX + 1) * (size)))
for (r = size; 0 < r; ) if (!a[randi(size)]++) r--;
for (sum = min = max = a[0], i = 1; i < size; i++) {
sum += a[i];
min = min < a[i] ? min : a[i];
max = a[i] < max ? max : a[i];
}
printf("%d\n%f\n[%d, %d]\n", sum, (double)sum / size, min, max);
for (i = min; i <= max; i++) {
for (k = j = 0; j < size; j++) if (i == a[j]) k++;
printf("%d\t%d\n", i, k);
}
return 0;
}
170: 17 [] 2023/11/28(火) 15:35:44.30 ID:cIauX08C(1) AAS
>>156
今度はC言語
外部リンク:paiza.io
1~9999ではなく実際には0~9998でやっているが、表示する必要もないし一々1足したり後で引いたりも馬鹿らしいのでそのままにした。
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.043s