1 名前:デフォルトの名無しさん mailto:sage [2009/02/04(水) 03:34:28 ] オブジェクト指向スクリプト言語Rubyについて扱うスレッドです。 Ruby Home Page www.ruby-lang.org/ja/ = 前スレ Rubyについて Part 33 pc11.2ch.net/test/read.cgi/tech/1223709050/ 過去スレ・関連スレは >>2-
802 名前:デフォルトの名無しさん mailto:sage [2009/03/10(火) 20:14:41 ] あん、何が何のdownward product だって?
803 名前:782 [2009/03/11(水) 17:32:25 ] むーやっぱバーチャルマシン立てようかな・・ レスありがとうございましたm(_ _)m
804 名前:デフォルトの名無しさん mailto:sage [2009/03/12(木) 18:58:43 ] 円周率を計算するプログラムを見かけたのでRuby用にしてみた 元はhaskellで、それを十進BASIC用にしたもの 多倍長整数で計算するらしい 何をどう計算してるのか内容についてはさっぱりわからんが 1万桁計算する時間を計ってみることに require 'benchmark' limit = 10000 Benchmark.measure do q,r,t,i = 1,180,60,2 u,y = 3*(3*i+1)*(3*i+2), Integer((q*(27*i-12)+5*r)/5/t) #print y (limit-1).times do q,r,t,i = 10*q*i*(2*i-1), 10*u*(q*(5*i-2)+r-y*t), t*u, i+1 u,y = 3*(3*i+1)*(3*i+2), Integer((q*(27*i-11)+5*r)/5/t) # print y end end.display
805 名前:デフォルトの名無しさん mailto:sage [2009/03/12(木) 19:06:50 ] Windowsにて実行 Ruby 1.8.7-p72 Mingw32 17.20s Ruby 1.8.7-p72 mswin32 25.02s をぉ、かなり違いますな てっきりVCの方がGCCより速いのかなと思ってたけど 最適化の封印とかされてるのだろうか Ruby 1.9.1-p0 Mingw32 19.89s Ruby 1.9.1-p0 mswin32 28.90s がびょーん、1.8より遅くなってる… Mingw32版は自前でビルド(configure と make しただけ) mswin32版は(う)さんの
806 名前:デフォルトの名無しさん mailto:sage [2009/03/12(木) 21:13:25 ] >>805 お察しの通り、mswin32版は最適化封印されてるぞ。 最近のVCを使えば大丈夫、らしい。 それでもGCCの方が速いことが多いらしいけど。
807 名前:デフォルトの名無しさん mailto:sage [2009/03/12(木) 21:17:04 ] 封印てw バカじゃないのかしらw オープンソースなんだからサポートしてるコンパイラに最適化するのは当然。 そもそもVCてw せめてiccと比較しろよなw
808 名前:デフォルトの名無しさん mailto:sage [2009/03/12(木) 21:18:48 ] >>807 そのへんの「事情」はMLアーカイブ読んでこい。
809 名前:デフォルトの名無しさん mailto:sage [2009/03/12(木) 21:21:49 ] へたなコンパイラにへたな最適化させるとGCで必要な情報を「最適化」しちゃう?
810 名前:デフォルトの名無しさん mailto:sage [2009/03/12(木) 21:22:00 ] 「w」の数が多いやつはバカが多い法則は健在だな
811 名前:デフォルトの名無しさん mailto:sage [2009/03/12(木) 21:39:58 ] AquesTalk/Ruby クソワロタw
812 名前:デフォルトの名無しさん mailto:sage [2009/03/12(木) 23:22:09 ] >>806 やはりそうでしたか バイナリの互換性でいまだVC 6.0でコンパイルされているのは知ってました 本体や拡張ライブラリからリンクされてるランタイムライブラリが一致してないと駄目とかなんとか あと、なにか不味いことがあって最大限の最適化もされてないとか以前どこかで見たような記憶があったので
813 名前:デフォルトの名無しさん mailto:sage [2009/03/13(金) 00:13:04 ] pythonはVC8に移行したよね
814 名前:デフォルトの名無しさん mailto:sage [2009/03/13(金) 00:33:01 ] VS2008(VC9)だな
815 名前:デフォルトの名無しさん mailto:sage [2009/03/13(金) 06:51:25 ] 1.9.1の時点でVC9に移行しちゃっても良かったんじゃないかと思うんだがな VC6とかインストールするのもめんどくせえ
816 名前:デフォルトの名無しさん mailto:sage [2009/03/13(金) 10:14:32 ] 勝手にすればいいのでは
817 名前:デフォルトの名無しさん mailto:sage [2009/03/13(金) 10:16:28 ] 確かにな。mswin32版も、あくまでも有志サイトでの配布って形を崩してないしw
818 名前:デフォルトの名無しさん mailto:sage [2009/03/13(金) 14:25:14 ] あちこちでmswin32向けにバイナリ配布されている拡張ライブラリは VC9でコンパイルしなおした場合、使えなくなる可能性が高いということですか? gcc版のrubyを使う場合は、拡張ライブラリは基本的に 自前でコンパイルしてインストールする必要があるとかそういうことですか? mswin32版しか使ったことないから考えたことがないな。
819 名前:デフォルトの名無しさん mailto:sage [2009/03/13(金) 14:39:40 ] 1.8の安定版スナップショット(2009/03/13 04:15:48)のwin32/resource.rbがバグっぽい。 make時に作るrcファイルがwindresでsyntax error。 rcファイルのFILEVERSIONとPRODUCTVERSIONの末尾が「,」になってるわ。0でも足しとけ。
820 名前:デフォルトの名無しさん mailto:sage [2009/03/13(金) 14:40:32 ] >>819 mingwでの話
821 名前:デフォルトの名無しさん mailto:sage [2009/03/13(金) 23:44:17 ] >>818 mingwとVC6でコンパイルしたruby本体と拡張ライブラリは互換性があるんで互いに使える それ以外のcygwin、VC7/8/9、bccなんかでコンパイルしたruby本体では 同じコンパイラでコンパイルした拡張ライブラリしか使えないし逆もまたしかり
822 名前:デフォルトの名無しさん mailto:sage [2009/03/14(土) 03:40:11 ] 過疎w
823 名前:デフォルトの名無しさん mailto:sage [2009/03/16(月) 10:03:01 ] ruby厨ってrubyしか使ったことないかあるいは使えないんでひたすら布教するんだろうな 複数の言語を使いこなせないとは哀れな
824 名前:デフォルトの名無しさん mailto:sage [2009/03/16(月) 10:06:23 ] 教祖が多数の言語に精通した言語ヲタなのにねぇ…
825 名前:デフォルトの名無しさん mailto:sage [2009/03/16(月) 10:13:21 ] >>823 彼らはRuby使えてないよ 実際に聞いてみるといい
826 名前:デフォルトの名無しさん mailto:sage [2009/03/16(月) 10:18:50 ] ことRubyユーザーで、Rubyしか使えない層ってのはごく少数だと思うが そもそも、複数使えないと(相対的に)良い悪いなんて判断できんだろ……
827 名前:デフォルトの名無しさん mailto:sage [2009/03/16(月) 10:23:09 ] なんか想像力の豊かな人がいるみたいだなw
828 名前:デフォルトの名無しさん mailto:sage [2009/03/16(月) 11:52:14 ] 教祖の教えだけに従うから宗教なんだろ。 教祖がこうだと言えば、反論せず賞賛するだけ。反論したら異教徒として火あぶりにされる。 plやpyの採用例に比べると、rbの採用例って驚くほど少ないから、実用面では厳しいよね。 学術研究ユーザが多いのかもしれない。
829 名前:デフォルトの名無しさん mailto:sage [2009/03/16(月) 11:55:59 ] MLとか読んでる?たまにmatzもぼこられてたりするぞ ただ最終決定権(の多く?)がmatzにあるのをみんなが認めてるってだけじゃないのか
830 名前:デフォルトの名無しさん mailto:sage [2009/03/16(月) 11:59:29 ] イメージで言ってるだけだろ。不満なら完全民主制の言語でも作ればいい。
831 名前:デフォルトの名無しさん mailto:sage [2009/03/16(月) 13:37:50 ] >>829 matzが「コミット権取り上げますよ?」て言われたこともあったな
832 名前:デフォルトの名無しさん mailto:sage [2009/03/16(月) 17:36:49 ] >>831 マジですか?w
833 名前:831 mailto:sage [2009/03/16(月) 17:57:01 ] >>832 今探しなおしてきた ttp://blade.nagaokaut.ac.jp/cgi-bin/vframe.rb/ruby/ruby-dev/29649?29386-29727 微笑ましい一幕です(悪い意味じゃなくね)
834 名前:デフォルトの名無しさん mailto:sage [2009/03/16(月) 18:22:27 ] ワロタ
835 名前:デフォルトの名無しさん mailto:sage [2009/03/16(月) 18:23:20 ] その後の言い訳がまた笑えるw
836 名前:デフォルトの名無しさん mailto:sage [2009/03/16(月) 18:24:46 ] >>833 ワロタw サンクス
837 名前:デフォルトの名無しさん mailto:sage [2009/03/16(月) 18:26:10 ] ていうか、開発MLみたいなとこでも草生やしたりすんだなw
838 名前:デフォルトの名無しさん mailto:sage [2009/03/16(月) 18:29:46 ] 基本的にはしない 無くても議論はできるからだ が、草生やすのが最適だと思われれば躊躇うことはない
839 名前:デフォルトの名無しさん mailto:sage [2009/03/16(月) 20:52:55 ] えーと、いわゆる優しい独裁者モデル? なんか違う肝。
840 名前:デフォルトの名無しさん mailto:sage [2009/03/17(火) 00:30:47 ] 1.9.1のtrunkは6日から進んでないけど、なんか大きな変更をやってるの?
841 名前:デフォルトの名無しさん mailto:sage [2009/03/17(火) 00:37:39 ] コンビニ増えすぎだよな
842 名前:デフォルトの名無しさん mailto:sage [2009/03/17(火) 08:58:45 ] >>840 trunkはとっくに1.9.2devだよ。今見たら昨日も更新してた。 それともbranches/ruby_1_9_1のこと?
843 名前:デフォルトの名無しさん mailto:sage [2009/03/17(火) 09:45:19 ] >>842 そなの? ホームページの最新版スナップショットとやらが(2009/03/06 04:13:00)から更新されてないので気になったんだけど。 1.8.8devの安定版スナップショット(2009/03/17 04:19:26)は毎日更新されているから。
844 名前:デフォルトの名無しさん mailto:sage [2009/03/17(火) 10:13:24 ] >>843 ああ、そっち見てたのね。 こっちはSubversion見てたもんで。
845 名前:デフォルトの名無しさん mailto:sage [2009/03/17(火) 22:16:57 ] >>843 smn
846 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 08:52:33 ] >>843 についてIRCの方で報告があった 今は直ってます
847 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 09:59:27 ] >>846 サンクス
848 名前:デフォルトの名無しさん mailto:sage [2009/03/19(木) 11:21:20 ] 配列をN個に(ほぼ)等分する必要があって、 グネグネしたコードを書いた。 で、気に入らないのでちょっと書き直してみた。 Ruby神、リファクタリングよろ。 メソッド名は堪忍してくんろ。 def equally(a, n) sizes = [].fill(a.size / n, 0, n) (0...(a.size % n)).each {|i| sizes[i] += 1} #p sizes sizes.inject([]) {|r, size| sub = a.slice!(0, size) break r if !sub || sub.size < 1 r << sub } end (1..20).each {|i| a = (1..i).to_a p a p equally(a, 3) puts }
849 名前:デフォルトの名無しさん mailto:sage [2009/03/19(木) 11:31:06 ] Enumerable#each_slice では用が足らんのか 面倒じゃのう
850 名前:デフォルトの名無しさん mailto:sage [2009/03/19(木) 11:41:56 ] リファクタリングとかいうレベルじゃないくらい別モンだけど def equally(a,n) result = [] div,mod = a.size.divmod(n) until a.empty? result << ( 0 < mod ? a.shift(div+1) : a.shift(div) ) mod -= 1 end result end
851 名前:デフォルトの名無しさん mailto:sage [2009/03/19(木) 12:01:16 ] def equally(a, n) sizes = [].fill(a.size / n, 0, n) (0...(a.size % n)).each {|i| sizes[i] += 1} sizes.map {|size| a.shift(size) } end
852 名前:デフォルトの名無しさん mailto:sage [2009/03/19(木) 16:24:32 ] aは破壊しちゃっていいのか? # 非破壊バージョン def equally(a, n) result = [] div,mod = a.size.divmod(n) (Array.new(mod, div+1) + Array.new(n-mod, div)).inject(0) do |i, m| result << a[i, m] i + m end result end
853 名前:848 mailto:sage [2009/03/19(木) 17:02:41 ] >>849 Enumerable#each_sliceは1.9からは組み込みですか。使ったことなかったです。 >>850 なるほど。modを減らしていくほうが、自分の元の思考ともあってます。 >>851 なるほど。breakさせないほうがメソッドの動作としては自然かも。その発想頂きます。 >>852 非破壊のほうが使いやすいですよね。その発想いただきます。 shiftに引数渡せるの知らなかったんで…、 などといいつつ手元の1.8.6では使えないのでやっぱりslice! def equally(a, n) tmp = a.dup (0...n).inject([]) {|r, i| r << tmp.slice!(0, a.size / n + (i < a.size % n ? 1 : 0)) } end くっ…。見にくくなっただけのような。 さらにメソッド名がいかんともしがたい。
854 名前:デフォルトの名無しさん mailto:sage [2009/03/19(木) 17:06:33 ] はうっ。mapでよかったんだった。 def equally(a, n) tmp = a.dup (0...n).map {|i| tmp.slice!(0, a.size / n + (i < a.size % n ? 1 : 0)) } end
855 名前:デフォルトの名無しさん mailto:sage [2009/03/20(金) 21:24:14 ] Rubyでothelloをつくりたいのですが 何から始めればよいでしょう
856 名前:デフォルトの名無しさん mailto:sage [2009/03/20(金) 21:25:38 ] つpc11.2ch.net/test/read.cgi/tech/1235727504
857 名前:デフォルトの名無しさん mailto:sage [2009/03/20(金) 21:31:56 ] >>855 とりあえずCUI版tic-tac-toe作れ。 出来たらそれのGUI版を作って基礎固め。 Reversiはその後だな。
858 名前:デフォルトの名無しさん mailto:sage [2009/03/20(金) 21:46:42 ] 間にGUI版を作るのはなぜ?
859 名前:デフォルトの名無しさん [2009/03/20(金) 22:28:27 ] >>855 すでに誰か作ってないかあるものを探すところから
860 名前:デフォルトの名無しさん mailto:sage [2009/03/20(金) 22:49:32 ] 勉強のために作りたいんだろ ○×ゲームを先に完成させてから考えろというのは妥当だ
861 名前:デフォルトの名無しさん mailto:sage [2009/03/20(金) 22:55:37 ] マジレスするとオセロはかなり難しい 段階踏んで作るのが間違いない 最初からオセロだけ目指したら絶対挫折する
862 名前:デフォルトの名無しさん mailto:sage [2009/03/20(金) 23:09:34 ] 初心者スレか宿題スレに誘導するのが一番妥当かつ親切じゃないかと思うんだが。 pc11.2ch.net/test/read.cgi/tech/1235727504/ pc11.2ch.net/test/read.cgi/tech/1200175247/
863 名前:デフォルトの名無しさん mailto:sage [2009/03/20(金) 23:11:48 ] 話すこと終わっちゃった感もあるな
864 名前:デフォルトの名無しさん mailto:sage [2009/03/20(金) 23:19:34 ] オセロって作った人のレベル以上に強くならないって言うけどどうなんだろ
865 名前:デフォルトの名無しさん mailto:sage [2009/03/20(金) 23:21:03 ] 「Rubyで」という部分を除けば完全にスレ違い
866 名前:デフォルトの名無しさん mailto:sage [2009/03/20(金) 23:27:51 ] まず、質問した人はオセロ盤を作りたいのか、思考モジュールを作りたいのか はっきりしたほうがいいな。後者はRuby向きじゃないと思うが。
867 名前:デフォルトの名無しさん mailto:sage [2009/03/20(金) 23:43:32 ] >>865 「Rubyに関する部分」を除いたらあらゆるものがスレ違いなんだが
868 名前:デフォルトの名無しさん mailto:sage [2009/03/20(金) 23:50:26 ] そしてMatzに関する部分だけが残った。
869 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 00:08:10 ] 初心者であればあるほど、言語固有の事情と言語非依存な部分の切り分けは出来ないからのう。
870 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 00:12:02 ] ありがとうございます 移動します
871 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 00:12:49 ] >>867 Ruby自体がいろんな他の言語のいいとこどりだから すべての話題がスレ違い扱いされても文句言えない
872 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 01:35:48 ] 実はRubyは初めてでも、 アルゴリズムはめちゃくちゃすごい奴だったりしてな
873 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 01:52:43 ] >>872 大丈夫 すごい人は放置されても自力で出てくる
874 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 01:54:04 ] 誘導しても結局ゴミみたいな雑談してるだけという
875 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 03:04:44 ] オセロの対戦アルゴリズムは大変だろうな。
876 名前:デフォルトの名無しさん [2009/03/21(土) 11:36:12 ] 古典的なα-β法とかでシンプルに作ってやれば、 とりあえずそれなりに動く思考ルーチンは簡単に作れるyo! 強くするのはその後の課題になるけどな。
877 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 12:12:26 ] 全部で60手のうち 序盤20手くらいは定石がある 終盤40手くらいからは読み切れるんだろうけど 中盤20手〜40手をどうするかが課題 あとはすれち
878 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 14:44:48 ] オセロは必勝法がもう分かっているから、 いかに人間に遊ばせてあげるか、だよ。
879 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 15:18:43 ] >>878 初耳
880 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 16:49:03 ] >>878 は嘘。 ただ、完全先読みで読み切られちゃうんで、そうとうの高段者でも 劣勢になったらひっくりかえせなくなっている。
881 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 16:49:50 ] 「終盤は」を付け忘れた。
882 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 18:00:43 ] 読み切られて負けるの分かってる状態よりも 引き分け前後の微妙なところで終盤にもつれる方が ゲームとして面白いのは確かだよね 苦行をしたい訳じゃなくて遊びたいんだから
883 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 18:03:01 ] 相手がコンピュータの場合と人間の場合で戦略は違う 自分がまけそうなときに分かりやすい最善手を打ち続けるより 悪手でも相手が間違いやすいややこしい手を打った方が良いって 聞いたことはある
884 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 20:06:44 ] そういう変則手って、相手が人間の時こそ有効なんじゃないの?
885 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 21:04:39 ] そうだね
886 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 21:05:26 ] 相手が人間の時の話なんだが
887 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 21:06:07 ] うほ
888 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 21:27:35 ] 囲碁くらい複雑になると顕著だね 悪手とは言えない手でわざと難しく難しく打つやり方
889 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 22:29:26 ] オセロに必勝法があるなら、 先手か後手か決まった時点で勝負あったになるよな すべての手を洗い出しても必勝法はないってことか? やってみてなかったのか、やってないのかどっちだろう 将棋はめちゃくちゃ複雑だというが、 オセロでもすべての手を洗い出すことはできないのだろうか
890 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 22:32:23 ] >>889 ゼロサム完全情報の二者間のゲームには必勝法が存在する。 オセロは6x6なら後手必勝というのはすでに解析済み。 8x8は後手必勝ぽいけどまだ解析中。
891 名前:890 mailto:sage [2009/03/21(土) 22:35:07 ] > ゼロサム完全情報の二者間のゲームには必勝法が存在する。 あと、手数が無限にならないことも条件として必要だった。
892 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 22:35:25 ] 「確定」じゃないなら必勝法はないけどな
893 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 22:40:14 ] まあもし必勝法が見つかったら10×10くらいにすればいいのかな >>890 オセロには引き分けもあるが、それでも必勝法は必ずあるの?
894 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 22:42:10 ] >>890-891 ふおおお、なるほど。6x6までは後手が必ず勝つのか。 完全情報というのは「手の内をさらす」ということでいいのか? たとえばじゃんけんは当然必勝法はないだろうが、 駒を隠す軍人将棋にも必勝法があるとは限らないってこと? 5x5ならおれのPC(クアッド、メモリ8G)とRuby1.9でも 現実的な日にちで計算可能だろうか。
895 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 22:44:50 ] ja.wikipedia.org/wiki/%E4%BA%8C%E4%BA%BA%E9%9B%B6%E5%92%8C%E6%9C%89%E9%99%90%E7%A2%BA%E5%AE%9A%E5%AE%8C%E5%85%A8%E6%83%85%E5%A0%B1%E3%82%B2%E3%83%BC%E3%83%A0
896 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 22:55:17 ] >>895 サンクス、これはおもろい
897 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 23:00:01 ] >>896 高校生かな? 大学行くと1年生の教養の情報系の授業で習うぞ
898 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 23:06:09 ] いい年こいていちいちひねたレス付けないと気が済まないのかね
899 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 23:11:44 ] >>897 に他意悪意を感じ取るのは曲芸または深刻な学歴コンプレックス
900 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 23:13:23 ] >>897 ゲーム理論習わないところもあるよ 実際、俺も情報系の学部で4年目だけど習ってない
901 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 23:17:26 ] >>900 それはなんていうか大学に抗議したほうがよくないか 俺らは選択だった ゲーム理論という名前でテレビゲームの話だと思った人がいて半分くらいは寝てた
902 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 23:18:08 ] だいたい、大学生の誰もが「教養の情報系の授業」を取ってるって前提がおかしいw 一般教養の講義を選択できない大学があるんだろうか どっちかというと、講義より「囚人のジレンマ」の話なんかから入る人が多いだろうし