• ベストアンサー

並び替えソフト

任意の番号(例えば1~50)をシャッフルしてランダムに並べるフリーソフトはありませんか? 例えば、1~9の9個の数字の場合は、「1.2.3.4.5.6.7.8.9」のように並んでいる番号を「3.9.4.6.8.1.7.5.2」のように並び替えるソフトを探しています。

質問者が選んだベストアンサー

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.6

改修してみました。 同じフォルダに STARTNO.txt というファイルに最初に始まる番号を入力したものを準備しておいて下さい。 1から始まる時は 1 '------------------------------------------- 'コンソールから実行する時は>cscript shuffle.vbs 'STARTNO.txtに書かれている番号から、Need人数をシャッフルする Dim fso, tso Dim MaxNum, Need, Off, StartNo Dim NumList Dim i,x MaxNum = 27 '児童の人数 Need = 20 '給食当番に必要な人数 Off = 7 '抜ける人数 Set NumList = CreateObject("Scripting.Dictionary") Set fso = WScript.CreateObject("Scripting.FileSystemObject") Set tso = fso.OpenTextFile("STARTNO.txt",1) '今回の始めの番号を読み出す StartNo = CInt(tso.ReadLine) tso.Close x=StartNo for i=0 to Need -1 NumList.Add i,x 'リストを作る x = x + 1 if x >MaxNum then x =1 next WScript.Echo StartNo & "から" & Need & "人" Randomize do until NumList.count = 0 x=Int(Need * Rnd) if NumList.Exists(x) then WScript.Echo NumList.Item(x) NumList.Remove(x) end if loop StartNo = (StartNo + Off) mod MaxNum if StartNo = 0 then StartNo = MaxNum Set tso = fso.OpenTextFile("STARTNO.txt",2) '次回の始めの番号を書き出す tso.WriteLine(CStr(StartNo)) tso.Close

negibouzu
質問者

お礼

改修ありがとうございます。ここしばらく、ADSLの回線が不調で接続できなかったのですが、やっと直りました。一度、試してみます。ごめんなさい。仕事が立て込んでいて、1週間少々かかると思います。

その他の回答 (5)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.5

#2補足について> 例えば1~27人が前から順番に7人抜ける(抜けて後ろに並ぶ)ということは、シャッフルする要素がないと思うのですが、 最初の1~27の並びをシャッフルで決めるといういみですか? それとも、1週間毎にシャッフルするという意味でしょうか? 後の意味だと、勤務につく間隔が他の人より短い人がでてくるような気がするのですが、 例えば、こういう動作をして欲しいというのを具体的な(どうシャッフルが関係するのか)例をあげて説明していただけませんか? >VBScript (私にはよくわかりませんが)が一番簡単な方法ですか? エクセルとかを使う方法もあるかとも思いますが、 プログラム的な操作になること、 非常に限定的な要素を含むことから フリーソフトでは、望む動作をするものが(ほとんど)ないような気がします。 なので、作らないといけないですが、 どういうソフトが動くのかという環境がわからない上では、 MSの場合98以降のOSが入っていれば使えると判断できるVBScriptを使用することにしました。

negibouzu
質問者

補足

こんばんは。早速の回答ありがとうございます。 私のPCは、OSがWindowsXPです。給食当番は、毎週7人ずつが1週間交代で休みます。で、当番の子20名の中で毎週シャッフルしたいのです。なぜかというと、陶器製の食器や牛乳瓶は重いので、1階から3階まで二人で運ぶのです。シャッフルしなければ、例えば、「8番の子と18番の子、9番の子と19番のというふうに、運ぶペアになる相手がいつも同じ人物に成ることが多いので、給食当番の中で、いろんな子とペアになりたい」という子どもたちからの要望があったためです。

  • uzzra
  • ベストアンサー率43% (55/127)
回答No.4

1~43に限定されますが、ロト6用の数値シャッフルをするフリーソフトがありました。 ↓ http://www.vector.co.jp/soft/dl/win95/amuse/se316443.html それから、パスワードを生成するツールですが、これも応用次第で使えませんか。(文字を数字に見立てて、など) ↓ http://www.vector.co.jp/soft/win95/util/se161038.html?y

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

#2>チンプンカンプンなんです まず、「スタートメニュー」から 「すべてのプログラム」~「アクセサリ」~「コマンドプロンプト」 を選んで下さい。 黒いウインドウが開くはずです。 一番上の方に今開いているフォルダ名が表示されているはずです。 次に、 エクスプローラからその表示されているフォルダに移動して、フォルダの中で右クリックして「新規作成」~「テキストドキュメント」で新しいテキストファイルを作って下さい。 名前が青くなっている処で(あるいは、F2キーを押して) shuffle.vbs に名前を変更して下さい。(拡張子は普段表示されるようになっていますか?) 警告されると思いますが、OKして名前の変更を完了します。 すると、字の書かれたような青い巻物みたいなアイコンになるはずです。 それを、右クリックして「編集」を選んで下さい。 メモ帳が開くはずです。 そこに、 #2の回答の切取線以下の部分をコピーして貼り付けて下さい。 張り付けできたら、上書き保存してメモ帳を終了します。 次に、 もとのコマンドプロンプトに戻って画面をクリックして下さい。 そこで、 cscript shuffle.vbs とタイプして、ENTERキーを押して下さい。 プログラムを実行することができます。 プログラムが見つからないとかそういうメッセージが出る場合その起動したフォルダにないかもしれません。 dir とタイプして、ファイルの一覧から shuffle.vbs があることを確認して下さい。(ない場合は、そのフォルダを最初の手順でもう一度確認して下さい。) いったん、shuffle.vbs を作成できたら ダブルクリックしても実行することもできます。 動作はちょっと変わります。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

とりあえず、作ってみました。 以下の部分をshuffle.vbsとでも名前を付けて保存し ダブルクリックするか コマンドプロンプトで >cscript shuffle.vbs として下さい。 コマンドプロンプトの場合、 >cscript shuffle.vbs >data.txt とでもすることで出力をファイルに保存することができます。 '-----------------------切り取り線-------------- '1から指定された数字までをランダムに表示する 'コンソールから実行する時は>cscript shuffle.vbs Dim MaxNum Dim NumList Dim i,x Set NumList = CreateObject("Scripting.Dictionary") MaxNum=InputBox("1から指定された数字までの数字をシャッフルして書き出します" & vbCRLF & "数字を入力して下さい") for i=1 to MaxNum NumList.Add i,i next Randomize do until NumList.count = 0 x=Int((MaxNum * Rnd) + 1) if NumList.Exists(x) then WScript.Echo NumList.Item(x) NumList.Remove(x) end if loop

negibouzu
質問者

お礼

回答ありがとうございました。せっかく回答いただいたのに、>cscript shuffle.vbsの意味がまったくわかりません。コンソールって意味もわかりません。作っていただいたものは、何を使うのですか?メモ帳ですか?チンプンカンプンなんです。ごめんなさい。

negibouzu
質問者

補足

こんばんは。動かなかったので、下記のようにしてみたら動きました。 <引用から修正> '1から指定された数字までをランダムに表示する 'コンソールから実行する時は >cscript shuffle.vbs Dim MaxNum Dim NumList Dim i,x Set NumList = CreateObject("Scripting.Dictionary") MaxNum=InputBox("1から指定された数字までの数字をシャッフルして書き出します") & vbCRLF & (x) for i=1 to MaxNum NumList.Add i,i next Randomize do until NumList.count = 0 x=Int((MaxNum * Rnd) + 1) if NumList.Exists(x) then WScript.Echo NumList.Item(x) NumList.Remove(x) end if loop <以下、追加質問です> 私は、小学校教員ですが、給食当番の係りの児童の番号をシャッフルしたくて、前回質問しました。 クラスの子は27名です。給食用エレベーターがないので、給食当番は20名必要なんです。1週間交代です。1番の子から20番の子までが今週の当番。翌週は、最初の7人が抜けて8番~27番が担当。その次の週は、8~14が抜けて、15番~27番と1番~7番の20名。その次は、15~21が抜けて、22~27と1~14の20名。というふうに、7人ずつぬけてグルグル回っていきます。今年は27名の児童数ですが、来年度は人数が増えるか減るかわかりません。少しややこしいですが、このような場合でもできるでしょうか? VBScript (私にはよくわかりませんが)が一番簡単な方法ですか?

  • silo_7
  • ベストアンサー率60% (53/88)
回答No.1

「行単位で並び替える」エディタやエクセル等の表作成ソフトがあれば、一度、 1 2 3 4 のように入力するか、1文字ごとに改行コードをつけておき、 2 4 1 3 のようにランダムに処理してから改行コードを外すといいう方法が思いつきます。 テキストファイルソータはそういうソフトのひとつです。

参考URL:
http://www.magictory.com/main/soft/softs.html

関連するQ&A