C言語なら俺に聞け 143

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (ワッチョイ b375-rVGZ)
垢版 |
2017/10/27(金) 21:28:08.20ID:pAogLeJi0
C言語の話題のみ取り扱います C++の話題はC++スレへ
質問には最低限の情報(ソース/コンパイラ/OS)を付ける
数行で収まらないソースは以下を適当に使ってURLを晒す
https://paiza.io/
https://ideone.com/
http://codepad.org/

C11
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1570.pdf

C99
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf
http://kikakurui.com/x3/X3010-2003-01.html

C FAQ 日本語訳
http://www.kouno.jp/home/c_faq/

JPCERT C コーディングスタンダード
https://www.jpcert.or.jp/sc-rules/

前スレ
C言語なら俺に聞け 142
http://mevius.2ch.net/test/read.cgi/tech/1502364083/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
695デフォルトの名無しさん (ワッチョイ a66e-hJGX)
垢版 |
2017/12/04(月) 05:34:47.44ID:k2OIwnad0
ただ単にCが嫌いなだけだね
2017/12/04(月) 06:16:54.02ID:+uAdunIC0
Cはクラスがないせいで戻り値が使い物にならん
中でMallocして返すとすぐメモリリークする

文字列や配列を扱う関数は
第一引数と第二引数に結果格納用の配列と最大長を渡すというまだるっこしい作業をせんといかん
Cで言語を学ぶと悪いコーディングの癖がついてしまう
697デフォルトの名無しさん (ワッチョイ a66e-hJGX)
垢版 |
2017/12/04(月) 06:36:05.53ID:k2OIwnad0
>>696
こちらへどうぞ
https://mevius.5ch.net/test/read.cgi/tech/1427572389/
2017/12/04(月) 19:47:02.53ID:+uAdunIC0
そんなにばかなことをいっただろうか
699デフォルトの名無しさん (アウアウカー Sa55-iHXH)
垢版 |
2017/12/04(月) 19:55:28.93ID:vegQ3dVaa
馬鹿っぽさ満載
2017/12/04(月) 20:03:09.02ID:8HzNB2U5p
オブジェクトへのポインタを1つ追加するだけでリエントラントな作りになるだろうに。
701デフォルトの名無しさん (アウアウカー Sa55-iHXH)
垢版 |
2017/12/04(月) 20:15:20.01ID:vegQ3dVaa
構造体へのポインタでも使ってくれ
2017/12/04(月) 20:20:54.93ID:ESsPBxjD0
>>696
それがいい習慣というものです、配列(の先頭)と文字列長をセットで扱うのは基本中の基本です
win32api をみればわかりますが、一度目には自分が用意しなければならない領域の大きさについてお伺いをたててから、
二度目にやっと目的の情報を手に入れる、これは C ではセットですね

c++ で文字列型のような便利なアイテムを使っていたために、だんだん馬鹿になってきていたことに、最近ようやく気がつきました:−)
2017/12/04(月) 20:28:21.15ID:jfjVyC4z0
バッファの大きさを受けて範囲内で書き込む sprintf じゃなくて
sprintf のフォーマット処理した結果、こんだけの大きさが欲しいって答える関数はないのかな
2017/12/04(月) 20:33:29.89ID:ESsPBxjD0
>>703
そうそう、それほしいですね
705デフォルトの名無しさん (アウアウカー Sa55-iHXH)
垢版 |
2017/12/04(月) 20:43:45.92ID:vegQ3dVaa
>>703
snprintf
2017/12/04(月) 20:49:24.61ID:ESsPBxjD0
>>705
snprintf() は >>703 の希望をかなえてはくれないのでは?
2017/12/04(月) 20:50:25.96ID:jfjVyC4z0
>>705
snprintf は 渡した大きさで打ち切ることはするけど、完全に必要なサイズを返すっけ?
書き込んだ文字数だから打ち切った場合たかだか渡した大きさ-1 だと思うけど
2017/12/04(月) 21:02:20.28ID:jfjVyC4z0
>>707 自己レス
C99 から戻り値が完全な長さを答えてくれるみたい
なので len = snprintf(buf, 0, .... ); len+1 以上確保して snprintf(buf, len+1, .... );
これが出来るのか
2017/12/04(月) 21:07:28.32ID:ESsPBxjD0
おお、そうなのか
https://linuxjm.osdn.jp/html/LDP_man-pages/man3/printf.3.html
2017/12/04(月) 22:32:25.86ID:TOOi+5oW0
>>708
普通は、とりあえずやってみて戻り値判定したあと切り捨てられていたら大きめのバッファにreallocしてつかうんじゃないかな。
確保するメモリサイズは一定の方がいいと思うんだ。

まぁ、Cなら大抵の場合、サイズオーバーでエラー処理へとばす気もするけれど。。。。
711デフォルトの名無しさん (ワッチョイ 6d9f-HgL3)
垢版 |
2017/12/04(月) 22:35:03.23ID:iGjrIGoV0
asprintf() も良いよね。
GNUの拡張だけど。
712デフォルトの名無しさん (ブーイモ MM8e-cp23)
垢版 |
2017/12/05(火) 00:24:41.12ID:64NxbaBtM
a55h01e()もいいぞ
拡張するとアレだけど
713デフォルトの名無しさん (ワッチョイ 1e8a-mhkU)
垢版 |
2017/12/05(火) 01:57:36.13ID:hFLcfi/C0
>>694
頭悪そう
分割数に依存してO(n**2)で命名の手間が増える
O(n**2)は行かないかもしれないがO(n)よりは大
2017/12/05(火) 06:27:11.01ID:h9iE2Dgl0
>>708-709
manの「準拠」のところで、snprintf()の第2引数sizeに0を指定できる、
返り値を必要なバッファサイズを決めるのに使えると明記されてるね。
これは有難い。

>>712
エリートな人だなぁ。俺にはよく分からんけど…
男は度胸! 何でもためしてみる、か。
715デフォルトの名無しさん (アウアウカー Sa55-iHXH)
垢版 |
2017/12/05(火) 09:17:09.05ID:lXQHSkZJa
>>712のやつは多分中々みつからないと思うぞ。>>712のPCのディスクの中か心の中にしかないんじゃないか?w
716デフォルトの名無しさん (ワッチョイ a66e-hJGX)
垢版 |
2017/12/05(火) 10:03:46.62ID:5svgdXUG0
asshole
2017/12/05(火) 10:08:31.35ID:hd3ECn32d
>>712
ムカついたらその関数名いただくわ。
2017/12/05(火) 10:25:15.57ID:x6DQdw1l0
char aznable は、いつか、やるかも、しれない
2017/12/05(火) 19:06:50.63ID:h9iE2Dgl0
-able は「〜することができる」という意味を加える接尾語と解釈できるから
azn と略せる何か動詞っぽい操作を思いつけば char aznable; を
「合法的に」使うことができるね。

単なるフラグなら int なり bool なりを使え、と言われると弱いけど。
2017/12/05(火) 20:13:34.78ID:bbZMw2AU0
>>713
横だが
関数名が事実上のドキュメントになるんだよ
721デフォルトの名無しさん (ワッチョイ 1e8a-mhkU)
垢版 |
2017/12/05(火) 22:18:54.85ID:hFLcfi/C0
15行の関数量産したらfunc1, func2, ...となるのが目に見えている

途中の欠番で変更履歴の推測も可能
素晴らしいドキュメントだな
2017/12/05(火) 22:26:12.48ID:CCSnWp9D0
なるわけないだろ絶対ならない
723デフォルトの名無しさん (ワッチョイ b5b3-9GJZ)
垢版 |
2017/12/05(火) 22:46:50.50ID:oTa/T8dQ0
ファンクなあ。
アシッドテイストを入れてもう少しオサレな感じにすれば爆発的にヒットするだろうになあ。
2017/12/05(火) 23:16:38.70ID:KWhjoBwr0
>>721
私は馬鹿です、まで読んだ
2017/12/06(水) 00:22:59.42ID:6EAgLXyL0
関数名はプログラマがこう動いて欲しいという願望まで
2017/12/06(水) 00:44:05.84ID:2vt65plVM
func なんて関数名見かけたら fack に置き換えるわ
2017/12/06(水) 01:05:14.08ID:fTW9mDM3d
oh miso sperm
2017/12/06(水) 08:50:44.53ID:GNciMIPS0
変数名とか省略禁止なのにfunc
2017/12/06(水) 11:23:20.22ID:2AYHpw2Ha
もうkansuu()って関数名にしとけよ
2017/12/06(水) 11:49:40.40ID:vFG2ezd00
>>728
ドイツ語とか関数名変数名だけでコード9割埋まりそう
2017/12/06(水) 12:26:30.14ID:C/WFYzI6a
そう考えると世のプログラミング言語のベースが中国語だったら表意文字だしだいぶ可読性高そう
2017/12/06(水) 12:52:19.56ID:okTVVyb50
その昔日本語BASICってあった
2017/12/06(水) 13:38:02.28ID:VY+2C2cGp
日本語はむしろ同じ物を表す書き方が平仮名片仮名漢字と何通りもあるから面倒だろ。
2017/12/06(水) 14:11:49.30ID:UBdFOzE6a
表のように与えられた時各学年の人数と全校の人数をふ計算するプログラムを教えてください。
できれば今日中に。


1組 2組 3組 4組 5組
1年 33 35 34 32 36
2年 34 33 35 33 31
3年 31 32 36 30 35
2017/12/06(水) 17:00:52.31ID:WZX+cLKR0
入力させる文字の指定ってstrchrでOKです?
2017/12/06(水) 17:23:48.59ID:uR2+ZG62d
婦警さん?
2017/12/06(水) 17:35:06.56ID:dghGKPLV0
>>734
明日の朝、学校行く前に覗いてみ
2017/12/06(水) 17:36:10.79ID:mUQybk730
>>734 は学校の宿題か課題の代行をタダでやってくれ、みたいに見えるなぁ。
親切心で教えることが質問者のためになるか疑問ってこと。

元のデータはどういう形で与えられるのかな。
質問の内容から見て、学年数もクラス数も一定で
配列としてソースファイルに埋め込みで良さそうだけど。

学年数やクラス数まで実行時の入力によって可変、となると
かなり面倒な話になるね。
2017/12/06(水) 17:55:56.74ID:dghGKPLV0
安心して翌朝覗いてみたら何も上がってないという寸法さ
2017/12/06(水) 18:30:27.51ID:YX7yBjoZd
execve関数を使うためにclearenv()で環境変数を初期化すると手順にあるのだけど
この関数の影響範囲をどう調べればわかるか調べ方もしくは影響範囲が知りたいです
manページを見ても名前と値の組の環境変数を〜みたいな話しかなくて困ってます
2017/12/06(水) 18:48:00.75ID:8+NPe2ry0
マージャンの符計算かな
742デフォルトの名無しさん (アウアウカー Sa55-iHXH)
垢版 |
2017/12/06(水) 20:41:52.15ID:5GqDQnIfa
>>734
宿題用のスレなかったっけ?
C言語のはなかった?
743デフォルトの名無しさん (アウアウカー Sa55-iHXH)
垢版 |
2017/12/06(水) 20:42:56.94ID:5GqDQnIfa
>>735
君のやりたいことがよくわからない。
744デフォルトの名無しさん (アウアウカー Sa55-iHXH)
垢版 |
2017/12/06(水) 20:50:51.97ID:5GqDQnIfa
>>740
影響範囲?そりゃ環境変数使うプログラム全てだろう。特にPATH使うようなやつ(外部コマンドをフルパス使わずに動かす可能性のあるプログラム)は影響受けるよね。
その他、動かすコマンドによって影響は違うと思う。これから動かそうとしているコマンドがどういう環境変数を使うかに掛かっている。だからこうだと固定的に言うことができない。
2017/12/06(水) 21:47:43.97ID:9SICms2Nd
>>744
無知ですまんが
環境変数をクリアするってことは要はLD_LIBRARY_PATHに登録されてるものをすべて無にするってことなのだろうか
これは一時的なもの?それとも永続的なもの?

ここらを参考にsystem関数ではなくexecveを使う方針になったのだけど
むしろ改悪になってるんじゃないかとなってきている
https://www.jpcert.or.jp/sc-rules/c-env33-c.html
http://www.jpcert.or.jp/m/sc-rules/c-env03-c.html

下を読んでなんとなく何がリセットされるのかはわかってきたけども
それがどう影響を与えるのだろうかと
https://www.ipa.go.jp/security/awareness/vendor/programmingv2/contents/c703.html
2017/12/06(水) 21:52:07.31ID:9SICms2Nd
下記のように書いてあるけども
むしろ影響範囲でか過ぎるんじゃねぇか?ってのが困ってるところ
確かに改竄とかの対策にはなるとは思うんだけど
リセットしてしまったことによって使えなくなるものについてはどう担保するのかがわからない

このクリアが呼び出した関数内だけなのか、呼び出したプロセスやスレッドだけなのか、呼び出したら再起動までずっとなのか、呼び出したら再起動しても以降ずっとなのかと


(2) 環境変数のクリア
外部プログラムをコールする(exec(3))前に、環境変数をすべてクリアするとより安全になる。環境変数をクリアするには、clearenv(3) をコールすればよい。

clearenv(3) が無い環境では、以下のように extern char **environ 変数を直接クリアする。
environ = NULL;
※上記の方法で環境変数をクリアしても、system (3) による子プロセスの環境変数は、クリアされず再設定されたものになる。
2017/12/06(水) 22:02:02.99ID:uR2+ZG62d
婦警さんするなら、婦警の制服が必要。
748デフォルトの名無しさん (ワッチョイ 6d9f-nek4)
垢版 |
2017/12/06(水) 22:02:54.34ID:u7C0REjG0
>>745
一時的もなにもそれを実行したプロセスとそのプロセスからexecしたプロセスにしか影響しないよ。だからfork()後に子プロセスだけでやるなら親プロセスには影響しないしその他無関係なプロセスにも影響はない。
749デフォルトの名無しさん (ワッチョイ 6d9f-nek4)
垢版 |
2017/12/06(水) 22:05:07.83ID:u7C0REjG0
>>745
環境変数はシステム全体で一箇所に持っているものではなくプロセス単位で持ってるものだからね。そしてexecの時に引き継ぐ事もできるようになってるだけ。
2017/12/06(水) 22:31:14.96ID:9SICms2Nd
>>748
>>749
イケメンな回答ありがとう
それってどこを見たら分かるものなのだろうか
俺調べるのが苦手でどれがそのことを示してるのだろうか
その的確な回答をしてくれてとても分かりやすくてとても助かってるが俺も自身でわかるようになりたい
751デフォルトの名無しさん (ワッチョイ 6d9f-HgL3)
垢版 |
2017/12/06(水) 23:56:33.03ID:QVT4XBLu0
>>750
環境変数は大昔から使われているものでどのOSでも多分同じだ。
まずはここを見ると良い。
https://ja.wikipedia.org/wiki/%E7%92%B0%E5%A2%83%E5%A4%89%E6%95%B0
752デフォルトの名無しさん (ワッチョイ 17d3-vw7f)
垢版 |
2017/12/07(木) 00:29:29.78ID:X12IxieF0
初心者です
時間取得の関数で待ち時間を作るの方法は使わずに、
現在の処理の完了した後、次の処理に移らせるにはどのようにすればいいんですか?

現在の処理が始まった瞬間に次の処理に移ってしまいます


現在の処理とは、マウスポインタの操作です

お願いします
753デフォルトの名無しさん (ワッチョイ d79f-qmOZ)
垢版 |
2017/12/07(木) 00:53:41.38ID:9lSPChPb0
>>752
おそらくそれだけの説明では大半の人が答えられないと思う。(エスパーを除く)
2017/12/07(木) 01:27:41.37ID:07dplzZ20
マウスイベントの取得はOSの仕事
OSのAPIドキュメント見れ
2017/12/07(木) 07:52:13.51ID:6ZyfpAbkd
>>751
中身見てみたけどプロセスごとに環境変数が割り振られてるってどれが意味してるのだろうか
homeとかいろいろなものがあるのはわかったのだが....
2017/12/07(木) 08:07:08.94ID:W1nCZ1Cb0
>>755
「概要」の第3段落冒頭かな。
「環境変数は、各プロセスに付随するデータである」

この1文から「プロセスごとに環境変数は独立」を読み解くのは
この手の文章に対する程度の慣れが要求されるかも。
2017/12/07(木) 08:28:21.42ID:W1nCZ1Cb0
最後の行は言うまでもなく「ある程度の慣れ」が正しい。
「ある」を打ち忘れたアル。
2017/12/07(木) 10:59:56.67ID:6ZyfpAbkd
>>756
納得した
確かにそう読める


waitpidで大気中に割り込みとか入ったらどうなるか教えてくれませんか
manには記載がなかったです
2017/12/07(木) 11:16:17.60ID:jWS70WF+p
マトリックス・リローデッドみたいな話だな。
2017/12/07(木) 11:44:46.46ID:CZv4Zvq/M
>>758
ハード的な割込みそのものはプロセスに影響しないよ。
そいつがシグナル出したらそれ次第だが。
2017/12/07(木) 12:10:49.09ID:6ZyfpAbkd
>>760
そいつというと親プロセスでしょうか子プロセスでしょうか
知りたいこととしてはwaitpidを親プロセスが処理を抜けるタイミングについてです
エラーを受けたら抜ける、正常に終了したら抜けるってのはわかったのですが、
これ以外にwaitを解くタイミングがないのかと
2017/12/07(木) 18:20:26.00ID:8aHRDFHpM
>>761
waitpidの仕様を聞くんじゃなくて、何をしたいか書く方が早いよ
2017/12/07(木) 18:30:02.50ID:3Bgd1/LJ0
ゲスパーするとタイムアウト付で waitpid のブロッキングから帰ってきて欲しいんでないの?
2017/12/07(木) 20:44:53.40ID:8aHRDFHpM
ブロックしないオプション知らないのかな
manまったく読めてねーな
2017/12/08(金) 09:22:37.83ID:T81djMMQ0
セール中

ハロー“Hello, World” OSと標準ライブラリのシゴトとしくみ
http://www.amazon.co.jp/dp/B01GH9AM8C
2017/12/08(金) 10:17:23.50ID:/XUBF9/70
“Hello, Work”標準派遣のシゴトとしくみ
2017/12/08(金) 11:13:03.88ID:Zfsy2JHoa
サイバーセールは他に買いたいものがいろいろあるからなあ
2017/12/09(土) 19:00:18.23ID:wLDySn0e0
乱数を使って異なる4つの数を作りたい
色々調べると a[10] = {0,1,2,〜,9};
を作って4つランダムに抜き出すとかも見つけたんだけどこれでも重複回避方法がわからん...
2017/12/09(土) 19:24:47.38ID:iPTGHqKhM
>>768
重複しないってルールがある時点で
乱数ではない件について小一時間説教をしたい
770デフォルトの名無しさん (ワッチョイ bfb6-QZHg)
垢版 |
2017/12/09(土) 19:28:52.45ID:oe+MwYG+0
>>769
乱数を作りたいと言ってるわけじゃないわけでー
2017/12/09(土) 19:31:17.31ID:nSkNRr7y0
n個の中から1つ選ぶ。
n-1個の中から1つ選ぶ。
n-2個の中から1つ選ぶ。
。。。
2017/12/09(土) 19:31:57.38ID:nSkNRr7y0
選んだものには印を付ける。
2017/12/09(土) 19:36:25.25ID:nZ8OLT0i0
配列に連番で入れて
配列をシャッフルして
配列の先頭から4個抜きとる

お手元のトランプで試してみろよ
絶対に重複しないから
774デフォルトの名無しさん (ワッチョイ 17b3-0+aW)
垢版 |
2017/12/09(土) 19:38:14.85ID:f1LM7KYB0
とりあえず異なる4つの数を作りたいって言ったけど最終目標がHit&Blowだからマクロについて学んでくる
775デフォルトの名無しさん (ワッチョイ 17b3-0+aW)
垢版 |
2017/12/09(土) 19:39:02.99ID:f1LM7KYB0
あっスマホとPCでID変わるんだった
776デフォルトの名無しさん (ワッチョイ 17b3-0+aW)
垢版 |
2017/12/09(土) 19:40:07.11ID:f1LM7KYB0
配列をシャッフルか...なるほど...
2017/12/09(土) 19:59:49.27ID:0DJ42hmW0
配列をシャッフルするって方法は、カードゲームや麻雀の洗牌で使うよね。
文字通りシャッフル、一揃いの順番を混ぜ合わせる操作として。
連番で初期化した配列の、乱数で選んだ2つのインデクスの要素同士を入れ替え。
ある程度の回数ループさせると重複なく順番がバラバラになる。

他には、素朴な乱数ルーチンと組み合わせて乱数の質を改善する方法として
乱数プール(配列)の中から乱数で選んだ(インデクスの)値を出すってのを
見たことがある。
最近は高品質な生成アルゴリズムを使うのだろうけど。
2017/12/09(土) 20:34:35.00ID:zmyZSbxv0
「Fisher-Yates shuffle」で検索!
2017/12/09(土) 20:41:26.15ID:gdFl+nNB0
>>連番で初期化した配列の、乱数で選んだ2つのインデクスの要素同士を入れ替え。
>>ある程度の回数ループさせると重複なく順番がバラバラになる。

それは初心者にありがちな悪手。回数を増やすと見た目はランダムっぽく
なるけどあまりランダムにならない。
1枚目を全体からの一様乱数、2枚目を残りから一様乱数、・・・という具合に選ぶのがいい
2017/12/09(土) 21:03:49.72ID:uxECPca0d
std::shuffle,
古いコンパイラならstd::random_shuffle
781デフォルトの名無しさん (ワッチョイ d79f-qmOZ)
垢版 |
2017/12/10(日) 06:04:19.96ID:J0bkBqjd0
それはC言語ではなかろう
2017/12/10(日) 08:43:45.99ID:q697l8m20
リングバッファで選んでないものを探す。
2017/12/10(日) 11:45:02.06ID:jSvVl/bp0
昨日の768です
Fisher-Yates shuffle
が凄く役に立ちました。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

void shuffle(int ary[], int size);

int main(void) {
int list[10] = { 0,1,2,3,4,5,6,7,8,9 };

shuffle(list, 10);
for (int i = 0; i < 10; i++) {
printf("%d,", list[i]);
}
return 0;
}

void shuffle(int ary[], int size) {
for (int i = 0; i < size; i++) {
int j = rand() % size;
int t = ary[i];
ary[i] = ary[j];
ary[j] = t;
}
}
2017/12/10(日) 11:47:09.13ID:jSvVl/bp0
これだと10桁表示されてしまうので、4桁分表示するように変更
色々有り難うございました
HitとBlowの処理行ってきます
785デフォルトの名無しさん (アウアウカー Saeb-I8sf)
垢版 |
2017/12/10(日) 18:48:03.62ID:xLxKGjo5a
4桁なら乱数4つ求めた後で重複調べてあったらまた求めるっての繰り返しても良いんじゃないか?
2017/12/11(月) 06:21:58.84ID:4q7JrCp00
arySize = 10
range = 0...arySize # 未満
ary = range.to_a

def shuffle(ary, size, range)
for i in range
j = Random.rand(size)
puts "i=#{i} ← j=#{j} : value #{ary[i]} ← #{ary[j]}"

ary[i], ary[j] = ary[j], ary[i]
end
end

shuffle(ary, arySize, range)
p ary

i=0 ← j=8 : value 0 ← 8
i=1 ← j=9 : value 1 ← 9
i=2 ← j=2 : value 2 ← 2
i=3 ← j=9 : value 3 ← 1
i=4 ← j=7 : value 4 ← 7
i=5 ← j=5 : value 5 ← 5
i=6 ← j=4 : value 6 ← 7
i=7 ← j=8 : value 4 ← 0
i=8 ← j=7 : value 4 ← 0
i=9 ← j=9 : value 3 ← 3
[8, 9, 2, 1, 6, 5, 7, 4, 0, 3]

>j = Random.rand(size)
Ruby で書いたけど、これだと、0〜9 のまま一定だろ。
Fisher-Yates shuffle では、ループの度に、1ずつ減らさないといけないよな?
2017/12/11(月) 06:51:09.15ID:IqtrAjQN0
>>779
Fisher-Yates shuffle で検索したら、関連情報として >>777 の方法が
良くないことと、その理由が説明されてるページが見つかった。

可能な並べ方の全パターンが等しい確率で出現するか否か、
というアルゴリズムの原理からの比較は分かりやすくて説得力があった。

個人のページみたいなのでリンクは張らないけど、
「Fisher-Yates shuffle ランダムシャッフル」で出るかと。
2017/12/11(月) 10:36:52.32ID:jt1Lo1hEp
最初から全部の組み合わせの分のテーブル作っておいて、
そいつを乱数で選ばせりゃ一発で決まりだろ?
2017/12/11(月) 11:17:47.55ID:lUrRZ9vjM
何個いるんですかね?
2017/12/11(月) 11:43:53.98ID:jt1Lo1hEp
いまどきハードディスクなんかテラバイト単位でデータ持てるじゃん。
2017/12/11(月) 12:04:58.55ID:maeT9tJH0
ふつうに Fisher-Yates でいいと思うよ
792デフォルトの名無しさん (アウアウカー Saeb-I8sf)
垢版 |
2017/12/11(月) 12:51:29.67ID:h/GY+Pada
>>788
おお。斬新なアイデア。
4つしかなくて0〜9ならそれでも問題ないな。(メモリが全然ないような特殊な場合を除いて)。
2017/12/11(月) 13:06:03.85ID:roDNP16DM
それするなら、0〜9999の乱数を求めて各桁を使えばいい
配列を作る必要はない
2017/12/11(月) 13:07:55.26ID:roDNP16DM
違った。重複しちゃだめだった
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況