- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Perl ランダム 0と1 かぶり)
Perlでランダムに0と1をかぶらずに出力する方法
このQ&Aのポイント
- Perlのランダム関数を使用して、0と1をバラバラに出力する方法について教えてください。
- 現在のコードでは、稀に0と1がすべてかぶる現象が発生しています。
- 0(□)はかぶらないようにする方法を教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
□or■の2つの状態を 1bit(2進数)に割り当てると それが5つなので、 5bitのデータで表せることになりまますので、 rand(2)を5回実行すのではなく 特定のものを除外した5bitデータを1度のrandで生成すれば 簡単だと思います。 つまり、5つの□or■を、10進数で示すと □□□□□=0 □□□□■=1 □□□■□=2 □□□■■=3 ... ■■■■■=31 の0~31となりますのが このうち □□□□□=0 のみを除外したいなら、 1~31をrandで生成すればよいことになります。 これは $val = int(rand(31)) + 1; (rand(31)で0~30の範囲の返り値をもらって、それに+1) ですので、 あとは、この値を、2進数に分解して各bitが0なら□, 1なら■とすればよいかと。 たとえば、 1→00001 →□□□□■ ... 25→11001→■■□□■ ... 31→11111→■■■■■ という形です。 10進数から5つの0or1への変換は $bin = sprintf ("%05b", $val); で5桁の2進数の文字列にしてから、1文字づつ取り出せばよいかと。
その他の回答 (1)
- kichi8000
- ベストアンサー率41% (660/1584)
回答No.1
かぶらなくなるまで「やり直しループ」させる
質問者
お礼
ご回答ありがとうございます・・・ IFで全てが0だったとき~するという処理は試してみたのですが、 そこにどうループを埋め込めばいいのかわからないです・・・
お礼
ありがとうございます!! 実行できました。 0がかぶることなくできるようになり助かりました! 文字はsubstrで1文字ずつ取り除きました。