05/01/24 22:17:37
私は、ある大学の1年生です。今、情報処理の講義でRUBYを習っています。
その講義で、期末テストとして課題が出たのですが、プログラミング初心者の私には
全然歯が立ちません。締め切りは1/31です。プロも皆さんには簡単な
問題かもしれませんがどうか教えてください。
課題は以下の通りです。
2:RUBY
05/01/24 22:18:29
年月を与えたとき、下のようなカレンダーを出力するプログラムを作る。
西暦1年1月1日は月曜日である。4年に一度閏年がある。しかし、100の倍数の年は閏年ではない。しかし、400の倍数の年は閏年である。
平年の1月1日が火曜日であったとすると次年の1月1日は水曜日である。
従って、日、月、・・・、土を、0、1、・・・、6と数字で表すと、西暦n年の1月1日の曜日kは、
n+(n-1)/4-(n-1)/100+(n-1)/400
を7で割った余りである。k=n % 7又2月の日数mは、
m=28+n/4*4/n-n/100*100/n+n/400*400/n
と表せる。ここで割り算は全て整数同士の割り算(切り捨て)である。
1.2月以外の日数を与える。
2.作成したいカレンダーの年(n)と月(m)を与える。
3.2月の日数を計算する。
28+n/4*4/n-n/100*100/n+n/400*400/n
4.1月1日の曜日を表す数字(0、1、・・・、6)を計算する。
(n+(n-1)/4-(n-1)/100+(n-1)/400) % 7
5.今対象としている月の第1日目の曜日を、上で求めた1月1日の曜日を表す数値に、
今対象とする月の前の月までの日数を加算し、7で割った余りとして求める。
6.下のようなカレンダーをHTMLの表で出力する。
1989年 4月
日 月 火 水 木 金 土
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30
3:RUBY
05/01/24 22:19:48
<私のやってみたこと>
まず、それぞれの月を番号とし、日数を要素として配列を考えてみましたが
全然解けません。講師は、「配列なんかわざわざ使わなくてもいい」
と言っていたので、解く糸口も失ってしまいました。
どうか、解答のプログラムを教えてください。
4:デフォルトの名無しさん
05/01/24 22:44:38
>>1
> その講義で、期末テストとして課題が出たのですが、プログラミング初心者の私には
> 全然歯が立ちません。締め切りは1/31です。プロも皆さんには簡単な
うそつけ。歯が立たないのは、おまえの頭が弱いからだろうが。
5:デフォルトの名無しさん
05/01/24 22:45:33
Rubyのマニュアルはあるか?
ないなら探せ。
講師は>2の文章が理解できるか君を試しているんだ。10時間考えても分からないなら「グレゴリオ歴」を調べよ。
6:デフォルトの名無しさん
05/01/24 22:49:19
>5
わかりました。自分でやってみます。ありがとうございました
7:RUBY
05/01/25 00:16:51
インターネットの掲示板に初めて書き込んだのですが、掲示板って、やっぱりこわいところですね。
罵声や無視がたくさんあるところだと思っていました。さっそく>>4のデフォルトの名無しさんに怒られてしまいました。
でも、名無しさんが言うように自分の力でやった方がためになりますよね。
図書やマニュアルを使って自分で考えてみたいと思います。>>5の助言もありがとうございました。
プログラミング分野の人たちは優しいですね。
8:デフォルトの名無しさん
05/01/25 00:19:46
Rubyが宿題になる学校も出てきたのか
9:デフォルトの名無しさん
05/01/25 00:21:43
>>8
> Rubyが宿題になる学校も出てきたのか
宿題には、アカデミズムの世界以外ではまったく見ない言語を使ったりしますが。
10:デフォルトの名無しさん
05/01/25 00:25:12
>>1
と言うか、期末テストなら自分で考えた方が後々にも役立って良いよ、1/31までは十分長いからね。
11:デフォルトの名無しさん
05/01/25 00:25:45
Rubyはアカデミズムの世界以外ではまったく見ない言語な訳でつね。
12:デフォルトの名無しさん
05/01/25 00:29:44
>>8
HSPを教える学校があるこんな世の中じゃ
13:デフォルトの名無しさん
05/01/25 00:35:12
>>11
> Rubyはアカデミズムの世界以外ではまったく見ない言語な訳でつね。
違うだろ。
14:デフォルトの名無しさん
05/01/25 00:36:31
>>13
こんなに露骨なネタにマジレスって(ry
15:デフォルトの名無しさん
05/01/25 00:39:54
>>12
> HSPを教える学校があるこんな世の中じゃ
教えるだけまし。
わたしが学生の時には、
「次回からC言語を使うので、来週までにマスターしておいてください」
だった。
16:デフォルトの名無しさん
05/01/25 00:41:17
>>15
何と言うか、教える気NULLだな。
17:デフォルトの名無しさん
05/01/25 07:49:10
>>8
うちの大学では1~2年前期はCで2年後期にRubyだな
18:デフォルトの名無しさん
05/01/25 08:39:00
日数配列を用意しないで書く方法がわかんないあ・・・
19:デフォルトの名無しさん
05/01/25 10:16:13
ifやcase使えって事かもw
20:デフォルトの名無しさん
05/01/25 10:29:18
配列なんてなにに使うんだ?
21:デフォルトの名無しさん
05/01/25 10:38:35
>18
だから>2を読めって。分からないなら質問しろ。丸投げはダメだ。こんなアホな宿題を他人にやらせてたら、ダメ人間になっちゃうゾ!
22:デフォルトの名無しさん
05/01/25 11:07:15
>>21
と言うか、>>2を与えられてもまだダメだというのは、よほど無能だと
言うことだから、こいつにはプログラミングはさっさとあきらめて、
コンピュータ関係の業界に来ないで欲しいと言いたいな。
23:デフォルトの名無しさん
05/01/25 11:09:25
p 18.id != 1.id#=>true
です;
とりあえず配列使って書けたけど
>19さんの言う通りifとかcaseを使うのかな・・・(;´Д`)ウーン
24:18
05/01/25 11:10:10
Σ(´Д`;)ガーン・・・叩かれてる;
25:デフォルトの名無しさん
05/01/25 20:29:39
class Ichi
attr_reader(:nisuuu)
def initialize
@nisuuu = Hash.new
@nisuuu[1] = 31
@nisuuu[3] = 31
@nisuuu[5] = 31
@nisuuu[7] = 31
@nisuuu[8] = 31
@nisuuu[10] = 31
@nisuuu[12] = 31
@nisuuu[4]= 30
@nisuuu[6]= 30
@nisuuu[9]= 30
@nisuuu[11]= 30
end
end
class Ni
attr_reader(:n, :m)
def initialize
print "年と月を入力しろ\n"
print "年>>>"
@n = gets.chomp.to_i
print "月>>>"
@m = gets.chomp.to_i
end
end
26:デフォルトの名無しさん
05/01/25 20:31:35
class San
attr_reader(:ni)
def initialize(n)
@ni = 28 + (n / 4 * 4 / n) - (n / 100 * 100 / n) + (n / 400 * 400 / n)
end
end
class Yon
attr_reader(:ichiyoubi)
def initialize(n)
@ichiyoubi = (n + (n - 1) / 4 - (n - 1) / 100 + (n - 1) / 400) % 7
end
end
class Go
attr_reader(:myoubi)
def initialize(ichi, ichiyoubi, nigatsu, m)
@myoubi = ichiyoubi
for i in 1..(m-1)
nisu = 0
if i == 2
nisu = nigatsu
else
nisu = ichi.nisuuu[i]
end
@myoubi += nisu
end
@myoubi %= 7
end
end
27:デフォルトの名無しさん
05/01/25 20:34:16
配列使うな。
Rubyマニュアルで文法読め!
>19の助言を読め!
大馬鹿者!
28:デフォルトの名無しさん
05/01/25 21:08:12
>27
Rubyマニュアルって何ですか?
29:デフォルトの名無しさん
05/01/25 21:56:55
def qsort(s, first, last)
if first < last then
pivot = s[last]
i = first
j = last - 1
while true do
while i < last && s[i] < pivot do
i += 1
end
while j >= first && s[i] >pivot do
j -= 1
end
if i >= j then
break
end
つづきます。
30:デフォルトの名無しさん
05/01/25 21:57:26
temp = s[i]
s[i] = s[j]
s[j] = temp
i += 1
j -= 1
end
temp = s[i]
s[i] = s[last]
s[last] = temp
qsort(s, first, i-1)
qsort(s, i+1, last)
end
end
def quick_sort(s)
qsort(s, 0, s.size-1)
return s
end
s = [4,5,8,7,10,8,9,3,12,0]
p quick_sort(s)
クイックソートのソースなんですけど、何故か上手くならんでくれません…。
31:デフォルトの名無しさん
05/01/25 22:12:44
めちゃくちゃ!!
32:デフォルトの名無しさん
05/01/25 22:15:43
>>1
とにかくがんばれ
33:デフォルトの名無しさん
05/01/26 04:31:56
days =
case month
when 1,3,5,7,8,10,12
31
when 4,6,9,11
30
when 2
28
end
34:デフォルトの名無しさん
05/01/26 06:42:54
ついにRubyにも宿題スレかw
35:デフォルトの名無しさん
05/01/26 13:30:25
みんな、暖かく見守ってあげようよ
36:デフォルトの名無しさん
05/01/26 13:36:04
やりたくもない宿題を出されて困っている人がいるのだから、
詳しい人が変わりにやってあげるのが当然だと思います。
人間らしい思いやりの心を見せましょう。
37:デフォルトの名無しさん
05/01/26 13:50:23
>>29-30
誤 while j >= first && s[i] >pivot do
正 while j >= first && s[j] >pivot do
よく見んと判らんなw
38:sage
05/01/27 00:58:54
29です。
あああ、ありがとうございます!!!
動きましたーー!!たすかりました~~ホロリ
39:デフォルトの名無しさん
05/01/27 01:00:12
あ!あがってしまったw
40:デフォルトの名無しさん
05/01/27 08:54:33
ダメ人間決定
41:デフォルトの名無しさん
05/01/28 10:44:29
sage放置
42:デフォルトの名無しさん
05/01/28 19:11:54
あ!あがってしまったw
43:デフォルトの名無しさん
05/01/29 02:40:38
Rubyの授業の課題として出されたのですが、学生中にRubyを使うことはおそ
らくないので勉強していなかったのでまったくわかりません。誰か助けてい
ただけませんか?
・web上の適当な英文をもちいて、大文字、小文字を無視して、各アル
ファベッドについて、次に来る文字の頻度をカウントする。単語の終
わりでは次に来る文字は、空白、カンマピリオドなどである。数字も
含め、これらはアルファベッド以外の記号は、まとめてカウントする。
結果をHTMLの表として出力する。縦に最初の文字、横に次の文字とし
て分布を見る。
という問題ですが誰かお願いします!
44:デフォルトの名無しさん
05/01/29 02:43:59
わたしはもう寝ますが、明日までなので、朝までにやっておいてください。
コピペしてすぐ提出できるように、ちゃんと書いておいてください。
45:デフォルトの名無しさん
05/01/29 02:51:57
>わたしはもう寝ますが、明日までなので、朝までにやっておいてください。
コピペしてすぐ提出できるように、ちゃんと書いておいてください。
上の文は誰か他の人が書いたものなので。
ぜひお願いします!
46:デフォルトの名無しさん
05/01/29 02:55:49
「アルファベッド」
47:デフォルトの名無しさん
05/01/29 03:07:57
>>43
「アルファベット」でした。すいません。
48:デフォルトの名無しさん
05/01/29 03:30:15
>>43
タグはどうすんの? web上の英文て対象はHTMLを含むんだよね。
<p>baka</p>
なんてHTMLが送られてきたら、pは2回、bakaは1回てカウントするの?
それともpは無視?
49:デフォルトの名無しさん
05/01/29 03:32:16
あ、ごめん、文字ね。
50:デフォルトの名無しさん
05/01/29 04:16:34
>>43
作ってみたよー
require 'open-uri'
TARGET_URI = 'URLリンク(www.gnu.org)'
class CharCounter
NON_WORD_CHAR = 'OTHER'
def initialize
@buf = Hash.new{|h, k| h[k] = Hash.new(0)}
@before_char = NON_WORD_CHAR
end # def
def push(s)
s.gsub(/[\r\n]+/, '').split(//).each do |c|
c.downcase!
c = NON_WORD_CHAR if c !~ /[a-zA-Z]/
@buf[@before_char][c] += 1
@before_char = c
end
end # def
def sorted_each
@buf.keys.sort.each do |k|
yield k, @buf[k]
end
end # def
end # class
# 続く
51:デフォルトの名無しさん
05/01/29 04:17:19
# 続き
ALPHABETS = %w(a b c d e f g h i j k l m n o p q r s t u v w x y z)
ALPHABETS.push(CharCounter::NON_WORD_CHAR)
def print_html(counter, uri)
puts "<html><head><title>#{uri}</title></head><body><table border=1><tr><td> </td>"
ALPHABETS.each do |c|
puts "<th>#{c}</th>"
end
puts '</tr>'
counter.sorted_each do |prechar, freq|
puts "<tr><th>#{prechar}</th>"
ALPHABETS.each do |c|
puts "<td>#{freq[c]}</td>"
end
puts "</tr>"
end
puts "</table></body></html>"
end # def
def main(uri)
counter = CharCounter.new
open(uri) do |f|
f.each_line {|line|
counter.push(line)
}
end
print_html(counter, uri)
end # def
main(TARGET_URI)
52:デフォルトの名無しさん
05/01/29 04:41:19
こんなに長いプログラムを本当にありがとうございました。あと一つ質問が
あるんですけれども、このプログラムで作ったHTMLの表はどこで見られるの
ですか?
53:デフォルトの名無しさん
05/01/29 04:58:48
>>52
標準出力に出してる。だからなんかファイルにリダイレクトしてwebブラウザで開け。
例えば、vaka.rbとかいうファイルにスクリプトを書いてコマンドラインから、
ruby vaka.rb > baka.html
とかやればbaka.htmlができるからそれをブラウザで開くといい。
あ、あとRubyは1.8系が前提っすから、その辺よろしく。
54:デフォルトの名無しさん
05/01/29 05:13:42
確認できました!夜遅くまでいろいろとすいませんでした。これで何とか単
位ももらえそうです。本当にありがとうございました!!
55:デフォルトの名無しさん
05/01/29 12:48:19
お前北大だろ
56:デフォルトの名無しさん
05/01/29 12:49:26
これで済むと思うよな。
57:デフォルトの名無しさん
05/01/29 12:55:09
>>56
??
う、うん。思うよ。
58:RUBY
05/01/31 23:19:34
こんばんは、RUBYです。
今日、期末課題を提出しました。あれから、図書などを調べてプログラミングしてみました。
プログラムを完成させることはできなかったので、あまり良い成績はとれそうもありませんが、
一応、形にはなっていると思うので、それなりの評価はあるでしょう。
今日まで、掲示板を見ることができませんでしたが、課題の解答を沢山の人が作ってくれて
本当にありがとうございました。
今回の課題を作成しているうちにプログラミングに興味を持ったので、
休み中に何かに挑戦してみたいと思っているのですが、どんな言語から始めたらよいか、
どんな言語が将来役に立つか、プログラミング初心者が初めに読んだ方がよい図書は何か
などアドバイスがあったら教えてください。
59:デフォルトの名無しさん
05/01/31 23:22:59
最低
60:デフォルトの名無しさん
05/02/01 04:19:28
>>58
Rubyでいいじゃん
そんなにRuby使うの嫌か?
61:デフォルトの名無しさん
05/02/01 06:16:31
ま、Schemeでもやっとけ。
62:デフォルトの名無しさん
05/02/01 13:43:25
お前のやったことはカンニングだぞ
白血病で氏ね
63:デフォルトの名無しさん
05/02/01 15:18:51
>>58
> 一応、形にはなっていると思うので、それなりの評価はあるでしょう。
なんで? カンニングは評価くれんでしょ。
64:デフォルトの名無しさん
05/02/02 04:53:06
[1] 授業単元: RUBY
[2] 問題文はURLリンク(www.edu.ics.saitama-u.ac.jp)にあります。
[3] 環境 OS:UNIX 言語:RUBY
[4] 期限:2005年2月29日14:00まで
よろしくお願いします。
65:デフォルトの名無しさん
05/02/02 06:40:10
>>64
向こうで解こうとしてた者なんだが、これCじゃなかったの?
いや質問者が同一人物とは限らんのだが…
66:デフォルトの名無しさん
05/02/02 07:44:36
>>65
Cの課題だと思う
コンテスト
URLリンク(www.edu.ics.saitama-u.ac.jp)
== ■ 乱入者部門
* 履修者以外でも, もし乱入者がいれば (私も含めて)
* 「〆切後に改良したから試したい」「C 以外の言語で参加したい」も, こちらで
* 言語は, 端末室の UNIX 環境で使えることが条件
* 履修者・乱入者それぞれのチャンピオンで, 最終戦
67:デフォルトの名無しさん
05/02/03 06:37:06
>>66
ふむ。あと1ヶ月ほどあるのね。しかも乱入も可か。
乱入してみるかなw
68:RUBY
05/02/04 03:22:20
>>62
は?見てねーつってんだろ?あ?
パソコンばっかり見てるヒッキー&ブサイク男ちゃん
ドライアイで氏ね
69:デフォルトの名無しさん
05/02/04 10:18:49
>>1 ?
70:デフォルトの名無しさん
05/02/06 14:55:20
>>62
不謹慎すぎて笑えない
71:デフォルトの名無しさん
05/02/07 22:19:33
ここは初心者に優しくないインターネットですね
>>58
> 休み中に何かに挑戦してみたい
好みにもよるが、BASIC・C言語・Rubyのいずれかから入るのが良いと思われる。
入門図書は、図書館があるなら自分で探せ。図書館がなければ
おすすめはC言語なら「C言語プログラミングレッスン」、Rubyなら「たのしいRuby」。
URLリンク(www.hyuki.com)
URLリンク(www.amazon.co.jp)
ちなみに、将来役に立つ言語は何か?という問いには「将来次第」としか答えようがない。
とりあえず何にでも手を出しとけ。
72:デフォルトの名無しさん
05/02/08 00:03:45
URLリンク(www.amazon.co.jp)
73:デフォルトの名無しさん
05/02/08 02:23:02
>>71
ユーザビリティ的にはC#(+IDE)かJava(+Eclipse)かPythonかRubyでFAだろう。
入門用と考えると以下は満たして欲しい。
1.参考書
2.ライブラリが豊富
3.IDE(特にコンパイラなら必須)
4.GC
Cは悪くないけど、もはやGCが無い言語は入門用としては遺物ではなかろうか。
ゴージャスなIDE付きでタダで使える実装は無いし。
Basicは発展性がなさ過ぎるというかVBA弄ってて泣きそうになったのでやめとけ。
参考書さえあるならAirみたいなオブジェクト指向でない手続き型のスクリプト言語が
習得がもっとも容易であると思われる。しかしそのような言語はあまり聞かない。
74:デフォルトの名無しさん
05/02/08 02:32:45
>2.ライブラリが豊富
Rubyは失格だな。なにやるにしてもネットのどこかから拾ってくればできなくもないって奴ばっかだし。
75:デフォルトの名無しさん
05/02/08 02:33:09
入門用ならIDE無い方が良いと思うよ
76:デフォルトの名無しさん
05/02/08 02:35:45
>>73
HSP
77:デフォルトの名無しさん
05/02/09 01:37:25
>>76
HSPもいいのかも知れないなあ、と一瞬思ったけどgotoを使うのが基本の言語はダメだろ。
関数定義はないし構造体も無いのは無理。
78:デフォルトの名無しさん
05/02/09 12:36:48
関数定義はあるんじゃなかったっけ
79:デフォルトの名無しさん
05/02/09 13:01:07
目的しかないやっつけHSPと目的のないオナニー言語Ruby
80:デフォルトの名無しさん
05/02/09 13:15:10
Rubyに目的が無いんだったらJavaにもCにも無いと思われ
81:デフォルトの名無しさん
05/02/09 13:51:44
>>79
目的がないのではなく、多目的なのでは?
82:デフォルトの名無しさん
05/02/09 18:14:33
もなさんRubyをどのような目的で使ってますかー?
83:デフォルトの名無しさん
05/02/09 20:05:17
CGIスクリプトとテキスト処理
あとはApolloを使ってGUIアプリケーションとか
84:デフォルトの名無しさん
05/02/09 21:37:05
無知蒙昧な2ちゃんねらにRubyのよさを知らしめるために日夜勉強しています。
85:デフォルトの名無しさん
05/02/09 22:24:35
>>84
Rubyを使うことが目的なのか?あふぉか?
86:デフォルトの名無しさん
05/02/22 21:23:13
[1]授業単元:Ruby
[2]問題文:オセロを作れ
[3]環境
[3.1]OS:
[3.2]コンパイラ:
[3.3]言語:Ruby
[4]期限:23日昼
[5]その他の制限:CPU対戦は不要
87:デフォルトの名無しさん
05/03/02 12:45:21
age
88:デフォルトの名無しさん
05/06/20 02:25:44
[1] byte code化
[2] M17N
[3] native thread対応
89:デフォルトの名無しさん
05/07/17 16:31:23
問題文自動生成システムを作りたいんだけど。。
熟語辞書の中から熟語をランダムに選択して、その語彙を含む問題文をコーパスから拾ってきて生成するシステム。
ちょっと手がつかないです(*_*)
90:デフォルトの名無しさん
05/07/17 16:48:40
大学の講座にRubyがあるのですか。
91:デフォルトの名無しさん
05/07/17 22:33:49
幸せな大学だなぁ。うちはPrologだったぞ。
92:デフォルトの名無しさん
05/07/21 12:12:27
Rubyももう十年ですから、大学講座に取り上げられて不思議は
ありませんね。
93:デフォルトの名無しさん
05/08/14 08:22:48
(1) test/ruby/test_lambda.rbのsyntax errorを直せ。 (20点)
94:デフォルトの名無しさん
05/08/17 08:01:08
まだなんかヘンな気がするな…
95:デフォルトの名無しさん
05/09/18 19:13:13
age
96:デフォルトの名無しさん
05/10/12 00:31:12
学籍番号 名前 点数
の順に書かれているファイルを読み込んで、平均点と学籍番号順に並べ替えて表示するプログラムを作れといわれました。
97:デフォルトの名無しさん
05/10/13 01:07:08
data = File.read(ファイル名).split(/\n/)
puts data.inject(0){|a,b| a+b.split[2].to_i}
puts data.sort_by{|a|a.split[0].to_i}
98:デフォルトの名無しさん
05/10/19 09:08:52
これだと平均じゃなくて合計じゃないですか?
99:デフォルトの名無しさん
05/10/20 01:00:36
そうか。なら2行目は、
puts data.inject(0){|a,b| a+b.split[2].to_i} / data.length.to_f
といったところか。
100:ハーピィ
05/10/20 01:06:07
E・∇・ヨノシ <100ゲット♫
101:デフォルトの名無しさん
05/10/22 21:44:51
クラスNumericに引数なしのメソッドinteger?を再定義して
例えばp 5.0.integer?ならtrue、p 5.01.integer? はfalse
と整数を判別して出力するのを作れといわれました。
ほんの数行で出来るらしいのですがよろしくお願いします。
102:デフォルトの名無しさん
05/10/23 20:07:47
Integer と Float で定義すりゃいいんじゃない?
103:デフォルトの名無しさん
05/10/23 20:47:56
こんな感じ?"ほんの数行"かどうかは分かりませんが。
"判別する"というのを条件文で実装する必要はないんですよね?
> class Integer
> def integer?
> return true
> end
> end
>
> class Float
> def integer?
> return false
> end
> end
104:デフォルトの名無しさん
05/10/28 11:17:45
>102-103
それって 5.0.integer? が false になるし。
class Numeric; def my_int?; self.ceil == self; end; end
てところだろう。本質的には一行。
ちなみに Ruby にもとからある integer? は、 Numeric が常に偽を返し、
Integer でオーバーロードして常に真を返すようにしている。つまり103と同
じようなものになっている。
105:デフォルトの名無しさん
05/11/12 20:10:44
誰か簡単な宿題を出してくれよ
106:デフォルトの名無しさん
05/11/21 21:15:42
こんばんは、今日Rubyを学んでいる授業で課題を出されたのですが
完成しなくて困っています。
自分はプログラムではRubyが始めて学ぶ言語であり、
プログラミングに関しては全くの初心者です。
↓の詰まっているところに答えて頂けるとありがたいです。
魔方陣をHTMLの表形式で出力
各行、各列の和もその表の中に納める←ここが出来ません…
原文が長いので先に結果
21 39 8 33 2 27 45 175
30 6 24 49 18 36 12 175
46 15 40 9 34 3 28 175
13 31 7 25 43 19 37 175
22 47 16 41 10 35 4 175
38 14 32 1 26 44 20 175
5 23 48 17 42 11 29 175
175 175 175 175 175 175 175
Completed(0)
そして…
f.print "<table border=1>\n"とf.print "</table>"の間で四苦八苦です。
175の和の列を表に納めたいのですが、やり方が分かりません・・・。
教えていただければ幸いですm(_ _)m
107:原文
05/11/21 21:16:55
n=7
a=Array.new
for i in 1..n
a[i]=Array.new
end
for m in 0..n-1
for k in 0..n-1
i=(k+m)*2+(n+1)/2+2
j=k-m+(3*n+1)/2
a[(i-1)%n+1][(j-1)%n+1]=n*m+k+1
end
end
f=open('g:\kadai.html',"w")
108:原文続き
05/11/21 21:17:48
f.print "<table border=1>\n"
for i in 1..n
f.print "<tr>\n"
x=0
for j in 1..n
printf "%4d",a[i][j]
f.print "<td>",a[i][j],"</td>\n"
x+=a[i][j]
end
printf "%4d\n",x
end
for j in 1..n
x=0
for i in 1..n
x+=a[i][j]
end
printf "%4d",x
f.print "</tr>\n"
end
print "\n"
f.print "</table>"
f.close
109:デフォルトの名無しさん
05/11/21 23:24:14
# 足し算の結果もresultに入ってるなら以下のようにやるのが楽かなー
puts '<table>'
result.each{|row|
puts '<tr>'
row.each{|cell|
puts "<td>#{cell}</td>"
}
puts '</tr>'
}
puts '</table>'
110:デフォルトの名無しさん
05/11/21 23:34:17
# >>107-108のを活かすならこんな感じ。
# 動作確認はしてないので悪しからず御了承を。
File.open("result.html"){|f|
f.puts '<table border="1">'
a.each{|row|
f.puts '<tr>'
sum = 0
row.each{|cell|
sum += cell
f.puts "<td>#{cell}</td>"
}
f.puts "<td>#{sum}</td>"
f.puts "</tr>"
}
f.puts "</table>"
}
# 変数名はとりあえず意味のわかるように単語で付けた方がいいよ。
# アルファベット一文字の変数名はかなり読みにくいので。
111:106
05/11/22 00:42:43
>>109-110
ご親切にありがとうございましたm(_ _)m
とっても参考になりました。
最初、手続きオブジェクトというものを知らなかったために
書いてあることが分かりませんでしたが、授業の教科書の先読んで
理解出来たように思います。
変数名を単語でというのは、
お二方のrowやcellと書いてある部分の事ですよね?
伝える時はそう書くのですね。
勉強になりました(^^;A
112:デフォルトの名無しさん
05/11/28 22:02:26
>>106と同じ…(略)
自分もrubyが良く分かっていなくて参考書を買って1からやり直している途中です。
ですが課題の締め切りに間に合わなそうなのでどなたかお願いしますm(__)m
下のプログラムでa-zすべてのアルファベットの頻度を調べなければならないのですが、
for c in "a" .. "z" do
end
を最初、最後に入れ、bをcに変えても正しくされないのですがどこがおかしいのでしょうか。
t = File.read( "test.txt" )
u = t.split(//) # tを文字に分解
w = t.split # tを単語に分解
# 文全体にに文字B又はbが含まれる頻度
countc = 0
for x in u do
countc += 1 if x =~ /b/i
end
# 単語の先頭に文字B又はbが含まれる頻度
countw = 0
for x in w do
countw += 1 if x[0,1] =~ /b/i
end
113:デフォルトの名無しさん
05/11/28 22:45:12
何はともあれおまえの言っていることがそもそもわけわからん。なにをどう試したんだ。
114:デフォルトの名無しさん
05/11/28 22:49:27
アフォには聞いてませんから
115:デフォルトの名無しさん
05/11/28 23:14:55
>>112です。
t = File.read( "test.txt" )
u = t.split(//) # tを文字に分解
w = t.split # tを単語に分解
for c in "a" .."z" do
# 文全体にに文字B又はbが含まれる頻度
countc = 0
for x in u do
countc += 1 if x =~ /b/i
end
# 単語の先頭に文字B又はbが含まれる頻度
countw = 0
for x in w do
countw += 1 if x[0,1] =~ /b/i
end
# 出力する
printf "B又はbが本文に含まれる頻度は%4d回、単語の先頭に含まれる頻度は、%4d回でした。\n" ,c.upcase, countc , countw
end
…としたんですがエラーが出てしまいます。。
116:113
05/11/28 23:25:24
んじゃ説明すると、
全てのアルファベットの頻度を調べなければならないのだから、結果を保持す
るのに52個の配列を用意する必要がある。ふつうは26要素の配列かハッシュを
2つ使うだろう(112の例で、文字用と単語用の2つの変数を用いたように)。
マッチするのに必要な正規表現は、112ではベタ書きしているが、これもa-zの
それぞれで書換えなければならないだろう。
当然、a-zで「カウントアップする変数」と「マッチさせるための正規表現」
をそれぞれ切り替えるように適切に繰り返しをしなければならないだろう。
このどれもやっていないようだから「何をやってるかわからん」と思ったんだが、まあいいや。
117:113
05/11/28 23:31:51
おっと入れ違った。
115はそもそも、 for c in "a" .. "z" do に対応する end がないので実行で
きない。
115の方針を貫く場合、結果を保持する変数は2つで良いままの可能性が高い。
しかし相変わらず b の数しか数えてないのだから、このままでは結果が正し
く表示されない。正規表現をそれぞれで(cに依存するかたちで)書き換える必
要がある。
それから結果の出力では「Bまたはb」がべた書きだから printf がヘン。%表
記の箇所と引数の数が一致してないよ。
……というところかな。
118:デフォルトの名無しさん
05/11/29 09:29:36
答えてやりたいが今から大学だ
119:504
05/11/29 21:37:25
printfが良く分かっていないのですが、
t = File.read( "test.txt" )
u = t.split(//) # tを文字に分解
w = t.split # tを単語に分解
for c in "a" .."z" do
# 文全体
countc = 0
for x in u do
countc += 1 if x =~ /c/i
end
# 単語の先頭
countw = 0
for x in w do
countw += 1 if x[0,1] =~ /c/i
end
# 出力する
printf "%4d又は%4dが本文に含まれる頻度は%4d回、単語の先頭に含まれる頻度は、%4d回でした。\n" , c , c.upcase, countc , countw
end
でもおかしいですよね(^_^;)
120:デフォルトの名無しさん
05/11/29 22:45:43
cとかc.upcaseは文字列なんだから%sを使え
まぁしかし Ruby では埋め込み式を使う方が一般的な気はするけど
121:504
05/11/29 22:59:05
エラー出ませんでした!
しかし全部0回でした(笑)
勉強しなおしてきますm(__)m
122:デフォルトの名無しさん
05/11/29 23:11:04
あーだからさ、/c/i が「cという一文字に(大文字小文字は気にせず)一致する」
正規表現なわけだよな? /b/i なら「bという~」。そこのところはいいか。
今の君のコードは26回、毎回「c」だけカウントしているわけだ。それじゃ意味がない。
1回目は「a」、2回目は「b」、3回目は「c」……26回目は「z」になるように、しないといけない。
どうやってそれを実現するかはさすがに自分で考えてくれい。やり方はいろい
ろあるけど、何が授業内容に則した方法なのかまではオレは知らん。
123:デフォルトの名無しさん
05/11/30 02:17:24
プログラミングの入り口でループで躓いて諦めるひとを何人も見てきた
124:504
05/11/30 22:10:36
cは変数で、その変数cに"a"から"z"までを代入してることにはならないんですか?orz
125:デフォルトの名無しさん
05/11/30 22:54:11
だってたとえば112の元々のコードだったら /b/i は「bという変数の中身」じゃ
なくて「bという文字にマッチする正規表現」じゃん。その判断をどうやって
するわけ?
たとえばだ、「bという変数が存在したらその中身、存在しなかったらbという
その文字」と動くとしようか。すると、ちょっと変更するだけでプログラムの
挙動がえらい変わって大変なことになるし、たとえばbという変数が存在する
ときに「bという文字にマッチする正規表現」をどう書いたらいいかわからな
いじゃん。
そういう不都合があるから、ただそのまま変数名を書いてもそれを変数名とは
認識しないわけ。
で、正規表現に変数の値を埋め込むにはそれなりの書き方をしないといけない。
もしくは正規表現をやめるかだな。
教科書か何かを読み直してよく考えろ。
たとえば for x in u の x はどういうデータで何を調べればいい?とかな。
126:デフォルトの名無しさん
05/11/30 22:54:21
同時に並列動作を望むなら
ベクトルコンピュータ使ひ給へ
127:504
05/12/01 01:28:05
正規表現を使わない方法で出来ましたm(__)m
ホントすみませんでした(^^;)
128:デフォルトの名無しさん
05/12/05 20:21:40
北大の課題ばかりのスレだなぁ
129:デフォルトの名無しさん
05/12/19 16:44:49
誰かこのプログラムに注釈付けていただけませんか。何が起きてるか全くわかんないです。
def boyer_moore_search(text, pattern)
printf("text.length = %d, pattern.length = %d\n", \
text.length, pattern.length)
skip = Array.new
for k in 0 ... 256 do
skip[k] = pattern.length
end
for k in 0 ... pattern.length do
skip[pattern[k]] = pattern.length - k - 1
end
#続く
130:129
05/12/19 16:45:19
i = pattern.length - 1
while i < text.length do
j = pattern.length - 1
while text[i] == pattern[j] do
printf("a: i = %d, j = %d\n", i, j)
if j == 0 then
return i
else
i = i - 1
j = j - 1
end
end
if skip[text[i]] > pattern.length - j then
i = i + skip[text[i]]
printf("b: i = %d, j = %d\n", i, j)
else
i = i + pattern.length - j
printf("c: i = %d, j = %d\n", i, j)
end
end
return -1
end
printf("Match position = %d\n", \
boyer_moore_search("irohanihoheto","ohe"))
131:デフォルトの名無しさん
05/12/20 03:42:30
>boyer_moore_search
この名前から何か連想できないならアルゴリズムの教科書でも一から読み直した方が・・・
132:デフォルトの名無しさん
05/12/20 11:37:17
Rubyじゃないけど、こことか参考になるかも
URLリンク(www2.starcat.ne.jp)
Ruby で説明しているところは自分でググって。
133:デフォルトの名無しさん
05/12/20 19:02:32
つーヵこのスレって存在自体おかしくね?
RUBYで宿題?ナニソレ。
>私は、ある大学の1年生です。今、情報処理の講義でRUBYを習っています。
こんな学校ほんとに存在するのか?
いきなりRUBY教えるって、その講師は真性のアホじゃないのか?
134:デフォルトの名無しさん
05/12/20 20:11:38
はいはいわろすわろす
135:デフォルトの名無しさん
05/12/20 21:21:51
Rubyだと何でアホなの?
自分はFORTRANだったけど。
136:デフォルトの名無しさん
05/12/22 01:57:20
>>128
に本当っぽいことが書いてある…と言ってみるw
137:デフォルトの名無しさん
05/12/22 20:53:07
北大ってどんなところなの?
138:デフォルトの名無しさん
05/12/22 21:36:03
北のほうにある
139:デフォルトの名無しさん
06/01/10 21:50:54
お願いします
問題
次の足し算を満足する0~9の相異なる数
A,E,G,L,M,N,O,P,R (但し、A,L,Oはゼロではない)
の組を求めよ(答えは三通り)
APPLE
+) LEMON
----------
ORANGE
1.O=1
2.N=0
3.L=2から8 また、G=L+1で桁上がりはない
4.P=2,3,4,6,7,8 でM=10-P
PもMもL,Gに等しくない
5.Eは2から9でL,G,P,Mに等しくない
6.P+E+1が10以上のとき
A=P+E+1-10
A+L+1 が10未満ではダメ
R=A+1-10
P+E+1が10未満のとき
A=P+E+1
A+Lが10未満ではダメ
R=A+L-10
7.AはO,N,L,G,P,M,Eに等しくない
8.RはO,N,L,G,P,M,E,Aに等しくない
140:デフォルトの名無しさん
06/01/10 21:55:55
アミノ酸配列と円周率が楽だからそんなのやめなさい
141:デフォルトの名無しさん
06/01/10 23:30:13
>>139
できた。結局、なにがわからんの?
楽して書きたいとかなら、地道にひとつずつ条件を書いていくしかないと思われ。
o = 1
n = 0
a_t = 1..9
e_t = 0..9
g_t = 0..9
l_t = 1..9
m_t = 0..9
p_t = 0..9
r_t = 0..9
def different_all?(key, array)
return array.all?{|v| v != key}
end
142:デフォルトの名無しさん
06/01/10 23:32:00
count = 0
a_t.each{|a|
e_t.each{|e|
next unless different_all?(e, [a, o, n])
g_t.each{|g|
next unless different_all?(g, [e, a, o, n])
l_t.each{|l|
next unless different_all?(l, [g, e, a, o, n])
next if l + 1 > 10
next unless g == l + 1
p_t.each{|p|
next unless different_all?(p, [l, g, e, a, o, n])
m_t.each{|m|
next unless different_all?(m, [p, l, g, e, a, o, n])
next unless m == 10 - p
r_t.each{|r|
next unless different_all?(r, [m, p, l, g, e, a, o, n])
apple = 10000 * a + 1000 * p + 100 * p + 10 * l + e
lemon = 10000 * l + 1000 * e + 100 * m + 10 * o + n
orange = 100000 * o + 10000 * r + 1000 * a + 100 * n + 10 * g + e
143:デフォルトの名無しさん
06/01/10 23:34:47
if orange == ( apple + lemon )
count += 1
puts 'A = ' + a.to_s
puts 'E = ' + e.to_s
puts 'G = ' + g.to_s
puts 'L = ' + l.to_s
puts 'M = ' + m.to_s
puts 'N = ' + n.to_s
puts 'O = ' + o.to_s
puts 'P = ' + p.to_s
puts 'R = ' + r.to_s
puts '-----'
end
}
}
}
}
}
}
}
puts count
144:デフォルトの名無しさん
06/01/10 23:36:52
いんでんとなんかはてきとうに直してくれ。
145:デフォルトの名無しさん
06/01/11 20:33:59
ありがとうございます
何がわからないというか、何もかもわからなくて
146:デフォルトの名無しさん
06/01/12 12:22:33
階乗を求めるプログラムを教えてください
147:デフォルトの名無しさん
06/01/12 20:39:37
>>146
死ねマルチ
result = 1;(1..5).each{|i| result *= i}; p result
148:デフォルトの名無しさん
06/01/13 09:01:44
自然数 N が与えられたとき、
1 から N までの数字を N 個並べる組み合わせをすべて
列挙するプログラムは Ruby で書くとどうなりますか?
例えば N = 3 のとき
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
となるようにです。
よろしくおながいします。
149:デフォルトの名無しさん
06/01/13 22:11:29
>>148
何がわからないのかちゃんと説明できたら教えてやる。
一応、プログラムは出来た。
N=4の出力 4! = 24 なので合ってるはず。
[1, 4, 3, 2][3, 4, 1, 2][2, 1, 3, 4][1, 4, 2, 3]
[1, 3, 4, 2][3, 2, 4, 1][4, 2, 3, 1][2, 4, 3, 1]
[2, 3, 1, 4][4, 1, 2, 3][3, 2, 1, 4][1, 3, 2, 4]
[1, 2, 3, 4][4, 2, 1, 3][1, 2, 4, 3][3, 1, 4, 2]
[4, 3, 2, 1][2, 4, 1, 3][2, 3, 4, 1][3, 4, 2, 1]
[4, 1, 3, 2][4, 3, 1, 2][2, 1, 4, 3][3, 1, 2, 4]
150:デフォルトの名無しさん
06/01/14 00:06:55
例えば、
1: methodA()
2: methodB()
3: methodC()
の3行からなるprogram.rbがあって、methodB()の処理が5秒たっても終わらなかったら、
methodB()の処理をタイムアウトして(飛ばして)、次行methodC()への処理へと
いくという風にするにはどうしたらよいでしょうか?
timeout()を使っても、program.rb全体が終了してしまいうまくいきません。
あくまでmethodB()だけをタイムアウトして、program.rbの処理自体は続行させたいのです。
151:デフォルトの名無しさん
06/01/14 00:21:50
timeout が TimeoutError を送出するんだから rescue で受ければいいんじゃないの?
152:デフォルトの名無しさん
06/01/20 00:44:27
宿題です。危機です。
ruby/tkで迷路を作成して脱出するプログラムを
どなたか作ってくださいorz
153:デフォルトの名無しさん
06/01/20 01:17:49
ここは「教えてください」というスレッドであって「代行してください」というスレッドではないと思うのだが。
154:デフォルトの名無しさん
06/01/20 02:09:17
勘違いしてましたorz
多分このスレを立てた人と同じ大学です、自分も締め切りが迫っててピンチです。
迷路を作成して、脱出するプログラムを作りたいのですが、
①座標(1,1)(左上隅)に最初の通路空け、
②上下左右で、2マス進んだところがまだ通路になっていない場所
(複数ある場合はランダムに選択)
③穴掘り可能な方向がなかったら、そこまでの道を2マスだけ逆戻り。
逆戻りできない場合完成。
という感じにするのは分るのですが、ruby/tkでどうやってそれを表現したら良いのかが
わからないのですが。。
155:デフォルトの名無しさん
06/01/20 07:26:48
テキストベースで組んでみてから、Ruby/Tkでやれば?
156:デフォルトの名無しさん
06/01/20 11:18:09
テキストベース?のは出来たんですが…orz
157:デフォルトの名無しさん
06/01/20 17:07:54
アルゴリズムを聞いてるのかな
158:デフォルトの名無しさん
06/01/20 21:55:50
ruby/tkでのやり方が知りたいです!
159:デフォルトの名無しさん
06/01/20 22:04:17
知りたいなら自分で勉強しような。
テキストべースのままでいいじゃん。
160:デフォルトの名無しさん
06/01/20 23:23:47
課題的に Ruby/tk が必須なら教科書に必要事項は絶対書いてあるからちゃんと読め。
必須じゃないなら自分である程度の勉強をしろ。
そういうことをしてもわからなかったら、必要な事項だけ質問するべし。漠然
と知りたいと言われても誰も答えられないよ。
161:デフォルトの名無しさん
06/01/21 00:40:36
スレタイに宿題って入ってたら丸投げだとオレも思ってた
162:デフォルトの名無しさん
06/01/21 00:42:27
問題についてもっと詳しい情報がなけりゃだれもやらんぞ。
連立方程式がわからないんですけどおしえてもらえませんか?
っていってるのと同じ。
163:デフォルトの名無しさん
06/01/21 00:48:45
自分ではココまで頑張ったってとこを教えれ
164:デフォルトの名無しさん
06/01/22 00:46:34
XMAX = 80
YMAX = 24
MAXSITE = (XMAX * YMAX / 4)
row = Array.new(YMAX+1).fill(0)
map = Array.new
(XMAX+1).times { map.push(row.dup) }
∬
for j in 2..(YMAX-2)
for i in 2..(XMAX-2)
if (map[i][j] == 1)
putc(?@)
else
putc(?\s)
end
end
putc(?\n)
end
exit 0
全部入らなかったので最初と最後うpしましたが…
165:デフォルトの名無しさん
06/01/22 22:58:42
age
166:デフォルトの名無しさん
06/01/23 12:14:25
で、tkについてはどこまで頑張ったのか?
167:デフォルトの名無しさん
06/01/24 21:27:35
きっと月曜提出だったんだよ、ということで時間切れ。
つかアルゴリズム?の宿題で画面表示必須って意味あるの?
168:デフォルトの名無しさん
06/01/25 00:08:12
>>166
def draw(cw,cs,xs,ys)
for i in 1.. xs
for j in 1..ys
if @a[i][j]&0b0001!=0
TkcLine.new(cw,cs*i-1,cs*j,cs*i+cs,cs*j, "tags"=>"tag")
end
if @a[i][j]&0b0010!=0 && i !=xs
TkcLine.new(cw,cs*(i+1)-1,cs*j,cs*(i+1)-1,cs*(j+1), "tags"=>"tag")
end
end
end
TkcLine.new(cw,cs,cs,cs*(xs+1),cs,cs*(xs+1),cs*ys,"width"=>2, "tags"=>"tag")
TkcLine.new(cw,cs,2*cs+1,cs,cs,cs*(ys+1),cs*(xs+1),cs*(ys+1),"width"=>2, "tags"=>"tag")
こんな感じです(^_^;)
169:デフォルトの名無しさん
06/01/25 01:11:32
きたねーコードだな。
で、何がわからないんだっけ?
170:デフォルトの名無しさん
06/01/25 01:48:02
>>154
です、、
とゆーかもう完全に意味がわかりませんorz
171:デフォルトの名無しさん
06/01/25 11:13:10
少なくとも意味がわかってから質問するように。
172:デフォルトの名無しさん
06/01/31 00:57:40
迷路の線は描けたのですが、道順(脱出経路)の線をひくことができません。。
173:デフォルトの名無しさん
06/01/31 19:57:14
足を踏みいれた格子の色を変えていく。
ただし、それぞれの格子で、どの辺から格子に入ったかを記録しておき、
その辺から再び出る(=戻る)なら格子の色を元にもどす。
174:デフォルトの名無しさん
06/02/02 20:25:18
a,bが互いな素であるときaxをbで割ったあまりが1になるようなxを1つ出力するプログラムを書きなさい。
という課題が出ました。
互いに素というのは作れるのですが、後半部分ができません。
だれか教えてください。お願いします。
175:デフォルトの名無しさん
06/02/02 21:00:23
そのできた部分まで見せてくれるとやりやすいかもしれない
176:デフォルトの名無しさん
06/02/02 21:02:36
互いに素がわかるならこれでどう?
def axb(a,b)
if tagainiso?(a,b)
p = 1
x = 0
until a*x%b == 1
x = (p + 1)*b/a
p += 1
end
return x
end
return 0
end
# テストコード
def test_axb
assert_equal(1, axb(3,2))
assert_equal(7, axb(13,10))
assert_equal(0, axb(2,4))
end
177:デフォルトの名無しさん
06/02/02 21:15:42
てかホントに初心者スレから移動したんだな
178:174
06/02/02 21:41:41
a = gets.to_i
b = gets.to_i
def gcd(a,b)
if b == 0
return a
else
return gcd(b,a%b)
end
end
これでgcd(a,b) =1のときでif文作るところまでいきました。
ここから先がわかりません。
>>176
どこが何をしているのかがちょっとよくわかりません。
ホント素人ですいません。
179:デフォルトの名無しさん
06/02/02 22:03:14
>>178
算数は苦手ですか?
tagainiso?(a,b)はa,bが互いに素かどうか調べる。
自分でわかるって言ってたので、その説明は略。
until a*x%b == 1
x = (p + 1)*b/a
p += 1
end
は単なるループ。a*x%b == 1はわかるよね?
以下算数の話。
a*x%b = 1をpを整数として変形すると、
a*x/b = p + 1となるのでこれをxについて解く。
x = (p+1)*b/a となる。
pが整数なので、上記のループではpを1ずつ変化させて、条件に合うxを探してるだけ。
で、結局axb(a,b)で求めるxが返る。
これでどう?
180:デフォルトの名無しさん
06/02/02 22:03:34
if tagainiso?(a,b) # IF互いに素なら
until a*x%b == 1 # a*x%bが1になるまで続ける
p += 1 # p=p+1
これだけわかればトレースはできるだろうから、計算の意味は自分で考えてみよう
181:147
06/02/02 22:13:03
できました!みなさんありがとうございました!!!!
182:デフォルトの名無しさん
06/02/02 22:19:57
(1...b).each do |x|
break if a*x%b == 1
end
return x
の方が計算量少ないのでは。
183:デフォルトの名無しさん
06/02/02 22:26:52
b != 1 のチェックも必要だね。
184:デフォルトの名無しさん
06/02/03 16:48:13
で、それどこの宿題? 大学? 高校? 中学校? 小学校?
185:デフォルトの名無しさん
06/02/03 22:41:09
>>183
b=1の時点で互いに素の可能性が消えるので不要。
186:デフォルトの名無しさん
06/02/04 02:49:49
互いに素の定義って最大公約数が1じゃなかたっけ?
187:デフォルトの名無しさん
06/02/06 23:59:56
URLリンク(www.pluto.ai.kyutech.ac.jp)
rubyで上記のURLのいずれかの公式を用いて円周率もとめたいんですけど、、、どなたかソースコード例示してもらえないでしょうか
188:デフォルトの名無しさん
06/02/07 00:18:42
puts (Math.atan(1.0/5)*4 - Math.atan(1.0/239))*4
俺ならこんなの書いてきたら落第させるがな
189:デフォルトの名無しさん
06/02/07 03:29:45
>188
それだとputsの戻り値*4にならないか?
190:デフォルトの名無しさん
06/02/07 08:34:49
puts は 必ず nil を返すように作られてるんだがそれでもよろしいか
191:デフォルトの名無しさん
06/02/07 09:31:26
hoge (1+2) * 3
は
hoge(1+2) * 3
と同じ動作をするべき?
まあ、そうかもね。
192:デフォルトの名無しさん
06/02/07 13:37:36
どっちにしても、そういう仕様だからなぁ。
193:デフォルトの名無しさん
06/02/07 14:00:18
「カッコが省略されてる引数は最初の空白で区切れるようにしろ」というのは
主張としてはある程度真理だな
引数に空白を含めたい人が自力でカッコで括ってれと
「文末が出るまで全部引数にしまっちゃうよ」というのもそれはそれで便利だが
194:デフォルトの名無しさん
06/02/08 11:40:32
で、宿題としては要は自前でテーラー展開しろってことなんだろうな。
そろそろ気づいて自力でできた頃か?
195:デフォルトの名無しさん
06/02/08 18:40:30
おいおい、自力でテーラー展開してどうするんだ?
ニュートン法でも発明しろってことか?w
196:デフォルトの名無しさん
06/02/23 01:33:21
ここ北大の人が質問してそう
197:デフォルトの名無しさん
06/02/23 02:29:37
ちょっとドキッとしたが卒業生だからもう関係ねーや
1年の情報処理ででもやってるのかな
俺のやったときはFortran77/90とCとDelphiの選択だったような気がする
198:デフォルトの名無しさん
06/02/23 04:38:20
また来年も質問が来るのかな
199:デフォルトの名無しさん
06/02/23 14:51:52
URLリンク(crab.hucc.hokudai.ac.jp:8080)
これか? いや、これはD言語みたいだな。。。(汗
200:ハーピィ
06/02/24 11:53:49
E・∇・ヨノシ <200ゲット♫
201:デフォルトの名無しさん
06/03/28 17:22:35
net/http使っていて、
HTTP/1.1 501 Method Not Implemented
Date: Tue, 28 Mar 2006 08:09:41 GMT
Server: Apache/2.0.54 (Debian GNU/Linux) mod_fastcgi/2.4.2 mod_ruby/1.2.4 Ruby/1.8.2(2005-04-11) mod_ssl/2.0.54 OpenSSL/0.9.7e
Allow: GET,HEAD,POST,OPTIONS,TRACE
Content-Length: 206
Connection: close
Content-Type: text/html; charset=iso-8859-1
なのが欲しいのはどうすればいい?
202:デフォルトの名無しさん
06/03/28 17:36:43
どうしたいの?
203:デフォルトの名無しさん
06/03/28 18:03:52
スレリンク(tech板:10番)
なお話?
204:デフォルトの名無しさん
06/03/28 18:10:18
.headerじゃ、HTMLの<HEAD>と</HEAD>の間しか採れないと思う。
漏れが欲しいのはHTTPの中で鯖から送られて来る情報。
205:デフォルトの名無しさん
06/03/28 18:35:27
(⊃д`)
206:デフォルトの名無しさん
06/03/28 18:44:02
Response から each を使えばいいような気がするのだが。
207:デフォルトの名無しさん
06/03/28 21:01:45
こんなんでどう?
% cat http_header_test1.rb
#!/usr/bin/ruby
require 'net/http'
Net::HTTP.version_1_2
Net::HTTP.start('www.ruby-lang.org', 80) {|http|
response = http.get('/ja/')
printf("HTTP/%s %s %s\n", response.http_version, response.code, response.message)
response.each{|x, y| printf("%s: %s\n", x.capitalize, y)}
}
% ./http_header_test1.rb
HTTP/1.1 200 OK
Cache-control: no-cache
Last-modified: Sat, 24 Dec 2005 13:44:39 GMT
Vary: User-Agent
Content-type: text/html; charset=euc-jp
Date: Tue, 28 Mar 2006 11:59:22 GMT
Server: Apache/2.0.54 (Debian GNU/Linux) mod_fastcgi/2.4.2 mod_ruby/1.2.4 Ruby/1.8.2(2005-04-11) mod_ssl/2.0.54 OpenSSL/0.9.7e
Content-length: 15762
Pragma: no-cache
208:デフォルトの名無しさん
06/03/28 21:31:34
ありがとうございました。
209:デフォルトの名無しさん
06/04/07 10:36:49
保守
210:デフォルトの名無しさん
06/04/07 20:37:40
質問者を堕落させ、回答者のレベルをアップさせるスレってここのことですか?
質問者はruby-man-ja-html-20051029ぐらい読んでいるんだよな?
と、てきとうなことを言ってみた。
211:デフォルトの名無しさん
06/04/07 20:52:34
スレの性質上、学期末じゃないとあんまり釣れないと思うよ
212:デフォルトの名無しさん
06/05/03 23:44:59
学期末とかじゃなくても良いから
問題出してくれねーかなー。
面白そうなら、コード書くからさー。
213:デフォルトの名無しさん
06/05/04 22:38:17
じゃあ、問題出し合うスレにしちゃうか!
214:デフォルトの名無しさん
06/05/05 14:20:15
じゃ、お題。っ【ソリティア】
215:デフォルトの名無しさん
06/05/05 19:22:45
>>214
ソリティアを"作る"のか"解く"のかどっちだ?
216:214
06/05/06 04:17:59
じゃとりあえず
ソリティア「クロンダイク」を作る
で。俺も作ってみるかなー。
【仕様案(あくまで俺用。参考にでも】
・配置はランダム
Winのフリーセルのような問題番号はなし。
・CUIで入出力
CUIの方が環境依存少なめかなぁと。
・サブコマンド
列名をアルファベットで現し
基本は3文字で[列名][枚数][列名]。
例: A3C (A列の3枚をC列へ移す)
山札をめくる時は半角スペース1個入れてエンター。
列名はプレイ時に一目で判るようにしておく。
って言うか文字順に置くかキー配置なぞって置くか2案で悩み中。
217:デフォルトの名無しさん
06/05/11 02:05:01
UNOがいいよ。
仕様例:
CUIベース。
手札の表示は、赤の1ならR1、青の2ならB2、黄の3ならY3、緑の4ならG4って感じ。
赤のReverseならRR、青のSkipならBS、黄のDrowTwoならYD、
WildはW、WildDrowFourはWD
ってところでいいかと。
["R1", "B2", "Y3", "G4", "R", "BS", "YD"]
って感じででも手札を表示。
use card?[1,2,3,4,5,6,7,G,U]
とでも表示して、1文字読んで選択させる。
Gは1枚カードを山から取る、Uはunoのつもり。
ウノ自体のルールはぐぐってくれ。
218:デフォルトの名無しさん
06/05/17 19:53:34
>>217
で、どうしろと?
219:デフォルトの名無しさん
06/05/17 20:12:02
>218
作りたい人は作る。基本スルー。
220:デフォルトの名無しさん
06/05/19 01:57:28
つまりrubyでカードゲームは無理ということですよ。
221:デフォルトの名無しさん
06/05/19 03:29:39
Rubyで無理じゃなくて、ここの住人じゃ無理なだけでそ
222:デフォルトの名無しさん
06/05/19 06:46:32
Win32API使ってもいい?
223:デフォルトの名無しさん
06/05/19 08:27:37
良いんじゃね?
224:デフォルトの名無しさん
06/05/19 08:56:46
じゃあUNO作るわ
まっとれ
225:デフォルトの名無しさん
06/05/19 13:21:12
ひとりでUNOやってて楽しいか?
昔MacでUNOのゲームがあったが、かなりつまらんかったな。
226:デフォルトの名無しさん
06/05/19 13:30:04
>>225
>>1
227:デフォルトの名無しさん
06/05/21 13:38:41
UNOはつまらん
囲碁にしようぜ、てか囲碁のプログラムってむずくね?
228:デフォルトの名無しさん
06/05/21 16:29:22
そんな面倒なのじゃなくまず3人じゃんけんのプログラムから始めろよ
229:デフォルトの名無しさん
06/05/21 16:37:47
囲碁は終了判定があいまいでプレイヤーの感覚に任せる部分が大きい
ぶっちゃけどちらかが投了しない限り続行は可能だよ
つーかUNOも囲碁も相手が必須だろ
そこをどうするかがポイントになるハズ
230:デフォルトの名無しさん
06/05/21 17:15:27
>>228
グー・グー・チョキの場合は決勝? あいこ?
231:デフォルトの名無しさん
06/05/21 19:21:32
>>230
あいこしたら、あいこした方が負け。
つまり、チョキの勝ちというルールで。
232:デフォルトの名無しさん
06/05/21 20:04:07
>>230
あいこにしたほうが簡単ぽいのでひとまずあいこでよし
233:デフォルトの名無しさん
06/05/22 02:34:21
>>230
あいこのグーふたりを勝ちにして、チョキを落として再試合。
つまり、次回から勝負が決まるまでチョキの結果をムシすれ。
234:デフォルトの名無しさん
06/05/22 08:49:28
おまいら馬鹿なのか?
CPU1だけと7並べやってもつまらんって当たり前じゃん。
CPU1, CPU2, CPU3とプレーヤの4人で7ねらべとか出来る様にすればいいじゃん。
マクのUNOって糞だっただけじゃね?
PCのUNOはそこそこおもしろかったよ。
235:デフォルトの名無しさん
06/05/22 08:51:55
URLリンク(www.amazon.co.jp)
236:デフォルトの名無しさん
06/05/22 15:44:15
>>232
一人勝ちバージョンできたよー
どこまで凝っていいのかわからなかったから
判定メソッド1個と$stdin.getsの入力ループで簡単ぽく作ったよー
def hantei(hands)
sum=0
hands.values.each do |hand|
sum = hand + sum
end
case sum
when 0,1,3,4,6
kekka='あいこ。もう一度'
when 2
if hands.has_value?(2) then
kekka="パーで#{hands.index(2)}の勝ち"
else
kekka="グーで#{hands.index(0)}の勝ち"
end
when 5
kekka="チョキで#{hands.index(1)}の勝ち"
end
yobina=['グー','チョキ','パー']
hands.each do |name,hand|
puts "#{name}:#{yobina[hand]}"
end
puts kekka
end
237:236続き
06/05/22 15:46:02
# 遊び方:実行してこれ↓
setumeibun='1:グー 2:チョキ 3:パー 0:やめる (数字とEnter押してね)'
puts '3人じゃんけん開始(決勝戦なし)'
puts setumeibun
while line=$stdin.gets.chomp do
case line
when '0'
puts 'さようなら'
exit
when '1'
myhand=0
when '2'
myhand=1
when '3'
myhand=2
else
puts setumeibun
next
end
hantei({'YOU'=>myhand, 'COM1'=>rand(3).to_i, 'COM2'=>rand(3).to_i})
end
238:デフォルトの名無しさん
06/05/22 15:51:13
遊び方:
>>236-237のスクリプト本文っぽい部分をコピペしてまとめて1ファイルにして実行。
1を入力してEnterを押すとグーを出したことに、2を入力だとチョキに、3だとパーになる。
0を入力すると終了する。テンキーで遊ぶと便利。
説明:
プレーヤーはコンピュータCOM1、COM2とユーザーYOUを含む3人。
各々の名前と出した手は、名前 => 手 の対応でハッシュhandsに入る。
出した手は整数の数値で格納され、グーは0で表す。チョキは1。パーは2。
利便性のためにユーザー入力とはズレてることに注意。
COMの出す手はグーチョキパー等しくランダムであり、
0.00…1から2.99…9までの乱数を発生させ小数点切り捨てで対応。
で、「誰か1人が勝利した」か「全員あいこ」かどうかは、3人分の手の数字の和ですべて判別できる。
勝った人の名前を知るには、「その場合に勝利である手」を値に持つキーをhandsからindexで探せばいい。
誰かがグーで勝つパターン [和は2] [勝者は0]
0・1・1
誰かがチョキで勝つパターン [和は5] [勝者は1]
1・2・2
誰かがパーで勝つパターン [和は2] [勝者は2]
2・0・0
本来決勝に進むパターン(今回あいこ)[和は1か4]
0・0・1、 1・1・2、 2・2・0
全員あいこのパターン[和は0か3か6]
0・0・0、 1・1・1、 2・2・2、 0・1・2
言い訳:
きれいとわかりやすいって両立しないよね
----
おしまい
239:デフォルトの名無しさん
06/05/22 16:18:18
ある程度短ければ自分の全力で作っていいんじゃね?
初心者勉強スレみたいな雰囲気もあるから迷うが
240:デフォルトの名無しさん
06/05/22 19:43:42
三人じゃんけんかー。
昔、JAVAで作ったのがあるから移植してみようかな。
241:デフォルトの名無しさん
06/05/22 21:15:31
何かプロトコル決めて、戦わせたいね(w
Simple Janken Transfer Protcol(SJTP)とか。
242:デフォルトの名無しさん
06/05/22 22:50:53
Transfer ワロタ
243:デフォルトの名無しさん
06/05/22 23:16:19
でも作って公開してもメリットなくね
244:デフォルトの名無しさん
06/05/22 23:54:46
ひとつのゲームだけじゃなくて
汎用的なカードゲーム用exchangeサイトみたいなの
Rubyで作れんかね
245:デフォルトの名無しさん
06/05/22 23:58:30
あんまRuby向きの概念ではないな
個々のシステムを個々に作るほうが得意だと思う
246:デフォルトの名無しさん
06/05/23 00:33:22
>>243
作るだけでも非常に勉強になるぞ
というのはどうだろう
素人のプログラムなんて読みたくねえよな実際
247:デフォルトの名無しさん
06/05/23 01:20:01
>>246
ここに書いとくとMinero Aokiがリファクタリングしてくれるという特典付き。
248:デフォルトの名無しさん
06/05/23 07:08:10
そうか
249:デフォルトの名無しさん
06/05/23 08:54:39
じゃんけんする人をn人にした場合はどうなるの?
250:デフォルトの名無しさん
06/05/23 14:50:55
[グー、チョキ、パー、・・・、手_n] になる
251:デフォルトの名無しさん
06/05/23 15:30:18
作ってるうちにめんどーになった。
多人数対応してるつもりのあいこ勝ち抜きバージョン。
@players=['YOU','COM1','COM2','COM3']
に'YOU'という文字を含まない要素を追加するとその名前で人数が増える。
YOU無しでやると自動で対戦する。
@players=['COM1','COM2','COM3''COM4''COM5''COM6''COM7''COM8''COM9''COM10']
だと10人対戦。いつ終わるかは知らね。
@goal=100の場合は100回勝った人が出た時点で終了。
ただしあいこ感知の都合であいこ勝ち抜きも積み立て1勝とカウントするので注意。
あいこを勝ち残った人にあいこ勝ち抜き回数ぶんの勝利数を追加。
定数のグーチョキパーはなんか使い方違う気がするがお腹すいたので判断できん。
結局クラス作る必要もなかった気もするけど面倒なので放置。
ちなみに俺>>236。反応なくてもがんばるよ!っていうか>>246の読む気しないってのには同意
handsの中身は>>238の@handsと同じ。
要は勝利者が1人になるまで前回の勝者たちを集めて同じ処理させてるだけ。
252:251
06/05/23 15:31:27
class Game
GOO=0;TYOKI=1;PAA=2
def initialize
@label=['グー','チョキ','パー']
@players=['YOU','COM1','COM2','COM3']
@carryover=0;@hands=Hash.new;@win=Hash.new;
@players.each{|player| @win[player]=0}
@goal=100
end
def msg(str)
print "#{str}\n"
end
def win_pattern
return [
{'pat'=>[GOO,TYOKI], 'win'=> GOO},
{'pat'=>[TYOKI,PAA], 'win'=> TYOKI},
{'pat'=>[PAA,GOO].sort, 'win'=> GOO}
]
end
253:251
06/05/23 15:32:31
def game
winner=@players
until winner.size == 1 do
jyanken_call(winner)
hands=ask(winner)
show(hands)
winner=judge(hands)
end
end_phase(winner.first)
end
def jyanken_call(winner)
if @carryover == 0 then
msg " じゃーんけん (参加者:#{winner.sort.join(',')})"
else
msg " あーいこで (参加者:#{winner.sort.join(',')})"
end
end
def ask(winner)
hands=Hash.new
winner.each{|player|
hands[player]=hand(player)
}
return hands
end
254:251
06/05/23 15:33:17
def hand(player)
if player =~ /YOU/ then
return get_yourinput
else
return rand(3).to_i
end
end
def get_yourinput
while input=STDIN.gets.chomp do
case input.to_i
when 0 then gameover
when 1 then return GOO
when 2 then return TYOKI
when 3 then return PAA
else
msg ' 1:グー 2:チョキ 3:パー 0:やめる (数字とEnter押してね)'
end
end
end
def show(hands)
hands.each{|name,hand|
msg "#{name}:#{@label[hand]}"
}
end
255:251
06/05/23 15:34:01
def judge(hands)
now=hands.values.sort
win_pattern.each do |hash|
if (now & hash['pat'])==hash['pat'] && (now | hash['pat']) == hash['pat'] then
return pick_winners(hands,hash['win']) # someone wins
end
end
@carryover+=1
return hands.keys #noone wins
end
def pick_winners(hands,win)
winner=Array.new
hands.each{|name,hand|
winner << name if hand == win
}
@carryover+=1 unless winner.size == 1
return winner
end
def end_phase(winner)
@win[winner] = @win[winner] + 1 + @carryover
@carryover=0
msg "#{winner} が勝ちました! (現在:#{@win[winner]}勝)"
msg " "
256:251 しまったメソッド途中で切っちゃった
06/05/23 15:36:15
if champ=@win.find{|key,val| val >= @goal} then
msg "優勝者は#{@goal}勝を最初に達成した#{champ[0]}さんです!"
gameover
end
end
def gameover
@win.each{|name,win|
msg "#{name}:#{win}勝"
}
msg "さようなら";exit
end
end
game=Game.new
loop do
game.game
end
257:デフォルトの名無しさん
06/05/23 15:37:33
はい終わり。
258:デフォルトの名無しさん
06/05/23 17:09:52
>>252
たぶん書き間違ってる。PAAで勝つパターンが入ってない。
def win_pattern
return [
{'pat'=>[GOO,TYOKI], 'win'=> GOO},
{'pat'=>[TYOKI,PAA], 'win'=> TYOKI},
{'pat'=>[PAA,GOO].sort, 'win'=> GOO}
]
end
↓
def win_pattern
return [
{'pat'=>[GOO,TYOKI], 'win'=> GOO},
{'pat'=>[TYOKI,PAA], 'win'=> TYOKI},
{'pat'=>[PAA,GOO].sort, 'win'=> PAA}
]
end
あと、コピペするものには 使わないほうがいいぞ
2chブラウザによっては空白が というのに置き換わるっていうかOpenjaneDoeがそうだ
259:デフォルトの名無しさん
06/05/30 01:49:26
ちょっと昔作ったJAVAの三人じゃんけんをRubyに移植してみたら
約200行になった。ここには貼れない。
ちなみに、JAVAの時は約300行だった。
ロジックはJAVAで書いた時のをそのまま移植したので
もっとエレガントに出来そうな気はしてる。
260:デフォルトの名無しさん
06/05/30 12:43:55
>259
是非別所にうpしる
Rubyに書き換えようぜ
261:デフォルトの名無しさん
06/05/30 12:46:31
N人じゃんけんが既に出てるから、判定部分は何か面白いことしてないと目立たないぞ(w
どこかのあぷろだ借りるのが手っ取り早いだろうな
262:デフォルトの名無しさん
06/05/30 13:34:30
ここ?
ソースポスト
URLリンク(sourcepost.sytes.net)
263:デフォルトの名無しさん
06/05/30 14:32:48
じゃんけんだと、手の種類が2個だと勝敗が決まってるんだよな。
3のときと1のときはあいこだよな。
いちいち判定しないで
#仮想コード
players.find(winner_hand(*hands.uniq)) if hands.uniq.size == 2
とかでいけるんじゃないの?
Handクラスを作ってTyoki<-Paa<-Goo<-Tyokiとリンクリストみたいにして負けた方をincompatibleとして持つなら
def stronger(other)
@incompatible == other ? self : other
end
これだとwinner_handはいらなくて、
hands.uniq.inject{|a,b| a.stronger b}/*hands.uniq.size == 2*/で勝つ方の手が決まる。
まあ真偽値返すようにしてsortして[0]使うんでもいいけど。
Tyokiとかはインスタンスが違っちゃいかんのでHansの定数にするかシングルトンにするかクラスのまま使うかすること。
あとloopでgame呼ばないでgame側でloopしたほうがよさそうなのと
win_patternは普通にクラス定数の方がいいんじゃねえかと思うのと
gameでwinnerに@playersを代入してるけどインスタンス変数のまま使えばいいじゃんってのと
コンストラクタでやってる色々は引数にした方がいいんじゃねえかとか。
あとオブジェクト指向っぽくするならCOMPlayerとHumanPlayerを作ってVisitorパターン使ってplayさせてみるとか。
といってもVisitorパターンが最適とは本見なきゃわからん人なので今ひとつ断言できない。
264:デフォルトの名無しさん
06/05/30 16:24:06
じゃんけんが完成したら、いよいよ野球拳の実装だな。wktk
265:デフォルトの名無しさん
06/05/30 18:39:19
オセロまでいくとむずすぎる?
266:デフォルトの名無しさん
06/05/30 18:55:58
頭の悪いオセロなら簡単だよ
267:デフォルトの名無しさん
06/05/31 04:16:01
それオセーロ
268:259
06/05/31 07:17:44
遅くなってすみません。
URLリンク(sourcepost.sytes.net)
Rubyに移植済みのもの。
判定部分に剰余を使っているので三人でしかじゃんけんできません。
あと、ルール
一人勝ちなら+2ポイント残り二人は-1ポイントずつ
二人勝ちなら+1ポイントずつ残り一人は-2ポイント
終了条件は特に無し
# EUC-JPなファイルをupしたら文字化けorz
269:デフォルトの名無しさん
06/05/31 14:02:51
>>268
URLリンク(sourcepost.sytes.net)
Rubyっぽくしてみた。
ルール(配点)の入れどころがよくわからんかったので消してしまったがJanken側にあるべきではないか。
$ ruby source.rb プレーヤ数 回数
で実行できるけど30人越えた辺りで反応がすげー鈍くなるよ。
270:268
06/05/31 19:56:37
>>269
うーん、Rubyだ。
ポイントの入れ方は、3人でじゃんけんして
あいこなら変化なし
一人勝ちなら勝った人は+2point,負けた二人は-1pointずつ
二人勝ちなら勝った二人は+1pointずつ,負けた人は-1point
# ダメな変数の使い方の見本になってしまったorz
# flagに複数の意味を持たせてしまっていたようだ
# いくら一年以上前のプログラムだからって気付けよ>一昨日の自分
確かに、配点を弄るメソッドがPlayerにあるのは変ですね。
Jankenクラスにjudgeメソッドを実装するなら、ポイントを弄るメソッドも
Jankenクラスにあるべきですね。
>268の時点では、Jankenクラスは特に役目は無くて(ってまたダメな設計の見本orz)
単にゲームを開始するだけの係りでした。
271:デフォルトの名無しさん
06/05/31 20:38:13
>>269
>>263の人?
初心者だけど、Rubyの勉強になった。サンクス。
2時間ぐらいマニュアルと格闘しながら解読した。
272:デフォルトの名無しさん
06/06/01 13:08:46
Jankenにポイント計算つけた。
URLリンク(sourcepost.sytes.net)
(敗者数/勝者数).ceilのポイント(敗者数>勝者数、そうでなければポイント=1)を分ける。
敗者は常に-1にしてある。
3人でやったときは同じ結果で、それ以上でも同じルールをスケールした結果になるはず。
273:デフォルトの名無しさん
06/06/01 19:51:06
>>272
本当に些細なことだが、
scissorsは単複同形だよ。
274:デフォルトの名無しさん
06/06/02 01:38:55
N人であいこなし。複数人が勝てるパターンにしてみた。
URLリンク(sourcepost.sytes.net)
使い方は>269と同じ(パクりました)
* 変数名、メソッド名を自分の好みに変更
* 判定にビット演算を使いたかったので、手の定義を変更した。
* 対話的に動かせるようにしてみた。
* 回数が多いときは誰かが101勝したら終了
* 人数を増やしすぎると延々あいこが続くので決着が着かない
例えば、
$ ruby Janken.rb 3 10
なら、3人で10回勝負が着くまでじゃんけんしつづける。
# あいこでredoさせるのに手間取った
# Fixnum#stepでredoすると最初からになってしまうorz
# 人数が多い時は別の終了条件にした方が良さそう。
# おいらが書くと長くなってしまうorz
275:デフォルトの名無しさん
06/06/03 15:28:38
age
276:デフォルトの名無しさん
06/07/16 14:47:02
すいません。
ある文字列があったときに、特定の範囲の文字色を変えるというプログラムをつくりたいのですが、
どなたかアドバイスお願いします。
いまはHTMLで出力しているのですが、それ以外にも、ruby/tkでつくったプログラム上に表示したいと思っています。
277:デフォルトの名無しさん
06/07/16 15:07:20
file=File.read('test.txt')
rules=[
{'re' => /cat/ ,'from' => 'ねこだいすき', 'to' => '<font color=red>ねこだいすき</font>'},
{'re' => /dog/, 'from' => 'いぬだいすき', 'to' => '<font color=blue>いぬだいすき</font>'}
]
rules.each do |rule|
if file =~ rule['re'] then
file.gsub(rule['from'],rule['to'])
end
end
#アドバイスって何が欲しいんだろう…
278:デフォルトの名無しさん
06/07/17 04:44:43
宿題スレ向きだよな。
アドバイスじゃなくて正解が知りたいと思う悪寒。
こう試してみたけど出来ませんじゃないし。
279:デフォルトの名無しさん
06/07/17 10:32:52
ここ宿題スレだよね
280:デフォルトの名無しさん
06/07/17 11:33:00
宿題隔離スレだから自力でできた(できてない)とこから以下全部丸投げとかでも構わない
こんなとこで一言一句完全丸写ししてバレないと思ってるならそれでもいいし
ただし問題が何したいのかさっぱりわからん場合はそれこそ問題外
281:デフォルトの名無しさん
06/07/17 11:45:35
問題文さえここに正確に書き写せない香具師なんだからどうなっても知らん
282:デフォルトの名無しさん
06/07/24 21:22:49
さっぱりわかりません。どうかよろしくお願いします。
URLリンク(kansai2channeler.hp.infoseek.co.jp)
283:デフォルトの名無しさん
06/07/24 21:32:58
ar.push ar.shift
284:デフォルトの名無しさん
06/07/24 21:48:13
これもわかりません。どうか優しい人よろしくお願いします。
URLリンク(kansai2channeler.hp.infoseek.co.jp)
285:デフォルトの名無しさん
06/07/24 21:51:24
>>283
その日の授業内容にもよるが先生が頭抱えそうな回答だな(w
286:デフォルトの名無しさん
06/07/24 21:59:40
>282,284
っていうか教科書読めよ。
特に 284 なんて問題文に答えが書いてあるのにこれ以上優しく説明できるか。
287:デフォルトの名無しさん
06/07/24 23:23:54
x = ARGV[0].to_i
if /[05]$/ =~ x.to_s
print "#{x}は5の倍数です。\n"
end
if /^(([0369]|[258][0369]*[147])|([147]|[258][0369]*[258])([0369]|[147][0369]*[258])*([258]|[147][0369]*[147]))*$/ !~ x.to_s
print "#{x}は3の倍数ではありません。\n"
end
288:デフォルトの名無しさん
06/07/25 01:02:30
>>287
ありがとうございました!!!!!
本当に助かりました!
289:デフォルトの名無しさん
06/07/25 14:27:15
>>283や>>287を提出したのだろうか
290:デフォルトの名無しさん
06/07/25 20:27:32
283はいいと思うけど、287はちょっとなぁ。
291:デフォルトの名無しさん
06/07/25 20:32:00
>>282も配列の添え字の勉強をした上での宿題なんじゃないかと思うぞ…
292:デフォルトの名無しさん
06/07/25 21:19:06
>>287の3の倍数でない方がよくわからん。
3で割り切れないじゃダメなの?
293:デフォルトの名無しさん
06/07/25 21:23:40
5の倍数のとこをよく読んで意図を掴め
294:デフォルトの名無しさん
06/07/26 02:42:09
ARGV[0].to_s.split(//)#!/usr/bin/ruby
def sm(s)
sm = 0
s.to_s.split(//).each {|e|
sm += e.to_i
}
sm = sm(sm) if(sm >= 10)
return sm
end
f = [true, false, false, true, false, false, true, false, false, true]
p f[sm(ARGV[0])]
295:デフォルトの名無しさん
06/07/26 02:42:50
ゴミがついたので貼りなおし
#!/usr/bin/ruby
def sm(s)
sm = 0
s.to_s.split(//).each {|e|
sm += e.to_i
}
sm = sm(sm) if(sm >= 10)
return sm
end
f = [true, false, false, true, false, false, true, false, false, true]
p f[sm(ARGV[0])]
296:デフォルトの名無しさん
06/07/26 02:45:06
文字が入力されてたらアウトだからこうかな
#!/usr/bin/ruby
def sm(s)
sm = 0
s.to_s.split(//).each {|e|
sm += e.to_i
}
sm = sm(sm) if(sm >= 10)
return sm
end
p [false, false, false, true, false, false, true, false, false, true][sm(ARGV[0]
)]
297:デフォルトの名無しさん
06/07/26 18:19:26
x = ARGV[0].to_i
if ("x" * x).gsub(/xxx/,'') !~ /x/
print "#{x}は3の倍数ではありません。\n"
end
298:デフォルトの名無しさん
06/07/28 00:58:09
どうか助けてください。
URLリンク(kansai2channeler.hp.infoseek.co.jp)
299:デフォルトの名無しさん
06/07/28 01:13:51
またお前あるいは同類か
どうでもいいがこれまで言われたアドバイス全然生かしてねえな
300:デフォルトの名無しさん
06/07/28 01:17:03
授業で習ってない書き方をしたら丸写しバレるだろって話ね(w
301:デフォルトの名無しさん
06/07/28 01:39:33
こんなに答えの書いてある問題はさすがにないと思うんだが、本当に宿題なのかなあ。
302:デフォルトの名無しさん
06/07/28 01:43:07
>>301
すまん、こういうパズル未満の難易度の言葉合わせな宿題は出る。
授業聞いてればそれなりに何使うかは思いつくだろ、みたいな。
情報でのプログラムの演習なんてその程度でいいんだよ。
303:デフォルトの名無しさん
06/07/28 01:47:16
>>298
てゆーかさ、これだとpflagはずっとtrueのままじゃね?
304:デフォルトの名無しさん
06/07/28 01:53:24
>>298
include Math
n = ARGV[0].to_i
ne = sqrt(n).to_i
pflag = true
for i in 2..ne
break if pflag = n % i == 0
end
puts pflag ? 'xx は合成数です' : 'xx は素数です'
俺にはこれが限界
後は誰か頼む
305:デフォルトの名無しさん
06/07/28 01:57:00
プログラムが書けるより、問題を論理的に解析して解の生成アルゴリズムをひらめくのが重要。
アルゴリズムがひらめけばあとは言語仕様に従って記述すればプログラムに成るし。
306:ど素人
06/07/28 02:01:09
参考書にてわからない問題がありました。次のプログラムって日本語でどう説明できますか?
ぜひお願いします。
A=new Array(3, 8, 19, 20, 22, 24, 45);
i=0;
j=A.length-1;
a=19;
k=Math.floor((i+j)/2);
while(i<=j){
if(A[k] == a){
break;
}
else if(A[k] > a){
j = k - 1;
}
else{
i = k + 1;
}
k = Math.floor((i+j)/2);
}
if(i>j) k=-1;
document.write(a," ",k);
307:デフォルトの名無しさん
06/07/28 02:06:14
>>306
Rubyじゃないじゃん。
308:デフォルトの名無しさん
06/07/28 02:15:10
javascriptか
言語ですらないな
板違いだ
309:デフォルトの名無しさん
06/07/28 02:20:29
JavaScriptの言語性を馬鹿にしていると痛い目見るぞ
310:デフォルトの名無しさん
06/07/28 02:32:19
>>309
馬鹿にされたと思ったあなたは >>306 ですか?
311:デフォルトの名無しさん
06/07/28 09:16:50
どこをどう読めば人を馬鹿にしてると読めるんだろう
312:デフォルトの名無しさん
06/07/28 09:26:32
馬鹿な人がいるようには読める。
313:デフォルトの名無しさん
06/07/28 10:32:03
馬鹿な人には読めないマキコ。
314:デフォルトの名無しさん
06/07/28 13:19:12
どっちにしろ荒らしに反応すな
315:デフォルトの名無しさん
06/07/28 16:16:36
js=ajax=web2.0
316:デフォルトの名無しさん
06/08/26 13:24:41
もしかしたらスレ違いかも知れませんが…
コマンドラインから
テキストファイルを、各行の頭に行番号を付け表示したいのです。
今は Ruby で
ruby -e 'a=readlines;for i in 0...a.size;printf"%6d: %s",i+1,a[i];end' textfile
としています。
でももう少し短くなる気がするのですが、良いワンライナー無いでしょうか?
317:デフォルトの名無しさん
06/08/26 14:03:40
ruby -ple 'printf "%6d: ", $.'
318:デフォルトの名無しさん
06/08/26 14:07:40
ruby -e 'exec("/bin/cat", "-n", *ARGV)'
319:デフォルトの名無しさん
06/08/26 14:16:06
ruby -e 'ARGF.each{|s|printf "%6d: %s", ARGF.file.lineno, s}'
320:316
06/08/26 17:00:01
>>317
短ッ!rubyのオプションと特殊変数の事
すっかり忘れてました、感謝です
>>318
環境書き忘れてた…今度リナやユニ触る機会があったら
catのオプションの事思い出します
>>319
ARGF.eachはさっき気付いて
i=0;ARGF.each{|s|printf "%6d: %s",i+=1,s}
って書いたところでした
そういやARGFは独自のメソッド持ってるんでしたね…
321:デフォルトの名無しさん
06/08/30 11:56:52
>>320
> i=0;ARGF.each{|s|printf "%6d: %s",i+=1,s}
そういうときはwith_index使えって教わんなかったか?
ARGF.each_with_index{|s, i|printf "%6d: %s", i, s}
322:デフォルトの名無しさん
06/08/31 22:22:15
二進表示をprintf,sprintfを使わず、正の整数を入力して
その二進表示を出力するプログラムを作成しよ。
ただし整数から二進表示文字列を作るメソッドi2bを
作成してそれを呼び出すように書くこと。
できるだけ簡単なプログラムでお願いします。
Ruby初心者なのでわからなくて困ってます。
323:デフォルトの名無しさん
06/08/31 22:35:13
>>322
alias myprintf printf
myprintf("%b\n", 10) #=> 1010
324:デフォルトの名無しさん
06/08/31 22:38:35
>>323
ありがとうございます。
でも、せっかく作成していただいたのに申し訳ないのですが
printfは使って作成してはいけないんです。
325:デフォルトの名無しさん
06/08/31 23:05:24
ちっ、バレたかwww
326:デフォルトの名無しさん
06/08/31 23:05:42
>>322
こんなんじゃダメ?
def i2b i
return i.to_s(2)
end
327:デフォルトの名無しさん
06/08/31 23:16:24
Fixnum < Integer#to_s
--- to_s
--- to_s(base) ruby 1.7 feature
整数を 10 進文字列表現に変換します。
ruby 1.7 feature: 引数を指定すれば、それを基数とした文字列表
現に変換します。基数として 2 ~ 36 以外を指定した場合は例外
ArgumentError が発生します。
p 10.to_s(2) # => "1010"
p 10.to_s(8) # => "12"
p 10.to_s(16) # => "a"
p 35.to_s(36) # => "z"
これか。
これ提出されたら、宿題だした奴もがっくり来るだろうなw
328:デフォルトの名無しさん
06/08/31 23:28:58
>>326>>327
ありがとうございます。
家のパソコンだとプログラムが実行できないので
明日実行できるパソコンで試してみます。
329:デフォルトの名無しさん
06/08/31 23:29:00
超ナイーブに書いてみたが数字がでかいとスタックオーバーフローで死ぬ。
def to_bin(i); q, m = i.divmod(2); q == 0 ? m : to_bin(q).to_s + m.to_s;end
330:デフォルトの名無しさん
06/08/31 23:34:27
>>328
家のパソコンにもRubyインストールすればいいだろ?
よっぽど特殊なOSで無い限り入れられる。
331:デフォルトの名無しさん
06/08/31 23:42:20
329>>
何回もインストールしてみたのですが
何回挑戦しても失敗してしまいます。
332:デフォルトの名無しさん
06/08/31 23:55:11
>>331
URLリンク(rubyforge.org)
URLリンク(instantrails.rubyforge.org)
どっちでも好きな方を試せ。
使い方は聞くな。
333:デフォルトの名無しさん
06/09/01 00:00:08
最近は宿題もWeb2.0とか意識するべきだと思うんだ
def i2b(i)
require "open-uri"
open('URLリンク(google.co.jp)'+i+'+in+binary').read.scan(/0b([01]+?)</)
end
puts "正の整数を入れてください"
i=STDIN.gets.chomp
puts i2b(i)
334:デフォルトの名無しさん
06/09/01 00:03:39
332>>333>>
ありがとうございます。
助かりました。
335:デフォルトの名無しさん
06/09/01 00:13:12
web 2.0ってperl廚の妄言のような。
phpとの戦いで死にかけてるから生き残りに必死な様にしか見えない。
336:デフォルトの名無しさん
06/09/01 00:17:55
>>335
そうか?PHPってgoto導入して死ぬんだろ?
337:デフォルトの名無しさん
06/09/01 00:20:51
Web2.0は言語を規定しない(そもそも何も規定しないがw)
「なんかWeb通して新感覚にみんなで超便利」というサービスを提供する限り、
サーバー上の言語は本当に何でもよい
338:デフォルトの名無しさん
06/09/01 00:43:49
初心者の自分が作った方が参考になるんじゃないのかな?
def i2b i
b = "" # 2進法文字列の初期化
while i>0
if i%2 == 1 then # 2で割って余りをもとめる
b = "1" + b # 1なら文字列の先頭に1を追加
else
b = "0" + b # 0なら文字列の先頭に0を追加
end
i = i/2
end
return b
end
339:デフォルトの名無しさん
06/09/01 01:06:58
def i2b(i)
cc = nil
b = ""
if i = callcc {|cc| i}
b = "01"[i % 2] + b
cc.call((i / 2).nonzero?)
end
b
end
340:デフォルトの名無しさん
06/09/01 09:53:17
>>338
わかりやすく教えていただいて
ありがとうございます。
>>339
ありがとうございました。
341:デフォルトの名無しさん
06/09/01 11:03:29
>>338
参考にはなるかもしれんが、ためにはならんぞ。
342:デフォルトの名無しさん
06/09/09 05:00:57
Rubyで書かれたうpろだのソースってありますか?
343:デフォルトの名無しさん
06/09/09 11:31:05
ハイレベルな宿題だな
344:デフォルトの名無しさん
06/09/09 19:34:15
>>342
cgi限定?
http以外のプロトコル使ってもいいのかな?
345:デフォルトの名無しさん
06/09/09 21:53:01
AppleTalkでお願いします。
346:デフォルトの名無しさん
06/09/10 18:06:15
>>342
ここにあるよ
URLリンク(wirepuller.org)
347:デフォルトの名無しさん
06/09/11 16:25:43
>>346
ありがとうございます。
CGI.rbの仕様で10kB以下だとStringIOで処理されて
それ以上のサイズだとTempfileオブジェクトになるようだと
書いてあるのですが
「Tempfileの場合、数MBのファイルをread,writeするのはあれなので」
という部分の意味が良く分かりません
何があれなんでしょうか
348:デフォルトの名無しさん
06/09/11 16:43:40
やっぱり、なにがあれなんだろう。
349:デフォルトの名無しさん
06/09/11 16:47:04
「数MBのファイルを、わざわざ Ruby の read/write を使ってアップローダ側
のディレクトリの特定のファイルにコピーするのは処理にオーバヘッドがかか
るので」
てとこじゃね。
350:デフォルトの名無しさん
06/09/11 16:51:16
ああでもあれか、 FileUtils.cp ってけっきょく ruby レベルで read/write
を繰り返しているわけだよな。まあ、当り前だが。
それに、ソースを見てみると file.size の大小で TempFile かどうか判定し
てるね。 is_a? とかを使った方がいいんじゃないかなあ。
351:デフォルトの名無しさん
06/09/11 22:39:34
multipart/form-dataってファイル毎のデータ長送ってこない上に、次にどのファイル(or フォームのクエリ)が来るか分からないんだっけ。
だから便利性を求めたライブラリは、テンポラリファイル作るとか回りくどい仕様になってるんだよね。
こういうインターフェイスにすれば、少し面倒になるけど
テンポラリも要らないし融通が利くのに。
cgi = CGI.new
cgi.find_file {|info, fp|
# フォームから送られた名前で振り分け
if info.name == "upload_file"
# fpを使ってファイルに保存する処理
else
# 普通のクエリとして扱う
cgi[info.name] = fp.read
end
}
352:デフォルトの名無しさん
06/09/15 02:07:28
def seach(dir, key)
↑
dir(ディレクトリ), key(検索キーワード)
で指定したディレクトリ下にある合致するファイルを検索して
合致するファイル名の配列を返す関数のコードお願いします。
353:デフォルトの名無しさん
06/09/15 02:52:35
自分で出来ました。お騒がせしました。
def seach(dir, key)
a = Array.new
Dir.foreach(dir){|f|
if f[key]
a.push(f)
end
}
a
end
seach(Dir.getwd, ".txt").each{|v|
print v + "\n"
}
354:デフォルトの名無しさん
06/09/15 04:44:56
Dir.glob(dir + "/**/" + key)
じゃ駄目?
355:デフォルトの名無しさん
06/09/15 09:46:53
合致するファイルって名前だけか。
356:デフォルトの名無しさん
06/09/15 12:35:15
353.gsub(/serch/, 'search')
357:デフォルトの名無しさん
06/09/15 12:36:53
353.gsub(/seach/, 'search')
358:デフォルトの名無しさん
06/09/15 13:35:36
353.gsub /(?=。)/, "お"
(^ω^ )
359:デフォルトの名無しさん
06/09/19 05:01:46
数字に変換できなくなるまで、入力を何回でも受け付けるプログラムを
作りました。入力された文字列が数字に正しいものかどうかをチェック
するようなフィルタを作ったんですが、あまりスマートに書けませんで
した。もう少し、きれいなコードを書く方法をご存知の方、ご意見を下
さい。
#!/usr/bin/ruby
def i2b (i) ;return i.to_s(2) ;end
#文字列が数値に変換可能かチェックする 0xffはOK 124ffはNG
def analyzer (str) #if str can be converted to number => true else => false
str.delete!("\n");str.downcase!
case str[0..1]
when '0x'
num = str.to_i(16)
if num.to_s(16) != str[2..-1] ;return false ;end
when '0b'
num = str.to_i(2)
if num.to_s(2) != str[2..-1] ;return false ;end
360:デフォルトの名無しさん
06/09/19 05:03:41
when '0d'
num = str[2..-1]
if num.to_s(10) != str[2..-1] ;return false ;end
when '0o'
num = str.to_i(8)
if num.to_s(8) != str[2..-1] ;return false ;end
else
if str[0] == '0'[0] and str.length > 1
num = str.to_i(8)
if num.to_s(8) != str[1..-1] ;return false ;end
elsif str[0] != '0'[0]
num = str.to_i(10)
if num.to_s(10) != str ;return false ;end
end
end
return true
end
puts "please input number."
loop{
print ">" ;str = gets()
if analyzer(str) == false ;puts "#{str} is not number" ;exit ;end
num = str.to_i(0) ;puts i2b(num)
}
361:デフォルトの名無しさん
06/09/19 13:54:30
age
362:デフォルトの名無しさん
06/09/20 00:09:54
def analyzer(str)
Integer(str)
true
rescue ArgumentError
false
end
363:359
06/09/20 01:36:19
ありがとうございます。組込み関数のInteger(str)は見落としていました。
str.to_i()が例外を投げない仕様になっていたので困っていた所です。
あとリファレンスを読むのが不十分でした。すいません、今後は気を付けます。
364:359
06/09/20 01:37:01
ありがとうございます。組込み関数のInteger(str)は見落としていました。
str.to_i()が例外を投げない仕様になっていたので困っていた所です。
あとリファレンスを読むのが不十分でした。すいません、今後は気を付けます。
365:デフォルトの名無しさん
06/09/25 00:44:03
お礼は一回でおk。
366:デフォルトの名無しさん
06/09/25 05:45:12
ありが㌧㌧㌧㌧㌧㌧㌧㌧㌧㌧㌧㌧㌧㌧㌧㌧㌧㌧㌧㌧㌧㌧㌧㌧㌧㌧㌧㌧㌧㌧㌧㌧㌧㌧㌧㌧㌧㌧㌧㌧㌧㌧㌧㌧㌧㌧㌧㌧
367:デフォルトの名無しさん
06/10/04 13:58:21
勉強になるので、以前のじゃけんプログラムみたいな数百行程度のプログラムを
また作って欲しいのですが。
368:デフォルトの名無しさん
06/10/04 16:22:36
自分で作った方が勉強になるぞ。
369:デフォルトの名無しさん
06/10/04 19:45:42
>>367
ネタ寄越せ。
370:デフォルトの名無しさん
06/10/04 20:41:08
「ババ抜き」とかどうでしょうか?
表示は、例えばこんな感じで
A:H1 D3 SQ C9 HJ DK S0
B:D4 S0 CQ JK
C:C5 H0 S2 DQ SK
D:D4 H1 CK SJ H7 H9
Aさんが、Bさんから S0 を取りました。
A:H1 D3 SQ C9 HJ DK
B:D4 CQ JK
C:C5 H0 S2 DQ SK
D:D4 H1 CK SJ H7 H9
Bさんが、Cさんから H0 を取りました。
A:H1 D3 SQ C9 HJ DK
B:D4 CQ JK H0
C:C5 S2 DQ SK
D:D4 H1 CK SJ H7 H9
371:デフォルトの名無しさん
06/10/04 23:45:38
たびたびわからなくなるんだが、
引かれた奴が次に他の奴から引くんだっけ?
引いた奴が次に他の奴から引かれるんだっけ?
372:デフォルトの名無しさん
06/10/04 23:52:43
ローカルルールがあるかもしれないが、うちでは引いた奴が他の奴から引かれるというルール。
そうじゃないと、「おい、お前今混ぜてるのはババ引いたからだろ!」ということが起こらず面白くない。
373:デフォルトの名無しさん
06/10/05 23:53:37
最強のジャンケンAI。綿密な先読みで人間などには負けることが無い。
↓
print "ジャンケンしーましょ、最初はグー!"
print "ジャンケン・・・[g=グー/c=チョキ/p=パー]:"
puts "AIの手:"+ ({?g => "パー", ?c => "グー", ?p => "チョキ"}[gets[0]] or raise "死ね。")
puts "お前の負けだ。"
374:デフォルトの名無しさん
06/10/06 00:18:51
>>373
それは後出しと言って反則なんだよ。
375:デフォルトの名無しさん
06/10/06 03:40:29
いや、出す瞬間に、相手の手を見て反応しているのでOK。
ハンターハンターでやってた
376:デフォルトの名無しさん
06/10/06 07:35:01
>>375
ハンターハンターのは「出す直前」だが、>373のは完全に後出し。
377:デフォルトの名無しさん
06/10/06 13:48:43
ババ抜きってさあ、記憶力と観察力があれば、自分のとこから取られたカードがどこにあるかわかるから有利になれるんだけど
そういう戦略を実装できるようにすべき?
378:デフォルトの名無しさん
06/10/06 14:12:53
したけりゃしろよ。
スレ違いだし。
379:デフォルトの名無しさん
06/10/06 15:33:39
スレ違いな理由は何?
380:デフォルトの名無しさん
06/10/06 16:11:05
>>377
した方が面白いと思う。
381:デフォルトの名無しさん
06/10/06 21:14:51
>>377
戦略とかあるの?
ランダムに引く人と戦略を持っている人とで、勝利確率どのぐらい違うが見てみたいね。
382:デフォルトの名無しさん
06/10/06 21:31:05
戦略:こっそりはなくそをつけとく
383:デフォルトの名無しさん
06/10/07 23:40:54
質問です。
次のようなテキストファイルがあったとします。
"ほげほげ","なんとか","むだむだ"
"ほげほ","なんとかか","むだむだだ"
(以下、何十行か続く)
それを
ほげほげ なんとか むだむだ
ほげほ なんとかか むだむだだ
(以下続く)
という感じの書式(空白はタブです)に変えてテキストファイルとして書き出すスクリプトを書きたいのですが、
正規表現とか難しいことを使わないと行けないのでしょうか。
どなたかやり方ご存じありませんでしょうか。
384:デフォルトの名無しさん
06/10/07 23:49:02
データに","が含まれないなら
while s = gets
puts s.gsub(/"/, "").gsub(/,/, "\t")
end
ちゃんとCSVを処理したいなら、RAAでcsv関連のライブラリを探すとか。