ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

Rubyコミュの初心者質問箱2

  • mixiチェック
  • このエントリーをはてなブックマークに追加
前の初心者質問箱がコメント上限に達したので、新しくトピックを作らせてもらいました。

ちょっとした疑問や、新たにトピックを作成するまでもない質問、その他諸々にお使いください。

コメント(494)

『たのしいRuby』をどこまで読み進めたのか分からないのでなんともコメントできませんが。
クラスとオブジェクトについて解説があるはずですから、そこまで読み進めてください。

>>[455]
わかりました
とりあえず、このまま進んでみます
ありがとうございます
ひとり遊び用のちょっとしたゲームを書いてみようと挑戦してみたのですが
思った以上に処理が複雑になりそうだったので質問させてください。

1)4枚1種として 12種48枚のカ-ドを作ります
2)シャッフルして、左から4枚ずつ下のほうに並べていきます
3)同じ種のカードが横に並んだ時は2枚とも取り除いて間を詰めます
4)次の段に移って、置いたカードのひとつ前の列、同じ列、次の列
 に同じ種のカードが出てきたときは、同様に取り除いて間を詰めます
5) 3),4)を繰り返し、最終的に残ったカードを返します

例)
A0,41,60,82
1A,52,43

↓41,43が同じ種なので取り除き、間を詰めて表示

A0,60,82,1A
52

こんな風にやっていこうと思っています

とりあえず、1),2)まではなんとかできました
同じ種のカードかどうかのチェックは、正規表現でいけるのでは?と思います
カードを取り除いて、間を詰め表示する
ここをどう処理したものか・・・
最初pop、shiftでいけるかとも思ったんですが、難しそうな気がしてきました
どのように処理したらいいか、手がかりでも教えていただけないでしょうか?

とりあえず、現時点ではここまでは出来たということで記述を載せときます

card = []
all_card = []

4.times do |e| card << e.to_s end
12.times do |i| all_card << card.collect {|e| i.to_s(16).upcase + e} end

all_card.flatten!
all_card.shuffle!

何も処理せず、表示するだけなら
12.times do |e| p all_card[4*e..(4*e+3)] end
で、簡単なのですが・・・

よろしくお願いしますm(_ _)m
Card = Struct.new :suit, :num
class Card
def like(other)
other and self.num == other.num
end # def like(other)

def to_s
'%s-%02d' % [self.suit, self.num]
end # def to_s
end # class Card

deck = ['S', 'H', 'D', 'C'].inject([]) do |d, suit|
d + (1..12).map{ |n| Card.new suit, n }
end.shuffle # deck = ['S', 'H', 'D', 'C'].inject([]) do |d, suit|

def deck.to_s(n = 4)
each_slice(n).map{ |row| row.map{ |c| c.to_s }.join(' ') }.join("\n")
end # def deck.to_s(n = 4)
deck.display; "\n\n".display

Condition = Struct.new :row_position, :column_position
Conditions = [
Condition.new(3, 1), # 横に並んだ時
Condition.new(0, 3), # 次の段の一つ前の列
Condition.new(4, 4), # 次の段の同じ列 # row_position 4 の下記否定チェックはい>つも成功する
Condition.new(3, 5), # 次の段の次の列
]
def deck.check(i)
Conditions.each do |c|
if (i % 4 != c.row_position) and self[i].like(self[i + c.column_position])
return [i, i + c.column_position]
end # if (i % 4 != c.row_position) and self[i].like
end # Conditions.each do |c|
false
end # def deck.check(i)

i = 0
while i < deck.size do
#puts i
if ij = deck.check(i) then
puts ij.map{ |k| '%d: %s' % [k, deck[k]] }.join(', ')
deck[ij[0]], deck[ij[1]] = nil, nil
deck.compact!
deck.display; "\n\n".display
i = 0
else# if ij = deck.check(i)
i += 1
end # if ij = deck.check(i)
end # while i < deck.size do
deck.display; "\n\n".display
あっさりと回答を・・・

早速、実行してみました。
若干考えてたのとは、違う部分もありますが
(カードは、トランプではなく花札だったので)
課題は、処理の仕方だったのでお手本として参考にさせていただきます。
ありがとうございましたm(_ _)m
こんにちは。最近勉強し始めました初心者ですが相談が…
html内にある"think"という単語を"XXXXX"に書き換えるプロキシを作っているんですが
このページでは書き換えができて、このページでは書き換えができていない。という状態です。
おそらく文字コードの関係でUTF-8のページでは書き換えができていない。
ということはわかったのですがどう調べても解決できません…
すべてのページで書き換えをするにはどうしたらいいでしょうか?ご指導よろしくお願いします
以下がコードです

#!/usr/bin/ruby -Ku
require 'webrick/httpproxy'
require 'uri'
require 'kconv'

handler = Proc.new() {|req,res|
if res['content-type'] =~ /text\/html/
res.body.gsub!(/think/, 'XXXXX')
end
}

s = WEBrick::HTTPProxyServer.new(
:Port => 8080,
:ProxyContentHandler => handler
)

Signal.trap('INT') do
s.shutdown
end

s.start
連投すみません…
こちらの動作環境ですが
OS:windows7
Rubyのバージョン:ruby 1.8.7 (2010-12-23 patchlevel 330) [i386-mswin32]
になります。そして色々と調べて考えてみたところ無事に解決できました。以下がそのコードです

#!/usr/bin/ruby -Ku
require 'webrick'
require 'webrick/httpproxy'
require 'kconv'
require 'stringio'
require 'zlib'

handler = Proc.new() do |req, res|
if res['content-type'] =~ %r!text/html!
body = res.body
if res.header["content-encoding"] == "gzip"
Zlib::GzipReader.wrap(StringIO.new(res.body,'rb')){|gz| body = gz.read}
res.header.delete("content-encoding")
res.header.delete("content-length")
end
utf_str = body.toutf8
utf_str.gsub!(/think/, 'XXXXX')
code = Kconv.guess(body)
res.body = utf_str.kconv(code, Kconv::UTF8)
end
end

s = WEBrick::HTTPProxyServer.new(
:Port => 8080,
:ProxyContentHandler => handler
)

Signal.trap('INT') do
s.shutdown
end

s.start

こちらを使うとほとんどのページで"think"が"XXXXX"に書き変わりました。
しかしutf_str.gsub!(/think/, 'XXXXX')の部分をutf_str.gsub!(/あいうえお/, 'かきくけこ')
にしてhtml中の”あいうえお”を”かきくけこ”に書き変えようとしたのですが
全く書き変わりません…文字コードによる問題だと思うのですが、ご指導よろしくお願いします
@aite = gets.chomp

半角文字の入力は問題ないのですが、しりとりゲームで日本語(ひらがな)入力をしている部分が、Windows 7のPCでは問題なく動いていましたが、Windows 8のPCに変えると動かなくなりました。
OSの違いで、文字入力に違いがあるものでしょうか?
心如さん

当方でも現象を確認しました。
chomp は無関係で、gets (Kernel#gets) の不具合のようですね。

ちなみにRuby 2.0.0 では直っていて、探したらチケットも切られていました。

http://www.ruby-forum.com/topic/4407969

このチケットに従って ./win32/win32.c を修正した 1.9.3 p392 をビルドしたところ
問題なくマルチバイト文字の入力ができるようになりました。

MLに報告されてはいかがでしょうか
追記です。

不得手な英語を頑張って読んでみたところ、元々のWindowsに コンソールからの
ReadFile の処理にバグがあって、Ruby側で./win32/win32.c の中で回避策の
コードがあった。
Windows8 でそのバグがフィクスされたので、回避策コードをスキップするパッチ
を当てた。

ということのようです。(間違ってたら指摘よろしくお願いします>英語得意なかた)
> 465
一応、ruby-list に報告のメール投げておいてみました。
>>[465]

 従来から、WindowsのコンソールからのReadFileの処理にバグがあって、そのバグがWindows8で直された。でも、そのバグに対応するための回避策がRubyに埋め込まれた状態になっていたということでしょうか。

 ご親切に教えてくださり、誠にありがとうございます。
>467 I worte:
>> 465
>一応、ruby-list に報告のメール投げておいてみました。

その後について、一応ご報告いたします。

> MLに投げた報告
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/49247

> Ruby コミッタ(なかむら(う)さんからの返信)
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/49268

こんにちは。開発環境の作り方についてご質問させてください。

OS : mac OSX 10.8
エディター : Sublime text 3

macでRuby開発を行うとき、どのような手順で導入していけば良いでしょうか?
Rubyのgemをターミナルからインストールしたんですが、上手くrequireできませんでした。windowsにRubyを入れると、最初からgemがいくつかインストールされているのですが、macでは何もインストールされていないようです。
>>[473]
まずエラーメッセージを書きましょう!
riでsplitメソッドの説明を見ると
[1, 2, 3, 4, 5].split(3)
# => [[1, 2], [4, 5]]
との例があるのですがそのとおりに実行できません。
そもそもsplitってStringクラスのメソッドだと思うのですがArrayでもつかえるのですか?
>>[477]

Ruby のバージョンが分からんのでなんとも言えんのですが。。。
Array#slice と勘違いされてませんか?

Ruby 2.1 on Cent OS
[alpha@grape ~]$ ruby21 -e 's=""; p s.methods.grep(/split/)'
[:split]
[alpha@grape ~]$ ruby21 -e 's=""; p s.methods.grep(/slice/)'
[:byteslice, :slice, :slice!]
[alpha@grape ~]$ ruby21 -e 'a=[]; p a.methods.grep(/split/)'
[]
[alpha@grape ~]$ ruby21 -e 'a=[]; p a.methods.grep(/slice/)'
[:slice, :slice!, :each_slice, :slice_before]
[alpha@grape ~]$

Ruby1.9 on Windows
D:\home\alpha>ruby -e "s=''; p s.methods.grep(/split/)"
[:split]

D:\home\alpha>ruby -e "s=''; p s.methods.grep(/slice/)"
[:byteslice, :slice, :slice!]

D:\home\alpha>ruby -e "a=[]; p a.methods.grep(/split/)"
[]

D:\home\alpha>ruby -e "a=[]; p a.methods.grep(/slice/)"
[:slice, :slice!, :each_slice, :slice_before]
>>[478]
すみません
Stringクラスのsplitではありませんでした。
同じ名前のメソッドがあって振る舞いも違いややこしいですね


(from gem activesupport-4.2.4)
=== Implementation from Array
------------------------------------------------------------------------------
split(value = nil) { |element| ... }

------------------------------------------------------------------------------

Divides the array into one or more subarrays based on a delimiting value or
the result of an optional block.

[1, 2, 3, 4, 5].split(3) # => [[1, 2], [4, 5]]
(1..10).to_a.split { |i| i % 3 == 0 } # => [[1, 2], [4, 5], [7, 8], [10]]



>>[479]

私は、素のRuby について言及していましたが、
> (from gem activesupport-4.2.4)

ということであるなら話は変わってきますね。
Active support Ruby は使ってないのでググってみましたが、確かに標準のArrayクラスを
拡張してArray#split メソッドが使えるようになっているようです。


>同じ名前のメソッドがあって振る舞いも違いややこしいですね

まあ、それがダックタイピングってもんだと思いますが。。。
(振る舞いが違うと使いづらいですけど、[447] を見る限り、振る舞いが異なっているように
は見えないですけど)

静的言語の経験が長いと気持ち悪いですけど(私も、元々はC畑の人間だったので
最初はそうでしたが)、慣れちゃうとこのいい加減さ(言葉悪いな^^;) は、それはそれでコード
書くのがラクでいいですよ(^^)


>>[479] ( >>[480] ) ※ 追記です。

そう言えばつい最近、RAILS 突っ込んだマシンがあったのを思い出して試してみました。


[alpha@apple ~]$ irb
irb(main):001:0> require 'active_support'
=> true
irb(main):002:0> require 'active_support/core_ext'
=> true
irb(main):003:0> a = ['taro', 'jiro', 'hoge', 'saburo', 'hoge', 'shiro']
=> ["taro", "jiro", "hoge", "saburo", "hoge", "shiro"]
irb(main):004:0> a.split 'hoge'
=> [["taro", "jiro"], ["saburo"], ["shiro"]]
irb(main):005:0>


ちゃんと[477] で期待した通りの動作してますね。
これからrubyの勉強を始めようとしている初心者です。

mac上に環境構築をしようと思い、
homebrewをチェックしたら(なぜか入っていた)、
エラーを吐き出しまくりで使い物になりません。
どうやらろくに使いもしないままel capitanまでOSをあげてしまったせいらしいです。

アンインストールして入れ直そうと思うのですが、そのコマンドを打ち込むのも失敗続きで・・・
これってフォルダをゴミ箱にポイとかじゃダメなんですかね?

(アホみたいな質問かもしれませんが致命的な行動なのかどうか本当にわからないのですいません!!)
>>[482]
以下のHPに詳しく書いてあります
http://blog.h-wd.info/2015/10/08/mac-os-x-10-11-el-capitanにhomebrewをインストールする方法/
私はTimeMashineでバックアップを取っていたので戻しました。対処法が確立されるまでel-capitanを使わないか、新規でインストールして対応しようと思っています。
はじめまして。
最近 ruby on rails を学校で学び、
簡単なプロトタイプアプリをherokuで公開できるくらいにはなったのですが、
そこで受講期間が過ぎてしまい

アプリの本番アップへの流れについて学べませんでした。
そういった知識も勉強していきたいのですが
おすすめの参考書ありますでしょうか?

awsなどでがんばりたいなとぼんやりした目標です

よろしくお願いいたします

はじめまして、引きこもりを抜け出したいと思い、その一環としてRubyに賭けたcider610と申します。
一応、Javaのシルバーをかつては取得しています。
しかし、オブジェクト思考に随分苦労した記憶しかありません。
ですので、バカみたいな質問をするかと思いますが、よろしくお願いいたします。ところで、自己紹介はここでよかったのでしょうか?
LINUXでルビーを使われている方はいらっしゃいますか?
どんなアプリケーションをインストールしておけばいいんでしょうか?
『たのしいRuby第5版』の各章末にある練習問題のレベルが高いような気がするのは、気のせいでしょうか?例えば、後ろの章を読み進めないと解けないというような問題が出てくるのはどんなものかと思うのですが…
うわー、恥ずかし!
Silverの試験、1回でpassできず。しかも後2問分の点差。この結果って、割と簡単にクリアできないんだよね…
質問させていただきます。
refeでassertのメソッドを調べたいのですが組み込みでないのでヒットしません。
どうすれば検索できるようになるでしょうか?
宜しくお願い致します。
ん。riでは検索できた。refeにないのは仕様でしょうか?
質問では無いのですが、感想を聞かせてください

特に悪い奴

集団ストーカー被害が酷くて仕事をセーブしていた当時に作ったシステムを
最近集団ストーカー被害対策で開発している組み込み系のソフトとセットで公開しました。

https://github.com/KakuheikiCreator/Rails

開発したリソースと外部設計書ぐらいまでを公表しております。

大分以前に開発したリソースを、急いでかき集めてリリースしたので
多少問題あるかも知れませんが、興味のある方はご覧になってみて欲しいです。

出来れば感想でも聞かせてもらえるとうれしいです。

そう、悪い感想こそ聞きたい

ライセンスはMITライセンス

開発したのは90年代末頃に考えていた、認証技術

つまりシングルサインオンの技術を使ったシステムで、OpenIDの検証の為に作ったシステムです。

ちなみに某サグラダファミリアの一部に使われているシングルサインオンの部分の開発者と
一緒に仕事をしていたのですが(思いついたの私だと疑っているので、多少詳しいので)

当時、あそこで散々睡眠薬や精神安定剤飲まされて、酷い目に遭わされました。

家族も何も知らないし、当然違法なんですけれど、共謀する精神科医達がいる様で
良く行われる工作の様です。

当然、何度も病院で睡眠薬が検出されており、診断書を貰っているので
告訴状を出したのですが、そもそもこの集団ストーカー犯罪には警察関係者も関わっている様で
現状においても誤魔化そうとされております。

6通もの診断書あるのに精神病呼ばわれする警察なんて
皆さん想像もつかないでしょうけれど、日本の警察機構はそんな人々です。

マスゴミや大企業から小企業までのブラック企業も含めて、皆さん注意してね
それとマスコミしつこい

以前盗聴被害が酷いのでマスコミが盗聴している隣室調査して
実際に大手番組制作会社の奴が判明した際の、探偵さんによる調査報告書を
添付して検察にも告訴状をだしているけれど

色々と不味いらしくて、返答すら来ない・・・

警察官が恫喝して告訴状の受け取り拒否をしようとしている

世に出ると不味い音声データ添付したのが悪かったのだろうか・・・

Ruby使いの人達の居る様な業界で、どれほどこんな犯罪が蔓延っているのか知りませんが

私大手の商社系列の有名IT企業に入り込んでいた際には、周囲のエンジニア達も
同様の被害について話題にしていましたので、IT業界では蔓延しているものと思います。

自民党の元大臣秘書官も、以前聞いたらそんな話をしていました。

皆さんは技術力を悪用しないで頑張ってね
mrubyについてはここで質問してもいいのでしょうか
>>[493]
回答があるとは限りませんがruby に関することなら遠慮なくどうぞ。

ログインすると、残り461件のコメントが見れるよ

mixiユーザー
ログインしてコメントしよう!

Ruby 更新情報

Rubyのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。