ホームへ戻る|Data Base 桐 User Board|過去ログ一覧|検索|プロパティ |ほっ! |
▼過去ログ No133 |
書き込み数 : 6650件 |
|
|
||||||||||||
非常に気兼ねする質問ですが、本がないのでよろしくご回答くださいますようお願いします。 CSVのデータを桐から読み込む際、読み込む順番を指定するにはどうしたらよろしいでしょうか? ファイルメーカープロ(Fpro)の情報をCSVにエクスポートして、そのCSVを桐に移したいのです。 FproからCSVに移す際、自動的に情報の項目が割り当てられるのですが、そのCSVを桐に読み込む際、項目の順番がばらばらなので、読み込む場所を指定したいのです。 どうしたら場所を指定することが出来るのでしょうか・・? ご回答お願いいたします。 |
|
|
||||||||||||
157:桐で「キーダウン・システムキーダウン]イベントを自由自在に制御 ただいま登録させていただきました。 本当は、タイトル通り >桐で「キーダウン・システムキーダウン]イベントを自由自在に制御 ですが、おまけで入ってる「15パズル」も楽しめます。 是非皆さんもごらんください。 ONnojiさん>ありがとうございました。 |
|
|
||||||||||||
メッセージボックスですが、たとえば VBScript でも Visual Basic Scripting Edition MsgBox 関数 http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/script56/html/vsfctMsgBox.asp > vbDefaultButton1 0 第 1 ボタンを標準ボタンにします。と、指定によってデフォルトボタンとか、アプリケーション モーダル とか、システム モーダルと設定できるけれど、今度(次)の「桐」は できるようになるのかな? (^^; |
|
|
||||||||||||
ありがとうございます。ウインドウズの設定は見てませんでした。 |
|
|
||||||||||||
Win2000だと全部chord.wavなのですが、XPだと全部別で?は未設定でした。 |
|
|
||||||||||||
この辺は Winodws の設定( Windows 2000 の場合、サウンドとマルチメディア Windows XP の場合、サウンドとオーディオ デバイス のサウンド設定)を利用しているようです。 ! は「メッセージ(警告)」 ? は「メッセージ(問い合わせ)」 i は「メッセージ(情報)」 E は「システム エラー」 となっていますけど、デフォルトの状態って忘れたけど 「メッセージ(問い合わせ)」は OS のデフォルトとしては 設定してないのでは無いのかな? 設定すればなりますけど・・・ |
|
|
||||||||||||
メッセージボックスコマンドのアイコンパラメータが「?」の時だけ何故か音がしません。 多分、システムに対応するwavがないのが原因なのでしょうが、出先なもので、そもそも どんな音がするのか分からない&ファイル名も分かりません。 XP、V8orV9です。 HELP ME! > hidetakeさん(^^)v |
|
|
||||||||||||
手続きが入れ子にならないように書き換えてみました。 これなら麻雀もOKだ。(使わんだろうけど) 手続き定義開始 順列生成2(整数 &長さ, 参照 整数 &結果[]) 変数 数値{&選択}, 整数{&i, &j} &結果[1] = 2, &結果[2] = 1 if (&長さ > 2) for &i = &長さ, 3 &選択 = #乱数(&i - 1) + 1 &結果[&i] = &選択 &選択 = #乱数(1) if (&選択 < #COND(&i > 10, 1 / &i, 1, &T[&i - 2] / (&T[&i - 2] + &T[&i - 1]))) &i = &i - 1 &結果[&i] = 0 end end for &i = 3, &長さ if (&結果[&i] = 0) &i = &i + 1 &選択 = &結果[&i] for &j = &i - 1, 1 if (&j = &選択) &結果[&j] = &i else cond (&j > &選択) &結果[&j] = &結果[&j - 1] cond (&結果[&j] >= &選択) &結果[&j] = &結果[&j] + 1 end end else &選択 = &結果[&i] &結果[&i] = &結果[&選択], &結果[&選択] = &i end end end 手続き定義終了 |
|
|
||||||||||||
私だけではないようなので、とりあえず、安心しました。(^^)v |
|
|
||||||||||||
Win2000でも同じようです。 リストボックスって使ったことなかったですが、表示モードのまま値が変わりますね? クリックした時表示モード(のようなもの?)に切り替わってるような? リストボックスにフォーカスするとファンクションのF4が「表示」でなくなりませんか? チャイルドフォームでテキストボックスをクリックすると入力できる状態になりますが、 ステータス行のモードは「表示」のままで、ファンクションキーは訂正モード (F2訂正が無効でF4表示が有効)で、編集メニューからは「訂正」「表示」両方選べる (てことはどっちでもない?)謎の状態になる。。。 ちなみにソースは変数だけで表とは関係していません。 |
|
|
||||||||||||
<6583>と比べても環境がわからないのでナニですが、800MHz、RAM1GBのマシンで n=100を1000回で2分弱で終わりましたから速さは十分ですね。 n=6を10万回だと11分。323〜429で標準偏差19.7 最初の26500回を見ると72〜132で10.27、最後の26500回は70〜125で9.3なのでよさそう。 #乱数の使用回数は、最大でnから3までで各2回なので2(n-2)になりますね。 最小だと全部1つ飛びで(n=偶数なら)その半分でn-2。 (n=3も一般化してるので、後半しか選べないのに無駄な#乱数がありますが) 100以上が必要なら再帰でなくwhileに書き換えないと〜 |
|
|
||||||||||||
お疲れ様です。 食わず嫌いでイベントのみの私には魔法のように見える。 |
|
|
||||||||||||
OS:ME 桐 v8 or V9 です。 |
|
|
||||||||||||
更新モード時、フォーカスがテキストオブジェクトにあり、その状態からリストボックス (ソースリスト変数)の別の値をクリックすると、 フォームの形式が「チャイルド」の時は、そのまま即時値が変更されるのですが、これが 「ポップアップ」や「オーバーラップ」ですと、一度目のクリックでは値は変わりません。 (二回目のクリックで変わります。一度目はピョコンと動いて元の値をハイライトします) (その動きが如何にも不自然だ!) これって謎の仕様ですか?・・・それとも、また私だけですか?(にがわらひ) (検証する前に訊いてしまう、わたし) たこすぱげてぃ |
|
|
||||||||||||
桐は「手続きの入れ子 100重」までなので、これだとn=100ぐらいまでしか使えない.... |
|
|
||||||||||||
なるほど、逆に考えると理解しやすくなるのですね。 うまくいったようです。 手続き定義開始 順列生成(整数 &長さ, 参照 整数 &結果[]) 変数 数値{&選択}, 整数{&i} if (&長さ = 2) &結果[1] = 2, &結果[2] = 1 else &選択 = #乱数(1) if (&選択 < #COND(&長さ > 10, 1 / &長さ, 1, &T[&長さ - 2] / (&T[&長さ - 2] + &T[&長さ - 1]))) 手続き実行 順列生成(&長さ - 2, &結果) &選択 = #乱数(&長さ - 1) + 1 &結果[&長さ] = &選択 for &i = &長さ - 1, 1 if (&i = &選択) &結果[&i] = &長さ else cond (&i > &選択) &結果[&i] = &結果[&i - 1] cond (&結果[&i] >= &選択) &結果[&i] = &結果[&i] + 1 end end else 手続き実行 順列生成(&長さ - 1, &結果) &選択 = #乱数(&長さ - 1) + 1 &結果[&長さ] = &結果[&選択], &結果[&選択] = &長さ end end 手続き定義終了 これを呼び出すのに、ifのところで「P(3@k)と P(4@k)のどちらかを選ぶ」ために 変数 長整数{&T[10]}, 整数{&i} &T[1]=0, &T[2]=1 for &i = 3, 10 &T[&i] = (&T[&i - 2] + &T[&i - 1]) * (&i - 1) end のような表を作って、一応10まで計算してみましたが実際には5ぐらいで十分のようです。 n=6では1/6と9/53の差で1/318の場合だけ偏った選択にすぎません。 |
|
|
||||||||||||
> <6633> > 単に後のが(3,4,2,1)の書き間違いのようですね。 ご指摘の通りの様子です。ゴメン、またオオボケした。 > のですが、P(2@1)から生成した物が残りの順列になっているのかが難しい。 <6628>2)前半の証明 実はコルネの式は、H(n)=(n-1)(H(n-1)+H(n-2))……注5 を捻くり回して求めたのですが、 この注5の式を導き出す時の思考過程の中で、2)の操作が導かれます。 頭の中でやった物を日本語にして記述するのは、私は上手くないのですが、 条件を満たす数列、の数字n(最大の数字)が入ってる席番号の数字l(小文字のL)が入っている席番号をmとする。 n≠m の場合は、当初の数列から、座席nと座席lを交換して、座席nを除外する、n-1個の要素の、条件を満たす(全ての)数列になります。2)の後半になります。(n-1)*H(n-1) n=mの場合は、当初の数列から座席nと座席lを除外すると、n-2個の要素の、条件を満たす(全ての)数列となります。2)の前半となります。(n-1)*H(n-2) 但し、座席番号と数字に欠員があるため、従前の表現に統一する為に自然数列に変換して表現する必要があります。 その為に数字を大きさ順に対応させる作業を行った。 (n≠mの場合は最大数字nを除外したためタマタマ欠員が生じない) |
|
|
||||||||||||
「P(3@k)のそれぞれの要素に対して」生成するのはわかりやすい(無条件の順列の生成と 似ている) のですが、P(2@1)から生成した物が残りの順列になっているのかが難しい。 総数はあってますが、n=4の例では(3,4,1,2)が2回生成されてます。 単に後のが(3,4,2,1)の書き間違いのようですね。 しかし、これを桐でやろうとすると多倍長演算を作らないといけませんね^^; 難しくはないでしょうけど。 確率が等しければ十分なので、nが大きい場合は「P(3@k)と P(4@k)のどちらかを選ぶ」 ところだけ近似値で我慢すれば楽なのかな? |
|
|
||||||||||||
>「要素数は(n-1)倍となる」というのは H(n)=(n-1)(H(n-1)+H(n-2)) という意味でつ。 G(n) は、G(n-1),G(n-2)の要素数をそれぞれ(n-1)倍にして生成されたものの和集合。 |
|
|
||||||||||||
ほほ〜。n-1とn-2を両方使うのが難しいですね。 「要素数は(n-1)倍となる」というのはn-1の倍数ということでしょうか。 前の方法Bのコードはシーケンシャルに探しているとこが美しくなかったので 書き直してみましたが、やっぱりどうもやり直し率が予定より低くなってしまう... 変数宣言 整数{&n} &n = 4 変数 整数{&結果[&n],&番号[&n],&座席[&n],&座席R[&n],&i,&c,&t} for &i = 1,&n &番号[&i]=&i, &座席[&i]=&i, &座席R[&i]=&i, &結果[&i]=0 end for &i = &n, 2 &c = #乱数(&i) + 1 &t = &番号[&c], &番号[&c] = &番号[&i] &c = #乱数(&i - #COND(&結果[&t] = 0, 1, 1, 0)) + 1 COND (&結果[&t] = 0 .and &座席R[&t] <= &座席R[&c]) &c = &c + 1 &結果[&座席[&c]] = &t &座席[&c] = &座席[&i], &座席R[&座席[&c]] = &c end *失敗した場合 if (&番号[1] = &座席[1]) * &t=#配列代入("結果",0) &結果[&座席[1]] = 0 else &結果[&座席[1]] = &番号[1] end |
|
|
||||||||||||
日本語の補正です、その2^_^; × 選んだ数列に対して 2)の操作を行う ○ 選んだ数列に対して 2)前半または後半の操作を行う、注1・注2は乱数で1つ選ぶ × 2)の操作を行い ○ 選んだ数列に対して 2)前半または後半の操作を行い、(注1・注2は乱数で1つ選ぶ) × 任意のP(4@k)が均等に生成される ○ 任意のP(4@k)が1つ均等に生成される × 任意のP(5@k)が均等に生成される ○ 任意のP(5@k)が1つ均等に生成される |
|
|
||||||||||||
日本語の補正です^_^; × 選んだ数列に対して 2)の操作を行う ○ 選んだ数列に対して 2)前半または後半の操作を行う × 2)の操作を行い ○ 選んだ数列に対して 2)前半または後半の操作を行い |
|
|
||||||||||||
有限時間内に正解を出す方法 1) n=i の時の条件を満たす数列の集合列のをG(i)とし、 その要素を数列P(i@k)とします。 G(2)={(2,1)}={P(2@1)} G(3)={(2,3,1),(3,1,2)}={P(3@1),P(3@2)} また、G(i)の要素数をH(i)とする。 H(n)は以前のコルネの式で求められる。 2) G(n)は、G(n-1)とG(n-2)、から生成できる。 要素数は(n-1)倍となる 例えば、n=4の場合は、 P(2@1)=(2,1) ↓カッコ内要素数字を2つ増やす (2,1,*,*) ↓一番右に条件を満たす数字4以外を入れる……注1 (*,*,*,2) ↓今入れた数字の席順に4を入れる (*,4,*,2) ↓残りの席をP(2@1)=(2,1)と同値となる条件を満たす数字で埋める ↓表現難しいが1:1対応になる。 ↓*に入りうる数字を大きさ順に、(2,1)に対応させる。 (3,4,1,2) 注1で(n-1)=3通りになるから、 結果(3,4,1,2),(2,1,4,3,),(4,3,2,1) 次にP(3@k)のそれぞれの要素に対して、 P(3@1)=(2,3,1) ↓カッコ内要素数字を1つ増やして数字4を入れる (2,3,1,4) ↓一番右の4を、それ以外の任意席と入れ替える……注2 (2,4,1,3) 注2で(n-1)=3通りになるから 結果(2,4,1,3),(4,3,1,2),(2,3,4,1) P(3@2)に付いても、(3,1,2)→(4,1,2,3),(3,4,1,2),(3,1,4,2) 3) 以上の方法を用いて条件を満たす数列を均等に生成していく G(3)から均等に要素数列を1つ選んでおくP(3@k)(H(3)=2だから1/2の確率)……注3 G(2)とG(3)の全要素数から1つの要素を均等に選ぶ H(2)+H(3)=1+2=3だから1/3の確率(P(2@1) or P(3@1) or P(3@2)) 選んだ数列に対して 2)の操作を行う その結果は、任意のP(4@k)が均等に生成される 4) G(3)とG(4)の全要素から1つの要素を均等に選ぶ 乱数で、H(3):H(4) の重みをつけて、注3の P(3@k)と P(4@k)のどちらかを選ぶ 。 2)の操作を行い、任意のP(5@k)が均等に生成される 5)i=n まで操作を繰り返す 注4:P(i@k)の使いまわしは、これで良いと思います。 |
|
|
||||||||||||
方法C 『乱数で席を選んで乱数で番号を埋めていき、最後の2席と最後の2番号が同一の組であったら最初からやり直し、また次に、最後の席だけ番号が一致したら最初からやり直し』 方法Bと方法Cは、どちらがより均等っぽいでしょうかね? |
|
|
||||||||||||
>試してませんが、これだと[項目値]も印字されないのでは?と、思ったり。 あ、そうか。 私は「所定の用紙」に印刷すると云う前提で考えていました。 たゆーさんは「白紙」に様式の枠組みごと印刷するイメージだったんですね? |
|
|
||||||||||||
あれっ(ltu)・・ >いえ、この点は「印刷しない」のチェックで、罫線自体を印刷する・し >ないも可能です。 試してませんが、これだと[項目値]も印字されないのでは?と、思ったり。 まっ、楕円でないから最初からだめな方法ですが。 |
|
|
||||||||||||
>と、思ったら、印字属性タブの「属性式:条件」には >「背景色・文字色・網掛け」はあるが、「罫線」はありませんでした >残念・・・ いえ、この点は「印刷しない」のチェックで、罫線自体を印刷する・し ないも可能です。 ただレポートでの罫線の角丸めだと、本当に角が少しだけ取れた四角形 に過ぎませんで、決して「楕円」とは云いがたいシロモノです。(T_T) これが、フォームの角丸めなら幅・高さのポイントまで自在に変更でき るので結構うるわしき楕円も可能なのですが……。 |
|
|
||||||||||||
と、関連して少し違いますが・・・・・ レポートに「楕円」を印字する為には「円・楕円」オブジェクトを使用するしか 方法はないですが、これがもし「角丸め」でもよかったら、テキストオブジェクトを そのまま使用可能 と、思ったら、印字属性タブの「属性式:条件」には 「背景色・文字色・網掛け」はあるが、「罫線」はありませんでした 残念・・・ やはり、オブジェクトの重ね処理しかないのかな |
|
|
||||||||||||
あ、そうか。桐のレポートのフォントスタイルは 「標準・斜体・太字・太字 斜体・下線」しかないのか ちなみにエクセル(EXCEL 2002)では、(レポートでなくセルの書式ですが) フォントタブの、書式に「標準・斜体・太字・太字 斜体」があり 下線に「なし・下線・二重下線・下線(会計)・二重下線(会計)」。その他に、 文字飾りに「取消線・上付き・下付き」というのがあります せめて「取り消し線」くらいは欲しいですね。 昔の話でさだかでないですが「NEC・EPSON」のプリンタ比較として ・NECは 22dotフォントで、EPSONは 24dotだから、EPSONのプリンタがフォントがきれい ただ、24-22の差がある分下方に隙間があり下線を引いたフォントはNECがきれいとか・・・ ちなみに私はこの春まで「Win3.1+Excel5.0」の世界だったので、EXCEL 2002に変わっても 気づかなかったのですが、ひとつのセルのなかの「文字サイズ・フォント色の変更」は 以前から可能でしたが「下線・文字飾り」も文字単位に変更可能なんですね ・・・と、エクセルの話ばかりにならないように気をつけよう |
|
|
||||||||||||
「ベルトル」ってなんじゃぁ? 答え「ベクトル」の誤打鍵也。(^^;) |
|
|
||||||||||||
順列の問題、なかなか賑わっておりますが、私はもう着いていけ てません。(^^;) 思い起こすに、高校2年のある時期、悲しげ少年は色々と悩み多 き頃でありまして、ちょうど「順列組合せ」「数列」「ベルトル」 辺りは全く勉強しなかった。で、今でもこの分野は全然ダメなん ですね。いえ、元々理数系は弱い方だったのですが、どうした訳 か大学は理系に行ったものですから、教養1年の数学の単位を取 るのに3年かかったり……。(^^;) ってことはさておき。 標題の件、云われてみると、私はL派ですね。 そのことの私なりの理由は、いわゆる「ホームポジション」から の移動量のためだと思います。 恥ずかしながら、私はカナ入力派あがりでして、そのためローマ 字入力をする時は、(何せ不慣れなもので)ともかく打鍵後には 必ずホームポジション(つまり、左手人差し指を[F]、右手人差 し指を[J])に戻すように意識しています。 で、このX・L問題を見てみますと、Lだとホームポジションの まま右手薬指押下だけで済みますが、Xだと左手薬指を一段下や や右に移動させなくてはならない。この移動は、キー打鍵練習初 期には、けっこう負担だったりした記憶があります。 同様のことは、「syou」vs「shou」についても云えまして、後者 だと段の上下移動なしに右人差し指の単なる平行移動だけで済み ますし、これが「じゃ・じゅ・じょ」ともなりますと「zya」なん てやってらんなくて「ja」で済ましちゃうと云う……。(^^;) ついでに云えば「ふ」系も、当然ながら専ら「f*」です(ホーム ポジションで左手人差し指の初期位置)。 以上、あくまでも特殊ワタクシ的な理由に過ぎませんけど。 それと、 >通常促音「っ」は次に続く子音を続けて入力しますが 最近知ったのですが、訂正などで後から「っ」を打つ必要がある時 など「ltu」が使えるんですね。ちなみに「xtu」じゃないのは同前、 まして「xtsu」などとは……。(^^;) |
|
|
||||||||||||
方法Bの全組み合わせを結合表で作ろうとしたら、すぐ4%になってそのあと 3時間たっても全く進みませんでした。 結合条件で表現すると、6!*6!でなく6^6*6^6分処理しているから? |
|
|
||||||||||||
そのときの気分でどっちも使いますねぇ。lはlittleのlなんでしょうね。 syoは訓令式、shoはヘボン式ですね。 伸ばす音はuでなく上棒と習いましたが、英語にない(キーボードにもない)ので 使われてませんね。 |
|
|
||||||||||||
>タラレバなので、まだ試していませんが… 結果は駄目でした。 <6610>はハズレでした。 後知恵になりますが、 よく考えてみたら試すまでも無く、駄目のはずでした。(^^ゞ |
|
|
||||||||||||
通常促音「っ」は次に続く子音を続けて入力しますが 「ぁぃぅぇぉ」の文字は・・・ 私はいまだに「xa・xi・xu・・」ですが、まわりは「la・li・lu・・・」が多いようです これが普通? ちなみに「商品」は「syouhin」です。これも最近は「shouhin」なんですね 「sho」は○○○○ショーみたいなイメージです |
|
|
||||||||||||
どうも有難うさんです。 確かに方法Bとは同じではないですねー。 頭廻ってないけど大変よく解りました おやすみなさいませ。 有限時間の回答は無理かぁ?方法Bでさえ確証ないしー、問題強敵でつー |
|
|
||||||||||||
場合A)と場合B)は、方法Bでも同じになるので考える必要はなくて、 場合C)について、方法Bでは半分は「やり直し」なのに方法Aでは 〜,10,7を常に出現させてしまいます。(〜,7,10から敗者復活させるのと同じ) 全ての順列を均等に出現させれば均等になりますが、2,1,4,3,6,5,8,7,10,9のような 順列は決して出現しないので、方法Bと比率が同じでなくなります。 |
|
|
||||||||||||
そんな簡単?? 場合A)n-1回目で残ってる2つの番号と席が全て異なる場合 場合B)2つが同じ場合 *,*,*,*,*,*,*,*,10,9 は一般的な場合A)の2倍の出現 場合C)1つだけが同じ場合 *,*,*,*,*,*,*,*,10,7 は一般的な場合A)の2倍の出現 さらに全体的に局面の選択は乱数でされている うにんさんの言う「ペア」って、場合B)の一部ですよね? さすがに酔ってきた、もうダメポ また、明日考えます。 |
|
|
||||||||||||
方法Bが均等であるのが前提ですので、方法Bの「やり直し」は均等であることになります。 (じゃんけんで、引き分けになったとき同じじゃんけんを続ければ勝率が1/2になる) 方法Aではやり直しの代りに入れ替えをし、その分は一部の順列しか生成しません。 (じゃんけんで、引き分けになったら出す手を制限して続けるとしたら?) う〜〜ん。あまりいい例えではないかな。 「ペア」である2143を入れ替えで発生させるには、どれか1つを入れ替えた状態から はじめなければいけませんが、「2を2番目のと取替えたら1も1番目に来てしまう」のが 「ペア」の特徴ですから、入れ替える前の状態が存在しないのです。 |
|
|
||||||||||||
既にアルコールモードですが、自分ではまだ酔っていないつもりだが:) <6609>の意図は理解できるのですが、 概略下記で良いですよね 方法Aでは、 コルネ「n-1回目に不均等な順列の生成になるが、その局面は乱数で生じているので、 全体では均等に順列が生成される気がする」 うにんさん「n-1回目に特定のパターンの順列が不均等に生成されるので、 全体でも特定のパターンの順列生成の不均が残る」 明朝熟考してみますが、頭がウニ状態で、どうにもこうにも、、解らん^_^; > やり直しでは「ペア」が発生しますが、入れ替えでは発生しないのです。 もう少し解りやすい説明か、簡単な反証があれば理解の助けになるのですが、、 お暇な時にでもお願いいたします。 |
|
|
||||||||||||
>アルゴリズムで15通りのNGから「9通りのOK」を均等に作れるだろうか? タラレバですが…(^^ゞ 1.とりあえず全員座席に付く(順列を作る) 2.車掌は、 ・指定席に座った人の名簿を作る ・指定席に座らなかった人の名簿を作る ※全員が指定席に着席していたらリバースする 3.車掌は、 指定席に座らなかった人と指定席に座った人を無作為に交換する 4.指定席に座っている人が残っていれば、2へ戻る こんなの考えてみました。 タラレバなので、まだ試していませんが… |
|
|
||||||||||||
方法Bはもう他にどうしようもない感じですし、均等であってほしいものですが。 方法Aで、残っている両方が同番号であれば、方法Bでも自動的にn-1回目は #乱数(1)になって失敗しないので、方法Bと同じ処理をしていることになります。 片方だけ同番号の場合が問題となります。 方法Bでは、同番号のをn-1回目に処理すると、#乱数(1)により100%成功し、 同番号のを最後に残すと#乱数(2)により50%の確率でやり直しになります。 方法Aでは、上記のやり直しの代りにn-1回目の番号と入れ替えていることになります。 で、やり直しでは「ペア」が発生しますが、入れ替えでは発生しないのです。 (逆操作で「ペア」から入れ替え前の順列を作ろうとすると、2箇所が条件を満たさなくなる。つまりn番目で失敗する以前に条件を満たす順列になっていない。) #ちなみに#乱数(1)は整数を返すわけではないのでちょっと気持ち悪いが、 #配列の番号に使ってるだけなので切り捨てられて常に0と同じ。 |
|
|
||||||||||||
456213は「ペア」じゃないですね^^; 「ペア」なのはn=6の場合265通り中15通りしかなく、それぞれについて10万回で出現数を見ると 「ペア」は267〜355で平均321。他の250パターンは288〜386で平均335。 と少ない傾向はあるが不均等なのかどうかははっきりしませんでした。 |
|
|
||||||||||||
混乱の原因は私の雑な表現かも:) 方法Bは<6585>の最初2行で、うにんさんが書いた方法です。 |
|
|
||||||||||||
えっと混乱しているようなので<6590>の方法Aと方法Bを再掲 その後の使用で逆にはなっていないと思う。 方法A 『乱数で席を選んで乱数で番号を埋めていく、(n-1)回目の操作時には失敗しない選び方をする』 (残っている番号(の少なくとも片方)と同番号の席が残っている場合、同番号では無い方の席に入れる そうでない場合は乱数) 方法B 『乱数で席を選んで乱数で番号を埋めていき、最後の席だけ番号が一致したら(最初から)やり直し』 私の雑な表現にカッコを追加した。 <6585>で、うにんさんが書いた方法。 直感的に方法Bは均等になる気がします。多分、きっと、均等になるだろう。 *<6590>で、方法Bが均等ならば、方法Aは均等であると証明している。 *<6598>で、方法Aの(n-1)回目操作が局所的に不均等に見えるとの考えに対して、 それは方法Bも同様、実は(n-1)回目だけでなく2回目以降はA・Bともに局所的には当然不均衡である と述べている。 不均衡の局所自体を乱数で選んでいるので、均等になるのでは? との考えです。 re:<6599> > 「2143」のような「昇順の順列からすべてペアで交換した形」のものは、失敗した場合 からの交換では発生し得ないので、 方法Bで失敗した場合は最初からやり直すので、発生します。 |
|
|
||||||||||||
実は方法B自体が均等でなかったような? n=4の「ペア」な3パターンが出現数の少ない方から3つを占めていたので n=6でやってみたらやはり「ペア」な532614とか456213が少ない。平均値と 20%位しか違わないので単なるばらつきと区別しにくいのですが。(3〜8位はペアでないし。) この程度の差は目をつぶるべきか-_- <6585>の計算は可能なパターンの数え上げになってるはずですから、 失敗する率が低くなってるのがそもそも均等でない証拠なのかも? |
|
|
||||||||||||
「9通り」というのは「コルネの式」で計算可能なのですが、サイコロで選んだ1通りを 具体的な順列に変換する方法が見つかっていないのです。 24通りからなら簡単なのですが。(階乗進数というので検索すると出てきます) n=4なら全部生成して選択すれば簡単ですが、nが10以上になるとほぼ不可能です。 |
|
|
||||||||||||
n = 4 の場合24通りの組み合わせになると思いますが、 単純に数字と左からの位置が同じならNGとすると、 9通りの組み合わせがOKになると思います。 残りの15通りはNGになります。 もしも、順列がNGの結果になった場合、 もう一度、サイコロを振って、「9通りのOK」から1通りを選ぶと均等だろうか? ※アルゴリズムを使わずにサイコロに任せる もしも、上のアプローチ結果が均等だとすれば、 アルゴリズムで15通りのNGから「9通りのOK」を均等に作れるだろうか? <6562> 敗者復活戦に関しては、このような感想を持っています。 |
|
|
||||||||||||
>ONnojiさん、同じような理由でタイトルバーに[×]を付けてません。 たこすぱげてぃさん、 私はタイトルバーと[×]ボタンを必ず付けています。 そのため[ソース値更新]イベントを一切使わない事にしました。 |
|
|
||||||||||||
>Meだからでないですか? どうもそうのようです。(--; XPで試してみたら、V8でもV9でも、まったく問題なく動きました。 あとで98でも試してみます。 お騒がせ致しました。 たこすぱげてぃ ONnojiさん、同じような理由でタイトルバーに[×]を付けてません。 |
|
Copyright (C) 2000 CGI Arkadia All rights reserved. Script written by Shintaro Wakayama. BBS-TypeN Ver.2 Preview4 remodel advice by hidetake |