RUBYの宿題教えてください。
レス数が1000を超えています。これ以上書き込みはできません。
0001RUBY
05/01/24 22:17:37その講義で、期末テストとして課題が出たのですが、プログラミング初心者の私には
全然歯が立ちません。締め切りは1/31です。プロも皆さんには簡単な
問題かもしれませんがどうか教えてください。
課題は以下の通りです。
0002RUBY
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
0003RUBY
05/01/24 22:19:48まず、それぞれの月を番号とし、日数を要素として配列を考えてみましたが
全然解けません。講師は、「配列なんかわざわざ使わなくてもいい」
と言っていたので、解く糸口も失ってしまいました。
どうか、解答のプログラムを教えてください。
0004デフォルトの名無しさん
05/01/24 22:44:38> その講義で、期末テストとして課題が出たのですが、プログラミング初心者の私には
> 全然歯が立ちません。締め切りは1/31です。プロも皆さんには簡単な
うそつけ。歯が立たないのは、おまえの頭が弱いからだろうが。
0005デフォルトの名無しさん
05/01/24 22:45:33ないなら探せ。
講師は>2の文章が理解できるか君を試しているんだ。10時間考えても分からないなら「グレゴリオ歴」を調べよ。
0006デフォルトの名無しさん
05/01/24 22:49:19わかりました。自分でやってみます。ありがとうございました
0007RUBY
05/01/25 00:16:51罵声や無視がたくさんあるところだと思っていました。さっそく>>4のデフォルトの名無しさんに怒られてしまいました。
でも、名無しさんが言うように自分の力でやった方がためになりますよね。
図書やマニュアルを使って自分で考えてみたいと思います。>>5の助言もありがとうございました。
プログラミング分野の人たちは優しいですね。
0008デフォルトの名無しさん
05/01/25 00:19:460009デフォルトの名無しさん
05/01/25 00:21:43> Rubyが宿題になる学校も出てきたのか
宿題には、アカデミズムの世界以外ではまったく見ない言語を使ったりしますが。
0010デフォルトの名無しさん
05/01/25 00:25:12と言うか、期末テストなら自分で考えた方が後々にも役立って良いよ、1/31までは十分長いからね。
0011デフォルトの名無しさん
05/01/25 00:25:450012デフォルトの名無しさん
05/01/25 00:29:44HSPを教える学校があるこんな世の中じゃ
0013デフォルトの名無しさん
05/01/25 00:35:12> Rubyはアカデミズムの世界以外ではまったく見ない言語な訳でつね。
違うだろ。
0014デフォルトの名無しさん
05/01/25 00:36:31こんなに露骨なネタにマジレスって(ry
0015デフォルトの名無しさん
05/01/25 00:39:54> HSPを教える学校があるこんな世の中じゃ
教えるだけまし。
わたしが学生の時には、
「次回からC言語を使うので、来週までにマスターしておいてください」
だった。
0016デフォルトの名無しさん
05/01/25 00:41:17何と言うか、教える気NULLだな。
0017デフォルトの名無しさん
05/01/25 07:49:10うちの大学では1〜2年前期はCで2年後期にRubyだな
0018デフォルトの名無しさん
05/01/25 08:39:000019デフォルトの名無しさん
05/01/25 10:16:130020デフォルトの名無しさん
05/01/25 10:29:180021デフォルトの名無しさん
05/01/25 10:38:35だから>2を読めって。分からないなら質問しろ。丸投げはダメだ。こんなアホな宿題を他人にやらせてたら、ダメ人間になっちゃうゾ!
0022デフォルトの名無しさん
05/01/25 11:07:15と言うか、>>2を与えられてもまだダメだというのは、よほど無能だと
言うことだから、こいつにはプログラミングはさっさとあきらめて、
コンピュータ関係の業界に来ないで欲しいと言いたいな。
0023デフォルトの名無しさん
05/01/25 11:09:25です;
とりあえず配列使って書けたけど
>19さんの言う通りifとかcaseを使うのかな・・・(;´Д`)ウーン
002418
05/01/25 11:10:100025デフォルトの名無しさん
05/01/25 20:29:39attr_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
0026デフォルトの名無しさん
05/01/25 20:31:35attr_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
0027デフォルトの名無しさん
05/01/25 20:34:16Rubyマニュアルで文法読め!
>19の助言を読め!
大馬鹿者!
0028デフォルトの名無しさん
05/01/25 21:08:12Rubyマニュアルって何ですか?
0029デフォルトの名無しさん
05/01/25 21:56:55if 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
つづきます。
0030デフォルトの名無しさん
05/01/25 21:57:26s[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)
クイックソートのソースなんですけど、何故か上手くならんでくれません…。
0031デフォルトの名無しさん
05/01/25 22:12:440032デフォルトの名無しさん
05/01/25 22:15:43とにかくがんばれ
0033デフォルトの名無しさん
05/01/26 04:31:56case month
when 1,3,5,7,8,10,12
31
when 4,6,9,11
30
when 2
28
end
0034デフォルトの名無しさん
05/01/26 06:42:540035デフォルトの名無しさん
05/01/26 13:30:250036デフォルトの名無しさん
05/01/26 13:36:04詳しい人が変わりにやってあげるのが当然だと思います。
人間らしい思いやりの心を見せましょう。
0037デフォルトの名無しさん
05/01/26 13:50:23誤 while j >= first && s[i] >pivot do
正 while j >= first && s[j] >pivot do
よく見んと判らんなw
0038sage
05/01/27 00:58:54あああ、ありがとうございます!!!
動きましたーー!!たすかりました〜〜ホロリ
0039デフォルトの名無しさん
05/01/27 01:00:120040デフォルトの名無しさん
05/01/27 08:54:330041デフォルトの名無しさん
05/01/28 10:44:290042デフォルトの名無しさん
05/01/28 19:11:540043デフォルトの名無しさん
05/01/29 02:40:38らくないので勉強していなかったのでまったくわかりません。誰か助けてい
ただけませんか?
・web上の適当な英文をもちいて、大文字、小文字を無視して、各アル
ファベッドについて、次に来る文字の頻度をカウントする。単語の終
わりでは次に来る文字は、空白、カンマピリオドなどである。数字も
含め、これらはアルファベッド以外の記号は、まとめてカウントする。
結果をHTMLの表として出力する。縦に最初の文字、横に次の文字とし
て分布を見る。
という問題ですが誰かお願いします!
0044デフォルトの名無しさん
05/01/29 02:43:59コピペしてすぐ提出できるように、ちゃんと書いておいてください。
0045デフォルトの名無しさん
05/01/29 02:51:57コピペしてすぐ提出できるように、ちゃんと書いておいてください。
上の文は誰か他の人が書いたものなので。
ぜひお願いします!
0046デフォルトの名無しさん
05/01/29 02:55:490047デフォルトの名無しさん
05/01/29 03:07:57「アルファベット」でした。すいません。
0048デフォルトの名無しさん
05/01/29 03:30:15タグはどうすんの? web上の英文て対象はHTMLを含むんだよね。
<p>baka</p>
なんてHTMLが送られてきたら、pは2回、bakaは1回てカウントするの?
それともpは無視?
0049デフォルトの名無しさん
05/01/29 03:32:160050デフォルトの名無しさん
05/01/29 04:16:34作ってみたよー
require 'open-uri'
TARGET_URI = 'http://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
# 続く
0051デフォルトの名無しさん
05/01/29 04:17:19ALPHABETS = %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)
0052デフォルトの名無しさん
05/01/29 04:41:19あるんですけれども、このプログラムで作ったHTMLの表はどこで見られるの
ですか?
0053デフォルトの名無しさん
05/01/29 04:58:48標準出力に出してる。だからなんかファイルにリダイレクトしてwebブラウザで開け。
例えば、vaka.rbとかいうファイルにスクリプトを書いてコマンドラインから、
ruby vaka.rb > baka.html
とかやればbaka.htmlができるからそれをブラウザで開くといい。
あ、あとRubyは1.8系が前提っすから、その辺よろしく。
0054デフォルトの名無しさん
05/01/29 05:13:42位ももらえそうです。本当にありがとうございました!!
0055デフォルトの名無しさん
05/01/29 12:48:190056デフォルトの名無しさん
05/01/29 12:49:260057デフォルトの名無しさん
05/01/29 12:55:09??
う、うん。思うよ。
0058RUBY
05/01/31 23:19:34今日、期末課題を提出しました。あれから、図書などを調べてプログラミングしてみました。
プログラムを完成させることはできなかったので、あまり良い成績はとれそうもありませんが、
一応、形にはなっていると思うので、それなりの評価はあるでしょう。
今日まで、掲示板を見ることができませんでしたが、課題の解答を沢山の人が作ってくれて
本当にありがとうございました。
今回の課題を作成しているうちにプログラミングに興味を持ったので、
休み中に何かに挑戦してみたいと思っているのですが、どんな言語から始めたらよいか、
どんな言語が将来役に立つか、プログラミング初心者が初めに読んだ方がよい図書は何か
などアドバイスがあったら教えてください。
0059デフォルトの名無しさん
05/01/31 23:22:590060デフォルトの名無しさん
05/02/01 04:19:28Rubyでいいじゃん
そんなにRuby使うの嫌か?
0061デフォルトの名無しさん
05/02/01 06:16:310062デフォルトの名無しさん
05/02/01 13:43:25白血病で氏ね
0063デフォルトの名無しさん
05/02/01 15:18:51> 一応、形にはなっていると思うので、それなりの評価はあるでしょう。
なんで? カンニングは評価くれんでしょ。
0064デフォルトの名無しさん
05/02/02 04:53:06[2] 問題文はhttp://www.edu.ics.saitama-u.ac.jp/~hira/ex04p/prog04ef.b.htmlにあります。
[3] 環境 OS:UNIX 言語:RUBY
[4] 期限:2005年2月29日14:00まで
よろしくお願いします。
0065デフォルトの名無しさん
05/02/02 06:40:10向こうで解こうとしてた者なんだが、これCじゃなかったの?
いや質問者が同一人物とは限らんのだが…
0066デフォルトの名無しさん
05/02/02 07:44:36Cの課題だと思う
コンテスト
ttp://www.edu.ics.saitama-u.ac.jp/~hira/ex04p/prog04en.b.html
== ■ 乱入者部門
* 履修者以外でも, もし乱入者がいれば (私も含めて)
* 「〆切後に改良したから試したい」「C 以外の言語で参加したい」も, こちらで
* 言語は, 端末室の UNIX 環境で使えることが条件
* 履修者・乱入者それぞれのチャンピオンで, 最終戦
0067デフォルトの名無しさん
05/02/03 06:37:06ふむ。あと1ヶ月ほどあるのね。しかも乱入も可か。
乱入してみるかなw
0068RUBY
05/02/04 03:22:20は?見てねーつってんだろ?あ?
パソコンばっかり見てるヒッキー&ブサイク男ちゃん
ドライアイで氏ね
0069デフォルトの名無しさん
05/02/04 10:18:490070デフォルトの名無しさん
05/02/06 14:55:20不謹慎すぎて笑えない
0071デフォルトの名無しさん
05/02/07 22:19:33>>58
> 休み中に何かに挑戦してみたい
好みにもよるが、BASIC・C言語・Rubyのいずれかから入るのが良いと思われる。
入門図書は、図書館があるなら自分で探せ。図書館がなければ
おすすめはC言語なら「C言語プログラミングレッスン」、Rubyなら「たのしいRuby」。
http://www.hyuki.com/lc/
http://www.amazon.co.jp/exec/obidos/ASIN/4797314087/249-5597810-1058710
ちなみに、将来役に立つ言語は何か?という問いには「将来次第」としか答えようがない。
とりあえず何にでも手を出しとけ。
0072デフォルトの名無しさん
05/02/08 00:03:450073デフォルトの名無しさん
05/02/08 02:23:02ユーザビリティ的にはC#(+IDE)かJava(+Eclipse)かPythonかRubyでFAだろう。
入門用と考えると以下は満たして欲しい。
1.参考書
2.ライブラリが豊富
3.IDE(特にコンパイラなら必須)
4.GC
Cは悪くないけど、もはやGCが無い言語は入門用としては遺物ではなかろうか。
ゴージャスなIDE付きでタダで使える実装は無いし。
Basicは発展性がなさ過ぎるというかVBA弄ってて泣きそうになったのでやめとけ。
参考書さえあるならAirみたいなオブジェクト指向でない手続き型のスクリプト言語が
習得がもっとも容易であると思われる。しかしそのような言語はあまり聞かない。
0074デフォルトの名無しさん
05/02/08 02:32:45Rubyは失格だな。なにやるにしてもネットのどこかから拾ってくればできなくもないって奴ばっかだし。
0075デフォルトの名無しさん
05/02/08 02:33:090076デフォルトの名無しさん
05/02/08 02:35:45HSP
0077デフォルトの名無しさん
05/02/09 01:37:25HSPもいいのかも知れないなあ、と一瞬思ったけどgotoを使うのが基本の言語はダメだろ。
関数定義はないし構造体も無いのは無理。
0078デフォルトの名無しさん
05/02/09 12:36:480079デフォルトの名無しさん
05/02/09 13:01:070080デフォルトの名無しさん
05/02/09 13:15:100081デフォルトの名無しさん
05/02/09 13:51:44目的がないのではなく、多目的なのでは?
0082デフォルトの名無しさん
05/02/09 18:14:330083デフォルトの名無しさん
05/02/09 20:05:17あとはApolloを使ってGUIアプリケーションとか
0084デフォルトの名無しさん
05/02/09 21:37:050085デフォルトの名無しさん
05/02/09 22:24:35Rubyを使うことが目的なのか?あふぉか?
0086デフォルトの名無しさん
05/02/22 21:23:13[2]問題文:オセロを作れ
[3]環境
[3.1]OS:
[3.2]コンパイラ:
[3.3]言語:Ruby
[4]期限:23日昼
[5]その他の制限:CPU対戦は不要
0087デフォルトの名無しさん
05/03/02 12:45:210088デフォルトの名無しさん
2005/06/20(月) 02:25:44[2] M17N
[3] native thread対応
0089デフォルトの名無しさん
2005/07/17(日) 16:31:23熟語辞書の中から熟語をランダムに選択して、その語彙を含む問題文をコーパスから拾ってきて生成するシステム。
ちょっと手がつかないです(*_*)
0090デフォルトの名無しさん
2005/07/17(日) 16:48:400091デフォルトの名無しさん
2005/07/17(日) 22:33:490092デフォルトの名無しさん
2005/07/21(木) 12:12:27ありませんね。
0093デフォルトの名無しさん
2005/08/14(日) 08:22:480094デフォルトの名無しさん
2005/08/17(水) 08:01:080095デフォルトの名無しさん
2005/09/18(日) 19:13:130096デフォルトの名無しさん
2005/10/12(水) 00:31:12の順に書かれているファイルを読み込んで、平均点と学籍番号順に並べ替えて表示するプログラムを作れといわれました。
0097デフォルトの名無しさん
2005/10/13(木) 01:07:08puts data.inject(0){|a,b| a+b.split[2].to_i}
puts data.sort_by{|a|a.split[0].to_i}
0098デフォルトの名無しさん
2005/10/19(水) 09:08:520099デフォルトの名無しさん
2005/10/20(木) 01:00:36puts data.inject(0){|a,b| a+b.split[2].to_i} / data.length.to_f
といったところか。
0100ハーピィ
2005/10/20(木) 01:06:070101デフォルトの名無しさん
2005/10/22(土) 21:44:51例えばp 5.0.integer?ならtrue、p 5.01.integer? はfalse
と整数を判別して出力するのを作れといわれました。
ほんの数行で出来るらしいのですがよろしくお願いします。
0102デフォルトの名無しさん
2005/10/23(日) 20:07:470103デフォルトの名無しさん
2005/10/23(日) 20:47:56"判別する"というのを条件文で実装する必要はないんですよね?
> class Integer
> def integer?
> return true
> end
> end
>
> class Float
> def integer?
> return false
> end
> end
0104デフォルトの名無しさん
2005/10/28(金) 11:17:45それって 5.0.integer? が false になるし。
class Numeric; def my_int?; self.ceil == self; end; end
てところだろう。本質的には一行。
ちなみに Ruby にもとからある integer? は、 Numeric が常に偽を返し、
Integer でオーバーロードして常に真を返すようにしている。つまり103と同
じようなものになっている。
0105デフォルトの名無しさん
2005/11/12(土) 20:10:440106デフォルトの名無しさん
2005/11/21(月) 21:15:42完成しなくて困っています。
自分はプログラムでは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
0107原文
2005/11/21(月) 21:16:55a=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")
0108原文続き
2005/11/21(月) 21:17:48for 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
0109デフォルトの名無しさん
2005/11/21(月) 23:24:14puts '<table>'
result.each{|row|
puts '<tr>'
row.each{|cell|
puts "<td>#{cell}</td>"
}
puts '</tr>'
}
puts '</table>'
0110デフォルトの名無しさん
2005/11/21(月) 23:34:17# 動作確認はしてないので悪しからず御了承を。
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>"
}
# 変数名はとりあえず意味のわかるように単語で付けた方がいいよ。
# アルファベット一文字の変数名はかなり読みにくいので。
0111106
2005/11/22(火) 00:42:43ご親切にありがとうございましたm(_ _)m
とっても参考になりました。
最初、手続きオブジェクトというものを知らなかったために
書いてあることが分かりませんでしたが、授業の教科書の先読んで
理解出来たように思います。
変数名を単語でというのは、
お二方のrowやcellと書いてある部分の事ですよね?
伝える時はそう書くのですね。
勉強になりました(^^;A
0112デフォルトの名無しさん
2005/11/28(月) 22:02:26自分も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
0113デフォルトの名無しさん
2005/11/28(月) 22:45:120114デフォルトの名無しさん
2005/11/28(月) 22:49:270115デフォルトの名無しさん
2005/11/28(月) 23:14:55t = 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
…としたんですがエラーが出てしまいます。。
0116113
2005/11/28(月) 23:25:24全てのアルファベットの頻度を調べなければならないのだから、結果を保持す
るのに52個の配列を用意する必要がある。ふつうは26要素の配列かハッシュを
2つ使うだろう(112の例で、文字用と単語用の2つの変数を用いたように)。
マッチするのに必要な正規表現は、112ではベタ書きしているが、これもa-zの
それぞれで書換えなければならないだろう。
当然、a-zで「カウントアップする変数」と「マッチさせるための正規表現」
をそれぞれ切り替えるように適切に繰り返しをしなければならないだろう。
このどれもやっていないようだから「何をやってるかわからん」と思ったんだが、まあいいや。
0117113
2005/11/28(月) 23:31:51115はそもそも、 for c in "a" .. "z" do に対応する end がないので実行で
きない。
115の方針を貫く場合、結果を保持する変数は2つで良いままの可能性が高い。
しかし相変わらず b の数しか数えてないのだから、このままでは結果が正し
く表示されない。正規表現をそれぞれで(cに依存するかたちで)書き換える必
要がある。
それから結果の出力では「Bまたはb」がべた書きだから printf がヘン。%表
記の箇所と引数の数が一致してないよ。
……というところかな。
0118デフォルトの名無しさん
2005/11/29(火) 09:29:360119504
2005/11/29(火) 21:37:25t = 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
でもおかしいですよね(^_^;)
0120デフォルトの名無しさん
2005/11/29(火) 22:45:43まぁしかし Ruby では埋め込み式を使う方が一般的な気はするけど
0121504
2005/11/29(火) 22:59:05しかし全部0回でした(笑)
勉強しなおしてきますm(__)m
0122デフォルトの名無しさん
2005/11/29(火) 23:11:04正規表現なわけだよな? /b/i なら「bという〜」。そこのところはいいか。
今の君のコードは26回、毎回「c」だけカウントしているわけだ。それじゃ意味がない。
1回目は「a」、2回目は「b」、3回目は「c」……26回目は「z」になるように、しないといけない。
どうやってそれを実現するかはさすがに自分で考えてくれい。やり方はいろい
ろあるけど、何が授業内容に則した方法なのかまではオレは知らん。
0123デフォルトの名無しさん
2005/11/30(水) 02:17:240124504
2005/11/30(水) 22:10:360125デフォルトの名無しさん
2005/11/30(水) 22:54:11なくて「bという文字にマッチする正規表現」じゃん。その判断をどうやって
するわけ?
たとえばだ、「bという変数が存在したらその中身、存在しなかったらbという
その文字」と動くとしようか。すると、ちょっと変更するだけでプログラムの
挙動がえらい変わって大変なことになるし、たとえばbという変数が存在する
ときに「bという文字にマッチする正規表現」をどう書いたらいいかわからな
いじゃん。
そういう不都合があるから、ただそのまま変数名を書いてもそれを変数名とは
認識しないわけ。
で、正規表現に変数の値を埋め込むにはそれなりの書き方をしないといけない。
もしくは正規表現をやめるかだな。
教科書か何かを読み直してよく考えろ。
たとえば for x in u の x はどういうデータで何を調べればいい?とかな。
0126デフォルトの名無しさん
2005/11/30(水) 22:54:21ベクトルコンピュータ使ひ給へ
0127504
2005/12/01(木) 01:28:05ホントすみませんでした(^^;)
0128デフォルトの名無しさん
2005/12/05(月) 20:21:400129デフォルトの名無しさん
2005/12/19(月) 16:44:49def 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
#続く
0130129
2005/12/19(月) 16:45:19i = 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"))
0131デフォルトの名無しさん
2005/12/20(火) 03:42:30この名前から何か連想できないならアルゴリズムの教科書でも一から読み直した方が・・・
0132デフォルトの名無しさん
2005/12/20(火) 11:37:17ttp://www2.starcat.ne.jp/~fussy/algo/algo7-4.htm
Ruby で説明しているところは自分でググって。
0133デフォルトの名無しさん
2005/12/20(火) 19:02:32RUBYで宿題?ナニソレ。
>私は、ある大学の1年生です。今、情報処理の講義でRUBYを習っています。
こんな学校ほんとに存在するのか?
いきなりRUBY教えるって、その講師は真性のアホじゃないのか?
0134デフォルトの名無しさん
2005/12/20(火) 20:11:380135デフォルトの名無しさん
2005/12/20(火) 21:21:51自分はFORTRANだったけど。
0136デフォルトの名無しさん
2005/12/22(木) 01:57:20に本当っぽいことが書いてある…と言ってみるw
0137デフォルトの名無しさん
2005/12/22(木) 20:53:070138デフォルトの名無しさん
2005/12/22(木) 21:36:030139デフォルトの名無しさん
2006/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に等しくない
0140デフォルトの名無しさん
2006/01/10(火) 21:55:550141デフォルトの名無しさん
2006/01/10(火) 23:30:13できた。結局、なにがわからんの?
楽して書きたいとかなら、地道にひとつずつ条件を書いていくしかないと思われ。
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
0142デフォルトの名無しさん
2006/01/10(火) 23:32:00a_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
0143デフォルトの名無しさん
2006/01/10(火) 23:34:47count += 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
0144デフォルトの名無しさん
2006/01/10(火) 23:36:520145デフォルトの名無しさん
2006/01/11(水) 20:33:59何がわからないというか、何もかもわからなくて
0146デフォルトの名無しさん
2006/01/12(木) 12:22:330147デフォルトの名無しさん
2006/01/12(木) 20:39:37死ねマルチ
result = 1;(1..5).each{|i| result *= i}; p result
0148デフォルトの名無しさん
2006/01/13(金) 09:01:441 から N までの数字を N 個並べる組み合わせをすべて
列挙するプログラムは Ruby で書くとどうなりますか?
例えば N = 3 のとき
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
となるようにです。
よろしくおながいします。
0149デフォルトの名無しさん
2006/01/13(金) 22:11:29何がわからないのかちゃんと説明できたら教えてやる。
一応、プログラムは出来た。
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]
0150デフォルトの名無しさん
2006/01/14(土) 00:06:551: methodA()
2: methodB()
3: methodC()
の3行からなるprogram.rbがあって、methodB()の処理が5秒たっても終わらなかったら、
methodB()の処理をタイムアウトして(飛ばして)、次行methodC()への処理へと
いくという風にするにはどうしたらよいでしょうか?
timeout()を使っても、program.rb全体が終了してしまいうまくいきません。
あくまでmethodB()だけをタイムアウトして、program.rbの処理自体は続行させたいのです。
0151デフォルトの名無しさん
2006/01/14(土) 00:21:500152デフォルトの名無しさん
2006/01/20(金) 00:44:27ruby/tkで迷路を作成して脱出するプログラムを
どなたか作ってくださいorz
0153デフォルトの名無しさん
2006/01/20(金) 01:17:490154デフォルトの名無しさん
2006/01/20(金) 02:09:17多分このスレを立てた人と同じ大学です、自分も締め切りが迫っててピンチです。
迷路を作成して、脱出するプログラムを作りたいのですが、
�@座標(1,1)(左上隅)に最初の通路空け、
�A上下左右で、2マス進んだところがまだ通路になっていない場所
(複数ある場合はランダムに選択)
�B穴掘り可能な方向がなかったら、そこまでの道を2マスだけ逆戻り。
逆戻りできない場合完成。
という感じにするのは分るのですが、ruby/tkでどうやってそれを表現したら良いのかが
わからないのですが。。
0155デフォルトの名無しさん
2006/01/20(金) 07:26:480156デフォルトの名無しさん
2006/01/20(金) 11:18:090157デフォルトの名無しさん
2006/01/20(金) 17:07:540158デフォルトの名無しさん
2006/01/20(金) 21:55:500159デフォルトの名無しさん
2006/01/20(金) 22:04:17テキストべースのままでいいじゃん。
0160デフォルトの名無しさん
2006/01/20(金) 23:23:47必須じゃないなら自分である程度の勉強をしろ。
そういうことをしてもわからなかったら、必要な事項だけ質問するべし。漠然
と知りたいと言われても誰も答えられないよ。
0161デフォルトの名無しさん
2006/01/21(土) 00:40:360162デフォルトの名無しさん
2006/01/21(土) 00:42:27連立方程式がわからないんですけどおしえてもらえませんか?
っていってるのと同じ。
0163デフォルトの名無しさん
2006/01/21(土) 00:48:450164デフォルトの名無しさん
2006/01/22(日) 00:46:34YMAX = 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しましたが…
0165デフォルトの名無しさん
2006/01/22(日) 22:58:420166デフォルトの名無しさん
2006/01/23(月) 12:14:250167デフォルトの名無しさん
2006/01/24(火) 21:27:35つかアルゴリズム?の宿題で画面表示必須って意味あるの?
0168デフォルトの名無しさん
2006/01/25(水) 00:08:12def 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")
こんな感じです(^_^;)
0169デフォルトの名無しさん
2006/01/25(水) 01:11:32で、何がわからないんだっけ?
0170デフォルトの名無しさん
2006/01/25(水) 01:48:02です、、
とゆーかもう完全に意味がわかりませんorz
0171デフォルトの名無しさん
2006/01/25(水) 11:13:100172デフォルトの名無しさん
2006/01/31(火) 00:57:400173デフォルトの名無しさん
2006/01/31(火) 19:57:14ただし、それぞれの格子で、どの辺から格子に入ったかを記録しておき、
その辺から再び出る(=戻る)なら格子の色を元にもどす。
0174デフォルトの名無しさん
2006/02/02(木) 20:25:18という課題が出ました。
互いに素というのは作れるのですが、後半部分ができません。
だれか教えてください。お願いします。
0175デフォルトの名無しさん
2006/02/02(木) 21:00:230176デフォルトの名無しさん
2006/02/02(木) 21:02:36def 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
0177デフォルトの名無しさん
2006/02/02(木) 21:15:420178174
2006/02/02(木) 21:41:41b = 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
どこが何をしているのかがちょっとよくわかりません。
ホント素人ですいません。
0179デフォルトの名無しさん
2006/02/02(木) 22:03:14算数は苦手ですか?
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が返る。
これでどう?
0180デフォルトの名無しさん
2006/02/02(木) 22:03:34until a*x%b == 1 # a*x%bが1になるまで続ける
p += 1 # p=p+1
これだけわかればトレースはできるだろうから、計算の意味は自分で考えてみよう
0181147
2006/02/02(木) 22:13:030182デフォルトの名無しさん
2006/02/02(木) 22:19:57break if a*x%b == 1
end
return x
の方が計算量少ないのでは。
0183デフォルトの名無しさん
2006/02/02(木) 22:26:520184デフォルトの名無しさん
2006/02/03(金) 16:48:130185デフォルトの名無しさん
2006/02/03(金) 22:41:09b=1の時点で互いに素の可能性が消えるので不要。
0186デフォルトの名無しさん
2006/02/04(土) 02:49:490187デフォルトの名無しさん
2006/02/06(月) 23:59:56rubyで上記のURLのいずれかの公式を用いて円周率もとめたいんですけど、、、どなたかソースコード例示してもらえないでしょうか
0188デフォルトの名無しさん
2006/02/07(火) 00:18:42俺ならこんなの書いてきたら落第させるがな
0189デフォルトの名無しさん
2006/02/07(火) 03:29:45それだとputsの戻り値*4にならないか?
0190デフォルトの名無しさん
2006/02/07(火) 08:34:490191デフォルトの名無しさん
2006/02/07(火) 09:31:26は
hoge(1+2) * 3
と同じ動作をするべき?
まあ、そうかもね。
0192デフォルトの名無しさん
2006/02/07(火) 13:37:360193デフォルトの名無しさん
2006/02/07(火) 14:00:18主張としてはある程度真理だな
引数に空白を含めたい人が自力でカッコで括ってれと
「文末が出るまで全部引数にしまっちゃうよ」というのもそれはそれで便利だが
0194デフォルトの名無しさん
2006/02/08(水) 11:40:32そろそろ気づいて自力でできた頃か?
0195デフォルトの名無しさん
2006/02/08(水) 18:40:30ニュートン法でも発明しろってことか?w
0196デフォルトの名無しさん
2006/02/23(木) 01:33:210197デフォルトの名無しさん
2006/02/23(木) 02:29:371年の情報処理ででもやってるのかな
俺のやったときはFortran77/90とCとDelphiの選択だったような気がする
0198デフォルトの名無しさん
2006/02/23(木) 04:38:200199デフォルトの名無しさん
2006/02/23(木) 14:51:52これか? いや、これはD言語みたいだな。。。(汗
0200ハーピィ
2006/02/24(金) 11:53:490201デフォルトの名無しさん
2006/03/28(火) 17:22:35HTTP/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
なのが欲しいのはどうすればいい?
0202デフォルトの名無しさん
2006/03/28(火) 17:36:430203デフォルトの名無しさん
2006/03/28(火) 18:03:52なお話?
0204デフォルトの名無しさん
2006/03/28(火) 18:10:18漏れが欲しいのはHTTPの中で鯖から送られて来る情報。
0205デフォルトの名無しさん
2006/03/28(火) 18:35:270206デフォルトの名無しさん
2006/03/28(火) 18:44:020207デフォルトの名無しさん
2006/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
0208デフォルトの名無しさん
2006/03/28(火) 21:31:340209デフォルトの名無しさん
2006/04/07(金) 10:36:490210デフォルトの名無しさん
2006/04/07(金) 20:37:40質問者はruby-man-ja-html-20051029ぐらい読んでいるんだよな?
と、てきとうなことを言ってみた。
0211デフォルトの名無しさん
2006/04/07(金) 20:52:340212デフォルトの名無しさん
2006/05/03(水) 23:44:59問題出してくれねーかなー。
面白そうなら、コード書くからさー。
0213デフォルトの名無しさん
2006/05/04(木) 22:38:170214デフォルトの名無しさん
2006/05/05(金) 14:20:150215デフォルトの名無しさん
2006/05/05(金) 19:22:45ソリティアを"作る"のか"解く"のかどっちだ?
0216214
2006/05/06(土) 04:17:59ソリティア「クロンダイク」を作る
で。俺も作ってみるかなー。
【仕様案(あくまで俺用。参考にでも】
・配置はランダム
Winのフリーセルのような問題番号はなし。
・CUIで入出力
CUIの方が環境依存少なめかなぁと。
・サブコマンド
列名をアルファベットで現し
基本は3文字で[列名][枚数][列名]。
例: A3C (A列の3枚をC列へ移す)
山札をめくる時は半角スペース1個入れてエンター。
列名はプレイ時に一目で判るようにしておく。
って言うか文字順に置くかキー配置なぞって置くか2案で悩み中。
0217デフォルトの名無しさん
2006/05/11(木) 02:05:01仕様例:
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のつもり。
ウノ自体のルールはぐぐってくれ。
0218デフォルトの名無しさん
2006/05/17(水) 19:53:34で、どうしろと?
0219デフォルトの名無しさん
2006/05/17(水) 20:12:02作りたい人は作る。基本スルー。
0220デフォルトの名無しさん
2006/05/19(金) 01:57:280221デフォルトの名無しさん
2006/05/19(金) 03:29:390222デフォルトの名無しさん
2006/05/19(金) 06:46:320223デフォルトの名無しさん
2006/05/19(金) 08:27:370224デフォルトの名無しさん
2006/05/19(金) 08:56:46まっとれ
0225デフォルトの名無しさん
2006/05/19(金) 13:21:12昔MacでUNOのゲームがあったが、かなりつまらんかったな。
0226デフォルトの名無しさん
2006/05/19(金) 13:30:04>>1
0227デフォルトの名無しさん
2006/05/21(日) 13:38:41囲碁にしようぜ、てか囲碁のプログラムってむずくね?
0228デフォルトの名無しさん
2006/05/21(日) 16:29:220229デフォルトの名無しさん
2006/05/21(日) 16:37:47ぶっちゃけどちらかが投了しない限り続行は可能だよ
つーかUNOも囲碁も相手が必須だろ
そこをどうするかがポイントになるハズ
0230デフォルトの名無しさん
2006/05/21(日) 17:15:27グー・グー・チョキの場合は決勝? あいこ?
0231デフォルトの名無しさん
2006/05/21(日) 19:21:32あいこしたら、あいこした方が負け。
つまり、チョキの勝ちというルールで。
0232デフォルトの名無しさん
2006/05/21(日) 20:04:07あいこにしたほうが簡単ぽいのでひとまずあいこでよし
0233デフォルトの名無しさん
2006/05/22(月) 02:34:21あいこのグーふたりを勝ちにして、チョキを落として再試合。
つまり、次回から勝負が決まるまでチョキの結果をムシすれ。
0234デフォルトの名無しさん
2006/05/22(月) 08:49:28CPU1だけと7並べやってもつまらんって当たり前じゃん。
CPU1, CPU2, CPU3とプレーヤの4人で7ねらべとか出来る様にすればいいじゃん。
マクのUNOって糞だっただけじゃね?
PCのUNOはそこそこおもしろかったよ。
0235デフォルトの名無しさん
2006/05/22(月) 08:51:550236デフォルトの名無しさん
2006/05/22(月) 15:44:15一人勝ちバージョンできたよー
どこまで凝っていいのかわからなかったから
判定メソッド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
0237236続き
2006/05/22(月) 15:46:02setumeibun='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
0238デフォルトの名無しさん
2006/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
言い訳:
きれいとわかりやすいって両立しないよね
----
おしまい
0239デフォルトの名無しさん
2006/05/22(月) 16:18:18初心者勉強スレみたいな雰囲気もあるから迷うが
0240デフォルトの名無しさん
2006/05/22(月) 19:43:42昔、JAVAで作ったのがあるから移植してみようかな。
0241デフォルトの名無しさん
2006/05/22(月) 21:15:31Simple Janken Transfer Protcol(SJTP)とか。
0242デフォルトの名無しさん
2006/05/22(月) 22:50:530243デフォルトの名無しさん
2006/05/22(月) 23:16:190244デフォルトの名無しさん
2006/05/22(月) 23:54:46汎用的なカードゲーム用exchangeサイトみたいなの
Rubyで作れんかね
0245デフォルトの名無しさん
2006/05/22(月) 23:58:30個々のシステムを個々に作るほうが得意だと思う
0246デフォルトの名無しさん
2006/05/23(火) 00:33:22作るだけでも非常に勉強になるぞ
というのはどうだろう
素人のプログラムなんて読みたくねえよな実際
0247デフォルトの名無しさん
2006/05/23(火) 01:20:01ここに書いとくとMinero Aokiがリファクタリングしてくれるという特典付き。
0248デフォルトの名無しさん
2006/05/23(火) 07:08:100249デフォルトの名無しさん
2006/05/23(火) 08:54:390250デフォルトの名無しさん
2006/05/23(火) 14:50:550251デフォルトの名無しさん
2006/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人になるまで前回の勝者たちを集めて同じ処理させてるだけ。
0252251
2006/05/23(火) 15:31:27GOO=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
0253251
2006/05/23(火) 15:32:31winner=@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
0254251
2006/05/23(火) 15:33:17if 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
0255251
2006/05/23(火) 15:34:01now=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 " "
0256251 しまったメソッド途中で切っちゃった
2006/05/23(火) 15:36:15msg "優勝者は#{@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
0257デフォルトの名無しさん
2006/05/23(火) 15:37:330258デフォルトの名無しさん
2006/05/23(火) 17:09:52たぶん書き間違ってる。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がそうだ
0259デフォルトの名無しさん
2006/05/30(火) 01:49:26約200行になった。ここには貼れない。
ちなみに、JAVAの時は約300行だった。
ロジックはJAVAで書いた時のをそのまま移植したので
もっとエレガントに出来そうな気はしてる。
0260デフォルトの名無しさん
2006/05/30(火) 12:43:55是非別所にうpしる
Rubyに書き換えようぜ
0261デフォルトの名無しさん
2006/05/30(火) 12:46:31どこかのあぷろだ借りるのが手っ取り早いだろうな
0262デフォルトの名無しさん
2006/05/30(火) 13:34:30ソースポスト
http://sourcepost.sytes.net/
0263デフォルトの名無しさん
2006/05/30(火) 14:32:483のときと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パターンが最適とは本見なきゃわからん人なので今ひとつ断言できない。
0264デフォルトの名無しさん
2006/05/30(火) 16:24:060265デフォルトの名無しさん
2006/05/30(火) 18:39:190266デフォルトの名無しさん
2006/05/30(火) 18:55:580267デフォルトの名無しさん
2006/05/31(水) 04:16:010268259
2006/05/31(水) 07:17:44ttp://sourcepost.sytes.net/sourcepost/sourceview.aspx?source_id=27835
Rubyに移植済みのもの。
判定部分に剰余を使っているので三人でしかじゃんけんできません。
あと、ルール
一人勝ちなら+2ポイント残り二人は-1ポイントずつ
二人勝ちなら+1ポイントずつ残り一人は-2ポイント
終了条件は特に無し
# EUC-JPなファイルをupしたら文字化けorz
0269デフォルトの名無しさん
2006/05/31(水) 14:02:51ttp://sourcepost.sytes.net/sourcepost/sourceview.aspx?source_id=27837
Rubyっぽくしてみた。
ルール(配点)の入れどころがよくわからんかったので消してしまったがJanken側にあるべきではないか。
$ ruby source.rb プレーヤ数 回数
で実行できるけど30人越えた辺りで反応がすげー鈍くなるよ。
0270268
2006/05/31(水) 19:56:37うーん、Rubyだ。
ポイントの入れ方は、3人でじゃんけんして
あいこなら変化なし
一人勝ちなら勝った人は+2point,負けた二人は-1pointずつ
二人勝ちなら勝った二人は+1pointずつ,負けた人は-1point
# ダメな変数の使い方の見本になってしまったorz
# flagに複数の意味を持たせてしまっていたようだ
# いくら一年以上前のプログラムだからって気付けよ>一昨日の自分
確かに、配点を弄るメソッドがPlayerにあるのは変ですね。
Jankenクラスにjudgeメソッドを実装するなら、ポイントを弄るメソッドも
Jankenクラスにあるべきですね。
>268の時点では、Jankenクラスは特に役目は無くて(ってまたダメな設計の見本orz)
単にゲームを開始するだけの係りでした。
0271デフォルトの名無しさん
2006/05/31(水) 20:38:13>>263の人?
初心者だけど、Rubyの勉強になった。サンクス。
2時間ぐらいマニュアルと格闘しながら解読した。
0272デフォルトの名無しさん
2006/06/01(木) 13:08:46http://sourcepost.sytes.net/sourcepost/sourceview.aspx?source_id=27841
(敗者数/勝者数).ceilのポイント(敗者数>勝者数、そうでなければポイント=1)を分ける。
敗者は常に-1にしてある。
3人でやったときは同じ結果で、それ以上でも同じルールをスケールした結果になるはず。
0273デフォルトの名無しさん
2006/06/01(木) 19:51:06本当に些細なことだが、
scissorsは単複同形だよ。
0274デフォルトの名無しさん
2006/06/02(金) 01:38:55ttp://sourcepost.sytes.net/sourcepost/sourceview.aspx?source_id=27843
使い方は>269と同じ(パクりました)
* 変数名、メソッド名を自分の好みに変更
* 判定にビット演算を使いたかったので、手の定義を変更した。
* 対話的に動かせるようにしてみた。
* 回数が多いときは誰かが101勝したら終了
* 人数を増やしすぎると延々あいこが続くので決着が着かない
例えば、
$ ruby Janken.rb 3 10
なら、3人で10回勝負が着くまでじゃんけんしつづける。
# あいこでredoさせるのに手間取った
# Fixnum#stepでredoすると最初からになってしまうorz
# 人数が多い時は別の終了条件にした方が良さそう。
# おいらが書くと長くなってしまうorz
0275デフォルトの名無しさん
2006/06/03(土) 15:28:380276デフォルトの名無しさん
2006/07/16(日) 14:47:02ある文字列があったときに、特定の範囲の文字色を変えるというプログラムをつくりたいのですが、
どなたかアドバイスお願いします。
いまはHTMLで出力しているのですが、それ以外にも、ruby/tkでつくったプログラム上に表示したいと思っています。
0277デフォルトの名無しさん
2006/07/16(日) 15:07:20rules=[
{'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
#アドバイスって何が欲しいんだろう…
0278デフォルトの名無しさん
2006/07/17(月) 04:44:43アドバイスじゃなくて正解が知りたいと思う悪寒。
こう試してみたけど出来ませんじゃないし。
0279デフォルトの名無しさん
2006/07/17(月) 10:32:520280デフォルトの名無しさん
2006/07/17(月) 11:33:00こんなとこで一言一句完全丸写ししてバレないと思ってるならそれでもいいし
ただし問題が何したいのかさっぱりわからん場合はそれこそ問題外
0281デフォルトの名無しさん
2006/07/17(月) 11:45:350282デフォルトの名無しさん
2006/07/24(月) 21:22:49http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2457.txt
0283デフォルトの名無しさん
2006/07/24(月) 21:32:580284デフォルトの名無しさん
2006/07/24(月) 21:48:13http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2458.txt
0285デフォルトの名無しさん
2006/07/24(月) 21:51:24その日の授業内容にもよるが先生が頭抱えそうな回答だな(w
0286デフォルトの名無しさん
2006/07/24(月) 21:59:40っていうか教科書読めよ。
特に 284 なんて問題文に答えが書いてあるのにこれ以上優しく説明できるか。
0287デフォルトの名無しさん
2006/07/24(月) 23:23:54if /[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
0288デフォルトの名無しさん
2006/07/25(火) 01:02:30ありがとうございました!!!!!
本当に助かりました!
0289デフォルトの名無しさん
2006/07/25(火) 14:27:150290デフォルトの名無しさん
2006/07/25(火) 20:27:320291デフォルトの名無しさん
2006/07/25(火) 20:32:000292デフォルトの名無しさん
2006/07/25(火) 21:19:063で割り切れないじゃダメなの?
0293デフォルトの名無しさん
2006/07/25(火) 21:23:400294デフォルトの名無しさん
2006/07/26(水) 02:42:09def 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])]
0295デフォルトの名無しさん
2006/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])]
0296デフォルトの名無しさん
2006/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]
)]
0297デフォルトの名無しさん
2006/07/26(水) 18:19:26if ("x" * x).gsub(/xxx/,'') !~ /x/
print "#{x}は3の倍数ではありません。\n"
end
0298デフォルトの名無しさん
2006/07/28(金) 00:58:09http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2473.txt
0299デフォルトの名無しさん
2006/07/28(金) 01:13:51どうでもいいがこれまで言われたアドバイス全然生かしてねえな
0300デフォルトの名無しさん
2006/07/28(金) 01:17:030301デフォルトの名無しさん
2006/07/28(金) 01:39:330302デフォルトの名無しさん
2006/07/28(金) 01:43:07すまん、こういうパズル未満の難易度の言葉合わせな宿題は出る。
授業聞いてればそれなりに何使うかは思いつくだろ、みたいな。
情報でのプログラムの演習なんてその程度でいいんだよ。
0303デフォルトの名無しさん
2006/07/28(金) 01:47:16てゆーかさ、これだとpflagはずっとtrueのままじゃね?
0304デフォルトの名無しさん
2006/07/28(金) 01:53:24include 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 は素数です'
俺にはこれが限界
後は誰か頼む
0305デフォルトの名無しさん
2006/07/28(金) 01:57:00アルゴリズムがひらめけばあとは言語仕様に従って記述すればプログラムに成るし。
0306ど素人
2006/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);
0307デフォルトの名無しさん
2006/07/28(金) 02:06:14Rubyじゃないじゃん。
0308デフォルトの名無しさん
2006/07/28(金) 02:15:10言語ですらないな
板違いだ
0309デフォルトの名無しさん
2006/07/28(金) 02:20:290310デフォルトの名無しさん
2006/07/28(金) 02:32:19馬鹿にされたと思ったあなたは >>306 ですか?
0311デフォルトの名無しさん
2006/07/28(金) 09:16:500312デフォルトの名無しさん
2006/07/28(金) 09:26:320313デフォルトの名無しさん
2006/07/28(金) 10:32:030314デフォルトの名無しさん
2006/07/28(金) 13:19:120315デフォルトの名無しさん
2006/07/28(金) 16:16:360316デフォルトの名無しさん
2006/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
としています。
でももう少し短くなる気がするのですが、良いワンライナー無いでしょうか?
0317デフォルトの名無しさん
2006/08/26(土) 14:03:400318デフォルトの名無しさん
2006/08/26(土) 14:07:400319デフォルトの名無しさん
2006/08/26(土) 14:16:060320316
2006/08/26(土) 17:00:01短ッ!rubyのオプションと特殊変数の事
すっかり忘れてました、感謝です
>>318
環境書き忘れてた…今度リナやユニ触る機会があったら
catのオプションの事思い出します
>>319
ARGF.eachはさっき気付いて
i=0;ARGF.each{|s|printf "%6d: %s",i+=1,s}
って書いたところでした
そういやARGFは独自のメソッド持ってるんでしたね…
0321デフォルトの名無しさん
2006/08/30(水) 11:56:52> i=0;ARGF.each{|s|printf "%6d: %s",i+=1,s}
そういうときはwith_index使えって教わんなかったか?
ARGF.each_with_index{|s, i|printf "%6d: %s", i, s}
0322デフォルトの名無しさん
2006/08/31(木) 22:22:15その二進表示を出力するプログラムを作成しよ。
ただし整数から二進表示文字列を作るメソッドi2bを
作成してそれを呼び出すように書くこと。
できるだけ簡単なプログラムでお願いします。
Ruby初心者なのでわからなくて困ってます。
0323デフォルトの名無しさん
2006/08/31(木) 22:35:13alias myprintf printf
myprintf("%b\n", 10) #=> 1010
0324デフォルトの名無しさん
2006/08/31(木) 22:38:35ありがとうございます。
でも、せっかく作成していただいたのに申し訳ないのですが
printfは使って作成してはいけないんです。
0325デフォルトの名無しさん
2006/08/31(木) 23:05:240326デフォルトの名無しさん
2006/08/31(木) 23:05:42こんなんじゃダメ?
def i2b i
return i.to_s(2)
end
0327デフォルトの名無しさん
2006/08/31(木) 23:16:24--- 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
0328デフォルトの名無しさん
2006/08/31(木) 23:28:58ありがとうございます。
家のパソコンだとプログラムが実行できないので
明日実行できるパソコンで試してみます。
0329デフォルトの名無しさん
2006/08/31(木) 23:29:00def to_bin(i); q, m = i.divmod(2); q == 0 ? m : to_bin(q).to_s + m.to_s;end
0330デフォルトの名無しさん
2006/08/31(木) 23:34:27家のパソコンにもRubyインストールすればいいだろ?
よっぽど特殊なOSで無い限り入れられる。
0331デフォルトの名無しさん
2006/08/31(木) 23:42:20何回もインストールしてみたのですが
何回挑戦しても失敗してしまいます。
0332デフォルトの名無しさん
2006/08/31(木) 23:55:11ttp://rubyforge.org/frs/?group_id=167
ttp://instantrails.rubyforge.org/wiki/wiki.pl
どっちでも好きな方を試せ。
使い方は聞くな。
0333デフォルトの名無しさん
2006/09/01(金) 00:00:08def i2b(i)
require "open-uri"
open('http://google.co.jp/search?q='+i+'+in+binary').read.scan(/0b([01]+?)</)
end
puts "正の整数を入れてください"
i=STDIN.gets.chomp
puts i2b(i)
0334デフォルトの名無しさん
2006/09/01(金) 00:03:39ありがとうございます。
助かりました。
0335デフォルトの名無しさん
2006/09/01(金) 00:13:12phpとの戦いで死にかけてるから生き残りに必死な様にしか見えない。
0336デフォルトの名無しさん
2006/09/01(金) 00:17:55そうか?PHPってgoto導入して死ぬんだろ?
0337デフォルトの名無しさん
2006/09/01(金) 00:20:51「なんかWeb通して新感覚にみんなで超便利」というサービスを提供する限り、
サーバー上の言語は本当に何でもよい
0338デフォルトの名無しさん
2006/09/01(金) 00:43:49def 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
0339デフォルトの名無しさん
2006/09/01(金) 01:06:58cc = nil
b = ""
if i = callcc {|cc| i}
b = "01"[i % 2] + b
cc.call((i / 2).nonzero?)
end
b
end
0341デフォルトの名無しさん
2006/09/01(金) 11:03:29参考にはなるかもしれんが、ためにはならんぞ。
0342デフォルトの名無しさん
2006/09/09(土) 05:00:570343デフォルトの名無しさん
2006/09/09(土) 11:31:050344デフォルトの名無しさん
2006/09/09(土) 19:34:15cgi限定?
http以外のプロトコル使ってもいいのかな?
0345デフォルトの名無しさん
2006/09/09(土) 21:53:010346デフォルトの名無しさん
2006/09/10(日) 18:06:15ここにあるよ
ttp://wirepuller.org/text/ruby/
0347デフォルトの名無しさん
2006/09/11(月) 16:25:43ありがとうございます。
CGI.rbの仕様で10kB以下だとStringIOで処理されて
それ以上のサイズだとTempfileオブジェクトになるようだと
書いてあるのですが
「Tempfileの場合、数MBのファイルをread,writeするのはあれなので」
という部分の意味が良く分かりません
何があれなんでしょうか
0348デフォルトの名無しさん
2006/09/11(月) 16:43:400349デフォルトの名無しさん
2006/09/11(月) 16:47:04のディレクトリの特定のファイルにコピーするのは処理にオーバヘッドがかか
るので」
てとこじゃね。
0350デフォルトの名無しさん
2006/09/11(月) 16:51:16を繰り返しているわけだよな。まあ、当り前だが。
それに、ソースを見てみると file.size の大小で TempFile かどうか判定し
てるね。 is_a? とかを使った方がいいんじゃないかなあ。
0351デフォルトの名無しさん
2006/09/11(月) 22:39:34だから便利性を求めたライブラリは、テンポラリファイル作るとか回りくどい仕様になってるんだよね。
こういうインターフェイスにすれば、少し面倒になるけど
テンポラリも要らないし融通が利くのに。
cgi = CGI.new
cgi.find_file {|info, fp|
# フォームから送られた名前で振り分け
if info.name == "upload_file"
# fpを使ってファイルに保存する処理
else
# 普通のクエリとして扱う
cgi[info.name] = fp.read
end
}
0352デフォルトの名無しさん
2006/09/15(金) 02:07:28↑
dir(ディレクトリ), key(検索キーワード)
で指定したディレクトリ下にある合致するファイルを検索して
合致するファイル名の配列を返す関数のコードお願いします。
0353デフォルトの名無しさん
2006/09/15(金) 02:52:35def 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"
}
0354デフォルトの名無しさん
2006/09/15(金) 04:44:56じゃ駄目?
0355デフォルトの名無しさん
2006/09/15(金) 09:46:530356デフォルトの名無しさん
2006/09/15(金) 12:35:150357デフォルトの名無しさん
2006/09/15(金) 12:36:530358デフォルトの名無しさん
2006/09/15(金) 13:35:36(^ω^ )
0359デフォルトの名無しさん
2006/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
0360デフォルトの名無しさん
2006/09/19(火) 05:03:41num = 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)
}
0361デフォルトの名無しさん
2006/09/19(火) 13:54:300362デフォルトの名無しさん
2006/09/20(水) 00:09:54Integer(str)
true
rescue ArgumentError
false
end
0363359
2006/09/20(水) 01:36:19str.to_i()が例外を投げない仕様になっていたので困っていた所です。
あとリファレンスを読むのが不十分でした。すいません、今後は気を付けます。
0364359
2006/09/20(水) 01:37:01str.to_i()が例外を投げない仕様になっていたので困っていた所です。
あとリファレンスを読むのが不十分でした。すいません、今後は気を付けます。
0365デフォルトの名無しさん
2006/09/25(月) 00:44:030366デフォルトの名無しさん
2006/09/25(月) 05:45:120367デフォルトの名無しさん
2006/10/04(水) 13:58:21また作って欲しいのですが。
0368デフォルトの名無しさん
2006/10/04(水) 16:22:360369デフォルトの名無しさん
2006/10/04(水) 19:45:42ネタ寄越せ。
0370デフォルトの名無しさん
2006/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
0371デフォルトの名無しさん
2006/10/04(水) 23:45:38引かれた奴が次に他の奴から引くんだっけ?
引いた奴が次に他の奴から引かれるんだっけ?
0372デフォルトの名無しさん
2006/10/04(水) 23:52:43そうじゃないと、「おい、お前今混ぜてるのはババ引いたからだろ!」ということが起こらず面白くない。
0373デフォルトの名無しさん
2006/10/05(木) 23:53:37↓
print "ジャンケンしーましょ、最初はグー!"
print "ジャンケン・・・[g=グー/c=チョキ/p=パー]:"
puts "AIの手:"+ ({?g => "パー", ?c => "グー", ?p => "チョキ"}[gets[0]] or raise "死ね。")
puts "お前の負けだ。"
0374デフォルトの名無しさん
2006/10/06(金) 00:18:51それは後出しと言って反則なんだよ。
0375デフォルトの名無しさん
2006/10/06(金) 03:40:29ハンターハンターでやってた
0376デフォルトの名無しさん
2006/10/06(金) 07:35:01ハンターハンターのは「出す直前」だが、>373のは完全に後出し。
0377デフォルトの名無しさん
2006/10/06(金) 13:48:43そういう戦略を実装できるようにすべき?
0378デフォルトの名無しさん
2006/10/06(金) 14:12:53スレ違いだし。
0379デフォルトの名無しさん
2006/10/06(金) 15:33:390380デフォルトの名無しさん
2006/10/06(金) 16:11:05した方が面白いと思う。
0381デフォルトの名無しさん
2006/10/06(金) 21:14:51戦略とかあるの?
ランダムに引く人と戦略を持っている人とで、勝利確率どのぐらい違うが見てみたいね。
0382デフォルトの名無しさん
2006/10/06(金) 21:31:050383デフォルトの名無しさん
2006/10/07(土) 23:40:54次のようなテキストファイルがあったとします。
"ほげほげ","なんとか","むだむだ"
"ほげほ","なんとかか","むだむだだ"
(以下、何十行か続く)
それを
ほげほげ なんとか むだむだ
ほげほ なんとかか むだむだだ
(以下続く)
という感じの書式(空白はタブです)に変えてテキストファイルとして書き出すスクリプトを書きたいのですが、
正規表現とか難しいことを使わないと行けないのでしょうか。
どなたかやり方ご存じありませんでしょうか。
0384デフォルトの名無しさん
2006/10/07(土) 23:49:02while s = gets
puts s.gsub(/"/, "").gsub(/,/, "\t")
end
ちゃんとCSVを処理したいなら、RAAでcsv関連のライブラリを探すとか。
0385デフォルトの名無しさん
2006/10/07(土) 23:58:28puts eval("[#$_]").join("\t") while gets
0386デフォルトの名無しさん
2006/10/08(日) 00:02:310387デフォルトの名無しさん
2006/10/08(日) 00:21:37おおー、こんなに簡単にできてしまうんですね。
Rubyって凄い! ありがとうございました!
0388デフォルトの名無しさん
2006/10/08(日) 13:58:070389デフォルトの名無しさん
2006/10/08(日) 17:39:10ワロタ。
$KCODE忘れんなよー。
0390デフォルトの名無しさん
2006/10/17(火) 01:01:11http://d.hatena.ne.jp/sumii/20060928/1159394568
http://b.hatena.ne.jp/entry/http://d.hatena.ne.jp/sumii/20060928/1159394568
0391デフォルトの名無しさん
2006/10/19(木) 06:27:310392デフォルトの名無しさん
2006/10/19(木) 18:29:19東大の講師ごくろうさまです。軽くRubyのコンパイラでも作らせてあげてください。
0393デフォルトの名無しさん
2006/10/19(木) 20:46:33# と思いたいなあ
0394デフォルトの名無しさん
2006/10/19(木) 20:58:360395デフォルトの名無しさん
2006/10/19(木) 21:13:49ここに投げてほしいと思う俺がいる。
0396デフォルトの名無しさん
2006/10/19(木) 21:40:500397デフォルトの名無しさん
2006/10/20(金) 15:12:500398デフォルトの名無しさん
2006/10/20(金) 16:13:561 2 3 4 5 6 7 8 9
-----------------------------
1| 1 2 3 4 5 6 7 8 9
2| 2 4 6 8 10 12 14 16 18
3| 3 6 9 12 15 18 21 24 27
4| 4 8 12 16 20 24 28 32 36
5| 5 10 15 20 25 30 35 40 45
6| 6 12 18 24 30 36 42 48 54
7| 7 14 21 28 35 42 49 56 63
8| 8 16 24 32 40 48 56 64 72
9| 9 18 27 36 45 54 63 72 81
0399デフォルトの名無しさん
2006/10/20(金) 16:27:23ずれててよくわかんない。><
0400デフォルトの名無しさん
2006/10/20(金) 19:06:040401デフォルトの名無しさん
2006/10/22(日) 04:13:34問、重複行を削除せよ
0402デフォルトの名無しさん
2006/10/22(日) 04:27:370403デフォルトの名無しさん
2006/10/22(日) 06:46:39ソートしないでという条件をつけさしてください。
0404デフォルトの名無しさん
2006/10/22(日) 07:06:05ARGF.each_line do |line|
puts line if not line == temp
temp = line
end
0405デフォルトの名無しさん
2006/10/22(日) 10:51:00print readlines.uniq!
0406デフォルトの名無しさん
2006/10/22(日) 11:37:440407デフォルトの名無しさん
2006/10/22(日) 11:40:35で、いけますね。
0408デフォルトの名無しさん
2006/10/22(日) 12:12:44意味もなく最短を狙ってみる。
0409デフォルトの名無しさん
2006/10/22(日) 12:40:150410デフォルトの名無しさん
2006/10/22(日) 16:53:55ARGFは$<で代用可能。ついでにそのおかげで空白も除去できる。
puts$<.map.uniq
0411デフォルトの名無しさん
2006/10/22(日) 22:46:08> ついでにそのおかげで空白も除去できる。
将来もずっとそうかわからんぞ。
namespaceの話もあるからな。
0412デフォルトの名無しさん
2006/10/23(月) 20:20:24それを言ったら Ruby なんて教祖の暴走がある限り
ほぼ全ての仕様が将来もずっとそうか分からんぞ。
0413デフォルトの名無しさん
2006/10/24(火) 14:38:13h = []
ARGF.each_line do |line|
puts line if h[$_.sum] =|| 0
end
0414デフォルトの名無しさん
2006/10/25(水) 02:02:20if h[line.sum] ||= 0
だとしても常に真だし。
0415デフォルトの名無しさん
2006/10/25(水) 14:52:15行列A Matrix[[1, 1, 0, 0], [0, 1, 0, 0], [0, 1, 0, 1], [0, 0, 0, 1], [0, 0, 1, 0], [1, 0, 0, 0]]と
行列B Matrix[[0, 0, 0, 1], [0, 1, 0, 0], [0, 1, 0, 0], [0, 0, 0, 1], [0, 0, 1, 0], [1, 0, 0, 0]]
について、同一座標の数値ごとに論理和をとって行列Cを返すプログラムを教えてください。
この場合行列Cは、Matrix[[0, 0, 0, 0], [0, 1, 0, 0], [0, 1, 0, 0], [0, 0, 0, 1], [0, 0, 1, 0], [1, 0, 0, 0]]
になります。
よろしくお願いします。
0416デフォルトの名無しさん
2006/10/25(水) 15:53:48[[1, 1, 0, 1], [0, 1, 0, 0], [0, 1, 0, 1], [0, 0, 0, 1], [0, 0, 1, 0], [1, 0, 0, 0]]
にならないか?
a = [[1, 1, 0, 0], [0, 1, 0, 0], [0, 1, 0, 1], [0, 0, 0, 1], [0, 0, 1, 0], [1, 0, 0, 0]]
b = [[0, 0, 0, 1], [0, 1, 0, 0], [0, 1, 0, 0], [0, 0, 0, 1], [0, 0, 1, 0], [1, 0, 0, 0]]
i = -1
puts a.map{|x| x.map{|y| i+=1; y | b.flatten[i]; }}.inspect
0417デフォルトの名無しさん
2006/10/25(水) 16:03:33ありがとうございます。
論理和というか、両方1のときは1、それ以外は0になる形です。
0418デフォルトの名無しさん
2006/10/25(水) 16:25:420419デフォルトの名無しさん
2006/10/25(水) 16:37:230420デフォルトの名無しさん
2006/10/25(水) 18:22:22論理積でお願いします。
0421416
2006/10/25(水) 18:54:170422デフォルトの名無しさん
2006/10/25(水) 19:59:410423デフォルトの名無しさん
2006/10/25(水) 20:14:23こうですか? わかりません!
0425デフォルトの名無しさん
2006/12/16(土) 19:10:09数字を与えられて、それを1から配列数までを網羅した配列を短く書く方法はないですか?
例: 9 -> [1, 2, 3, 4, 5, 6, 7, 8, 9]
a = []; 9.times{|i| a += [(i + 1)]}; p a
かな?
0426デフォルトの名無しさん
2006/12/16(土) 19:10:590427デフォルトの名無しさん
2006/12/16(土) 19:12:56p Array.new(9){|i| i + 1}
0428デフォルトの名無しさん
2006/12/16(土) 20:08:270429デフォルトの名無しさん
2006/12/16(土) 20:10:02このほうが短いな
0430デフォルトの名無しさん
2006/12/17(日) 00:55:110431デフォルトの名無しさん
2006/12/17(日) 01:19:250433デフォルトの名無しさん
2006/12/17(日) 10:04:55「2.8 *がついた引数は何ですか」
0434デフォルトの名無しさん
2006/12/17(日) 11:43:34http://www.ruby-lang.org/ja/man/index.cgi?cmd=view;name=FAQ::%CA%D1%BF%F4%A1%A2%C4%EA%BF%F4%A1%A2%B0%FA%BF%F4#a2.2e8.20.2a.a4.ac.a4.c4.a4.a4.a4.bf.b0.fa.bf.f4.a4.cf.b2.bf.a4.c7.a4.b9.a4.ab
これか・・・。
引数以外にもつけられるんだ
0435デフォルトの名無しさん
2006/12/19(火) 23:18:171.9ではEnumerable::Enumeratorが返る。
0436デフォルトの名無しさん
2006/12/20(水) 18:32:40将来もずっとそうかわからんぞ。
0437デフォルトの名無しさん
2006/12/20(水) 22:37:07いままでで切り捨てられたものの例を挙げてみてくれないか?
0438デフォルトの名無しさん
2006/12/20(水) 22:51:180439デフォルトの名無しさん
2006/12/21(木) 09:51:300440デフォルトの名無しさん
2006/12/25(月) 18:15:30gsub('a','<a>')とすると当然ながら<p<a>nd<a>>kum<a></p<a>nd<a>>となってしまいます。
<>の中のaを回避して置換するよい方法ありませんか?
0441デフォルトの名無しさん
2006/12/25(月) 19:59:15↓
<kuma>p<a>nd<a></kuma>
こう?
0442デフォルトの名無しさん
2006/12/25(月) 21:23:23=> "<panda>kum<a></panda>"
"<kuma>panda</kuma>".scan(/(<.*?>|[^<]+)/).map{|s,*| if /^</ !~ s then s.gsub(/a/, "<a>") else s end }.join
=> "<kuma>p<a>nd<a></kuma>"
0443デフォルトの名無しさん
2006/12/26(火) 08:38:57これ↑をすると、配列がはずれて文字列だけになるんだ。
何故?
0444デフォルトの名無しさん
2006/12/26(火) 09:50:48|s, a| と書くのは、 |s, a| = each_elementのように値が入るのと等価になっている。
また、
a, *b = [1, 2, 3]
とすればaに1、bに[2,3]が入るという規則を思い出すと、今回のケースでは、
「多重代入で最初のものだけを得たい」というケースであるから、
|s, *dummy| と書けば s に最初の要素が、 dummy に残りの配列が手に入る
ことになる。
でも今回は dummy は使わないから省きたい。で、こういう要求にこたえて最
近のRubyでは*パートの変数名を省略できるようになっている。つまり、
a, * = [1, 2, 3]
と書くと a に1が入るという操作になる。
というわけで、ブロック引数に |s, *| と書くと、 s に最初の要素が入ることになる。
ちなみに ,* が省かれるとふつうの代入と区別できないため、sには配列が入る。
……なんだけど実際には * はなくても良いのを思い出した。
カンマがあれば良いので |s,| で良かったです。すまん。
0445デフォルトの名無しさん
2006/12/26(火) 12:27:10丁寧な説明、サンクス。
なるほど、配列の第1要素のみ利用するってこってですね。
0446デフォルトの名無しさん
2006/12/26(火) 21:05:250447デフォルトの名無しさん
2007/01/05(金) 13:35:21lispのcar関数とはまた別モノだろ
0448デフォルトの名無しさん
2007/01/11(木) 20:52:38rubyでもっと短くかけないですか?
a=(a^=b,b^=a,a^b);
0449デフォルトの名無しさん
2007/01/11(木) 20:59:26a, b = b, a
Cでもいまどきそんなの使うやついねーよ
0450デフォルトの名無しさん
2007/01/11(木) 22:47:27多値使うのかー。
> Cでもいまどきそんなの使うやついねーよ
そうなのかw
0451デフォルトの名無しさん
2007/01/12(金) 14:47:00りんご本からいくつか課題出されて、その中の
テキスト65ページ 「耳の遠いおばあちゃん」に取り組みなさい。
耳の遠いおばあちゃんのプログラムを書いてみましょう。
おばあちゃんに何を言っても(何をタイプしても)、叫ばない限り(つまり、すべて大文字でタイプしない限り)、
は?! もっと大きな声で話しておくれ、坊や!
と返事をします。もし叫んだときは、彼女はあなたの言葉を聞いて(少なくとも聞いた気がして)、
いやー、1938年以来ないねー!
と大声で返事します。
プログラムに真実味を持たせるため、1930から1950のランダムな数字で毎回違う年を叫ぶようにしましょう。
あなたは、BYEと叫ぶまでおばあちゃんとの会話から逃れられません。
う年を叫ぶようにしましょう。
あなたは、BYEと叫ぶまでおばあちゃんとの会話から逃れられません。
とかいうの。
0452デフォルトの名無しさん
2007/01/12(金) 20:30:26ぐぐれば解答例あるよ。
0453デフォルトの名無しさん
2007/01/12(金) 22:54:56どこをググれば??
0454デフォルトの名無しさん
2007/01/13(土) 11:11:22loop do
str = STDIN.gets
if str.upcase == str
if 'BYE' == str
break
else
# そうかい。1953年以来ないね〜。
end
else
# はぁあああああ!!!?なんだってぇえぇぇぇぇぇぇーーーーー!!!!
end
end
動かしてないけど大体こんな感じでしょう。
ちゃんと手を動かしながら本読んでれば出来るハズなんだけどなぁ
0455デフォルトの名無しさん
2007/01/14(日) 00:45:45そのプログラムも動いてくれなかったです。
乱数のとこで引っかかったりwhileで引っかかったりで前に進みません。
0456デフォルトの名無しさん
2007/01/14(日) 01:35:46それすら見てもわからんのか……。
ところでmixiで質問してるのと同じ人?
0457デフォルトの名無しさん
2007/01/14(日) 02:23:57何がどうダメなのか説明しないと誰もアドバイスできませんよ。
プログラムを動かそうとしたらエラーが出るなら、
そのエラーメッセージとソースコードをコピペする。
「エスパー募集中ですか?」って言われちゃいますよ?
0458デフォルトの名無しさん
2007/01/14(日) 03:11:56どうせ他人の見ても何がどうなってるのかわからんのだろ
確かにこのスレは宿題丸投げも可だが、あまり身勝手におイタしてると
「完全に動作するがコードが面妖で提出不可」なプログラムだけ回答に出されて放置されたりするぞ
0459デフォルトの名無しさん
2007/01/14(日) 03:27:050460デフォルトの名無しさん
2007/01/14(日) 09:55:570461デフォルトの名無しさん
2007/01/14(日) 11:25:500462デフォルトの名無しさん
2007/01/14(日) 22:24:500463デフォルトの名無しさん
2007/01/15(月) 14:23:440464デフォルトの名無しさん
2007/01/15(月) 22:27:130465939
2007/01/19(金) 23:12:140466デフォルトの名無しさん
2007/01/20(土) 04:09:570467デフォルトの名無しさん
2007/01/24(水) 16:36:01この箱から1枚引いて箱に戻すのを6回繰り返したとき、合計点数のとりうる値を求めるプログラムを書け。
この問題の解法を教えてください。よろしくお願いします。
0468デフォルトの名無しさん
2007/01/24(水) 19:05:18算数の問題が解けないのか、解けるけどRubyに書き直せないのかどっちだ?
# 前者のような気はするけど。
0469デフォルトの名無しさん
2007/01/24(水) 20:53:01後者です。
場合わけなどを効率よくプログラミングにおとすにはどうしたよいかわかりません。
0470デフォルトの名無しさん
2007/01/24(水) 21:42:44じゃ、日本語で良いのでそのアルゴリズムを書いてみて。
それをコード化してあげる。
0471デフォルトの名無しさん
2007/01/24(水) 22:00:26少年よ、再帰を抱け!
def sum(n,s,k)
ls = [0,1,4]
if n == 0 then
print k,"\t","sum=",s,"\n"
else
for i in 0..2
sum(n-1,s+ls[i],k+[i])
end
end
end
sum(6,0,[])
0472デフォルトの名無しさん
2007/01/24(水) 22:00:33計算問題として解くなら手計算でゴリ押しできるのですがうまいアルゴリズムが思いつかなくて。
とりあえず0,1,4からなる6個の数字をすべての場合を網羅するように作成して現れる合計値をすべて記録すれば答えはでるんですが、それだと面倒なので質問しました。
0473デフォルトの名無しさん
2007/01/24(水) 22:07:57↓
0474デフォルトの名無しさん
2007/01/24(水) 22:12:02ありがとうございます。
こんなに短くできるんですね。
0475デフォルトの名無しさん
2007/01/24(水) 22:19:38動的計画法を使う典型問題だね。
b = [0]
6.times{b=[0,1,4].inject(b){|c,y|c + b.map{|x|x+y}}.sort.uniq}
puts b
0476デフォルトの名無しさん
2007/01/24(水) 22:24:060477デフォルトの名無しさん
2007/01/24(水) 22:33:39puts (0...6).inject([0]){|b,_|[0,1,4].map{|y|b.map{|x|x+y}}.flatten.sort.uniq}
0478デフォルトの名無しさん
2007/01/24(水) 23:08:300479デフォルトの名無しさん
2007/01/28(日) 11:47:43a = [123, 567, 23, 456, 34, 12]
を
文字列か何かであらわせないかと。
base64でも使うのかな?
0480デフォルトの名無しさん
2007/01/28(日) 12:16:22require 'base64'
require 'zlib'
p d
p pk = d.pack("S*")
p z = Zlib::Deflate.deflate(pk)
p b64 = Base64.encode64(z)
p unb64 = Base64.decode64(b64)
p Zlib::Inflate.inflate(unb64)
p ud = unb64.unpack("S*")
puts "d==ud = "+ (d==ud).to_s
puts "b64.length=" + b64.length.to_s
やってみたのですが、
元に戻らない・・・
0481デフォルトの名無しさん
2007/01/28(日) 12:29:24d=[777,666,555,444,333,222,111,0,123,456,789,12,45,67,89,10]
require 'base64'
require 'zlib'
p d
p pk = d.pack("S*")
p z = Zlib::Deflate.deflate(pk)
p b64 = Base64.encode64(z)
p unb64 = Base64.decode64(b64)
p unz = Zlib::Inflate.inflate(unb64)
p ud = unz.unpack("S*")
puts "d==ud = "+ (d==ud).to_s
puts b64.length.to_s + " -> " + ud.length.to_s
0482デフォルトの名無しさん
2007/01/28(日) 12:30:00でいけますね。解決です。
0483デフォルトの名無しさん
2007/01/28(日) 21:35:53http://pc10.2ch.net/test/read.cgi/tech/1164885714/548-557
(したいこと)
Arrayの要素の組合せを全て作った Arrayを返す。
(サンプル)
仮に combinations というメソッド名として
[].combinations => []
[1].combinations => [[[1]]]
[1,2].combinations => [
[[1],[2]], # 1個ずつの組み合わせ
[[1,2]], # 2個ずつの組み合わせ
]
[1,2,3].combinations => [
[[1],[2],[3]], # 1個ずつの組み合わせ
[[1,2],[3]], # 2個ずつの組み合わせ
[[1],[2,3]], # 2個ずつの組み合わせ
[[1,2,3]], # 3個ずつの組み合わせ
]
[1,2,3,4].combinations => [
[[1],[2],[3],[4]], # 1個ずつの組み合わせ
[[1,2],[3],[4]], # 2個ずつの組み合わせ
[[1],[2,3],[4]], # 2個ずつの組み合わせ
[[1],[2],[3,4]], # 2個ずつの組み合わせ
[[1,2],[3,4]], # 2個ずつの組み合わせ
[[1,2,3],[4]], # 3個ずつの組み合わせ
[[1],[2,3,4]], # 3個ずつの組み合わせ
[[1,2,3,4]], # 4個ずつの組み合わせ
]
実装は、メソッドの再帰を行うんだろうとはなんとなく分かるんですが、それ以上は進まず。
0484デフォルトの名無しさん
2007/01/28(日) 22:31:590485デフォルトの名無しさん
2007/02/04(日) 22:30:44class Array
def srt
case size
when 0,1
self
else
f,*t = self
t.select{|v| v <= f}.srt + [f] + t.select{|v| v > f}.srt
end
end
end
nums = (0..9).map{rand(100)}
p nums
p nums.srt
0486デフォルトの名無しさん
2007/02/04(日) 22:30:46注意事項及びヒント:
sortメソッドは使用しないこと
配列を使用した方が並び替え易いと思います
0487デフォルトの名無しさん
2007/02/04(日) 22:38:08OK、sortメソッドは使わないぜ。
a=[1,4,3,5,3,10,3,5,3,5]
$><<a.sort_by{|x|x}.join(" ")
0488デフォルトの名無しさん
2007/02/05(月) 21:21:52>>486が初心者スレで返された答えとかぶってるw
0489デフォルトの名無しさん
2007/02/05(月) 21:52:49適当にクイックソートを書いてみた
def qsort(array)
return array unless array.size > 1
left = []
right = []
mid_idx = array.size / 2
mid = array[mid_idx]
array.delete_at(mid_idx)
until array.empty?
n = array.shift
if n < mid
left.push(n)
else
right.push(n)
end
end
qsort(left).push(mid).concat(qsort(right))
end
で、書いておいてなんだが
いくら初心者だろーが力任せ、単純なソート法なら自力で思いつくだろ
0490デフォルトの名無しさん
2007/02/05(月) 22:15:48def qsort(array)
return array unless array.size > 1
mid = array.delete_at array.size/2
array = array.partition{|x|x<mid}
qsort(array[0]).push(mid).concat(qsort(array[1]))
end
飽きたから超適当。もういいや、こんなんで
0491デフォルトの名無しさん
2007/02/05(月) 23:36:50おまえらさあ、こういうのをそのままコピペして提出するアホがいたらどうすんだよ。
これを受け取ってどう評価するか悩む教師の身にもなってみてくれ、まじで。
0492デフォルトの名無しさん
2007/02/06(火) 00:03:320493486
2007/02/06(火) 01:32:00全く違うソートになりましたが。
0494デフォルトの名無しさん
2007/02/14(水) 16:21:00実行中にキーボードの 1 が押されるとそれ以降は文字色を赤で,
また,2 が押されるとそれ以降は文字色を青で表示する.
0 が押されると数字を入力するようプロンプトを表示し,
時刻の表示間隔を入力された数字の秒数に変更する.
Ctrl+C で終了する.
お願いします.
0495デフォルトの名無しさん
2007/02/14(水) 19:12:53loop do
puts Time.now
sleep 1
end
0496デフォルトの名無しさん
2007/02/15(木) 01:28:320497デフォルトの名無しさん
2007/02/15(木) 03:17:40お前本当に、答えてほしのかとww
もっとこう、答えたくて答えたくてたまらないように、仕向けないといけないと思うんだけど。
・・・まあ、だから、2ch聞いてるんだろうけど。
ちなみん、おれが、2ch聞いたのはほとんど答えてもらってる。
0498デフォルトの名無しさん
2007/02/15(木) 04:41:13とりあえずフォーマットくらいは用意すべきだろうね
0499デフォルトの名無しさん
2007/02/15(木) 10:09:25ありがとうございます.
核の部分はそうなると思いますが,
そこは問題を説明するために設定した部分で,
本当に聞きたいのはユーザとの対話部分なんです.
引き続きお願いします.
自分なりには curses を使って書いてみたんですが,
getstr がどうもうまく動かないので,
こちらで質問してみました.
0500デフォルトの名無しさん
2007/02/15(木) 16:39:31試行中なんだが、getstrだとエンターまでを入力として期待するのでよくないはず。
getchを使おう。
今のリファレンスには書いてないがncursesの現行のAPIはほとんどwrapされてるようす。
あとは拡張ライブラリのソース見れって感じだ。
正直言って宿題としてはあんまりよくないな。
ncursesそのまま使うのはめんどう。
まあ、むしろCursesに皮を被せる設計の勉強なのかもしれんが。
0501デフォルトの名無しさん
2007/02/20(火) 17:54:13とのことなので,getstr 相当のものを getch で書いてみたのですが,
どっちにしても getch で入力待ち状態のときに Ctrl-C が効きませんでした.
ruby のソースを開いてみると ext/curses にサンプルがあったので,
ruby mouse.rb をしてみたのですが,
これでもクリック待ちのときに Ctrl-C で終了できませんでした.
これが,ruby の curses の仕様なんでしょうか?
Ctrl-C を押したらいつでも終了するのがマナー
だと思っていたのですが…
0502デフォルトの名無しさん
2007/02/20(火) 21:01:01ちなみに、環境何?
0503デフォルトの名無しさん
2007/02/20(火) 21:11:33ruby 1.8.5/screen 4.00/zsh 4.3.2/ck 2.0.26
で coLinux 0.7.1 上の Gentoo と Cygwin とを使っています.
0504デフォルトの名無しさん
2007/02/21(水) 01:05:15> これでもクリック待ちのときに Ctrl-C で終了できませんでした.
> これが,ruby の curses の仕様なんでしょうか?
rubyのつーか、cursesってそういうもんじゃなかったっけ?
0505デフォルトの名無しさん
2007/02/21(水) 11:11:41手元のopenSUSE 10.2では止まるけど、Ctrl-Cで停止しなければならない仕様なの?
C-Cされてもどこぞでシグナルがトラップされてたら止まらない。
コンソールからインタラクティブに操作するアプリは操作が中断されるだけで止まらないのも多い。
ところでgetchで入力待ちになったら1秒おきに表示が更新されない気がするんだけど?
0506デフォルトの名無しさん
2007/02/21(水) 11:53:25pythonでは入力待ち状態でCtrl-Cしたら
終了するのですがどうなんでしょう?
>>505
環境依存するのは何の違いがきいてるのでしょう?
設定で解消できるものなのか,OS依存でどうしようもないのか?
可能ならばCtrl-Cで終了するようにしたいです.
cursesがtrapを仕込んでいるとして,それを解除,
あるいは,更にtrapしてCtrl-Cを検出することは
無理でしょうか?
>>ところで…
はい.ですから timeout などを使って getch をくるまないといけないと思います.
更新間隔を入力するときは表示の更新が止まってもよいものとします.
0507デフォルトの名無しさん
2007/02/21(水) 14:12:48Cursesのマニュアルをじっくり読みなよ。
ttp://www.kis-lab.com/serikashiki/man/ncurses.html
ttp://www.faqs.org/docs/Linux-HOWTO/NCURSES-Programming-HOWTO.html
0508デフォルトの名無しさん
2007/02/22(木) 17:54:46pythonではできるって言ってんだから
pythonとrubyのcursesの実装の違いでしょ。
そこでcursesのマニュアル出すのはどうかと。
0509デフォルトの名無しさん
2007/02/22(木) 18:06:09証拠は質問者の証言だけか?
0510デフォルトの名無しさん
2007/02/22(木) 23:02:45端末文字の色変えろって気楽に言った時点でイヤな予感はしたんだが
0511デフォルトの名無しさん
2007/02/23(金) 21:31:43んぅ・・・
raw/norawあたりがあやしいかなと思って挿入してみても変化なし.
何かヒントいただけませんか?
>>510
すいません.色は問題の本質ではないです.
色を変える代わりに,1ならA,2ならBを表示するだけかまいません.
0512デフォルトの名無しさん
2007/02/23(金) 23:44:29そこ変えてもダメなの?
Ctrl-Cの扱いを変えられるのはraw、cbreakぐらい。
pythonでもrubyでもcursesモジュールは単にCのAPIをラップしてるだけで変わりはない。
強制的にrawになってる(?)ならgetchした先でCtrl-Cのコードのときexitすりゃいいけど
なんでそんなことになってるのかなあ。
0513デフォルトの名無しさん
2007/02/27(火) 17:36:05ちょっと言葉足らずだったので補足させて下さい.
例えば,以下のようなソースだと noraw モードになってるので
getch で Ctrl-C しても何も起きませんが,
getch より前に raw を挿入すると Ctrl-C で終了できました.
しかし,getch を getstr に置き換えると
raw/noraw/cbreak/nocbreak のどれを挿入しても変化なしでした.
require "curses"
begin
Curses::init_screen
Curses::stdscr.addstr("% ")
Curses::stdscr.refresh()
s = Curses::stdscr.getch()
Curses::stdscr.addstr("\n>>> %s \n" % s)
Curses::stdscr.refresh()
rescue
Curses::close_screen
end
0514デフォルトの名無しさん
2007/02/27(火) 17:37:08なので,getstr の代わりに,以下のように,
raw モードで getch のループを回す mygetstr
を使うと Ctrl-C で終了するようにできました.
しかし,Ctrl-H とかその他もろもろの処理を
全部書くのはなんか無駄なことしてるようで…
def mygetstr()
Curses::raw()
Curses::noecho()
s = ""
while true do
c = Curses::stdscr.getch()
if c == 3 then
exit 3
elsif c == 10 then
break
else
Curses::stdscr.addch(c)
s += [c].pack("c")
end
end
Curses::noraw()
Curses::echo()
return s
end
0515デフォルトの名無しさん
2007/02/27(火) 19:24:03cbreakモードは割り込み、フロー制御するが、rawモードはスルーして文字を返すそうな。
0516デフォルトの名無しさん
2007/02/27(火) 19:57:02それだとCtrl-Cもとられて本末転倒だろ
0517デフォルトの名無しさん
2007/03/01(木) 10:27:090518デフォルトの名無しさん
2007/03/07(水) 17:20:460519デフォルトの名無しさん
2007/03/07(水) 18:16:530520デフォルトの名無しさん
2007/03/09(金) 00:53:49同じ問題があって躓いてます。454見る前にできたプログラム書いてみます。
見て参考になる部分もありましたが3回「連続」で'BYE'を繰り返さないと
抜けられないようにする応用がわかりません。
talk = ''
puts 'おばばに何か用かえ?'
while talk != 'BYE'
talk = gets.chomp
if talk == talk.upcase
puts 'いやー、' + 19.to_s + (30+(rand(30))).to_s + '年以来ないねー!'
else
puts 'もっと大きな声で話しておくれ、坊や!'
end
end
0521520
2007/03/09(金) 01:06:17これだとBYE実行でもifに行っちゃいますね。
0522デフォルトの名無しさん
2007/03/09(金) 10:31:33count = 0
while count < 3
talk = gets.chomp
if talk == talk.upcase
puts "いやー、#{1930+rand(20)}年以来ないねー!"
# puts 'いやー、' + (1930+rand(20)).to_s + '年以来ないねー!' と同じ
else
puts 'もっと大きな声で話しておくれ、坊や!'
end
if talk == 'BYE'
count += 1
else
count = 0
end
end
0523520
2007/03/09(金) 21:07:16ありがとうございます!countメソッドははじめて見ました。
これまでのチュートリアルにでてないので使わないやり方もあるんですかね?
年号のやつもごちゃごちゃしてましたね。コメントどうもです。
さらに自分でBYE実行時の台詞変えたりしてみようと思います。
0524デフォルトの名無しさん
2007/03/09(金) 22:23:380525520
2007/03/09(金) 22:50:52それにしてもチュートリアルの問題やたら難しくないですか?
こんなもんなんでしょうか。
もう少し簡単な問題やヒントがのってるかと思ってチュートリアル書いた人の
本も買ってみたんですがネットにのってるのとほとんど同じ内容でした。
0526デフォルトの名無しさん
2007/03/09(金) 23:47:180527デフォルトの名無しさん
2007/03/10(土) 01:26:10初めてのPerl並に平易な問題から段階踏んで攻めるのがいいと思うんだが
0528デフォルトの名無しさん
2007/03/12(月) 17:35:43間が空いてしましましたが,
この件 ruby を 1.8.5_p2 から 1.8.6_pre3 にアップデートすると
getstr の入力待ちで Ctrl-C したら終了するようになりました.
Gentoo だとまだ stable じゃなかったこともあって
バージョンのことをまったく気にしてなかったんですが
何が変わったんでしょ?
ともかくご助言して頂いた方々ありがとうございました.
0529デフォルトの名無しさん
2007/04/16(月) 10:53:59ARGV[0]が定義されていない場合、デフォルト値100を代入。
ARGV[0]が2個が単調だ。
もっといい書き方はないだろうか?
0530デフォルトの名無しさん
2007/04/16(月) 11:23:17value = ARGV[0] || 100
0531デフォルトの名無しさん
2007/04/16(月) 22:51:44ああ!そうだった・・・
|| 忘れてたよ・・・
0532デフォルトの名無しさん
2007/04/24(火) 03:46:47calコマンドは呼んじゃ駄目。
つーかprint_this_month関数ぐらい欲しい。
0533デフォルトの名無しさん
2007/04/24(火) 12:02:25irb> print Time.now.month
# => 4
irb> require 'date'
irb> puts Date.parse('2006-11-13').month
# => 11
irb> require 'parsedate'
irb> p ParseDate.parsedate('Sat Aug 28 21:45:09 1999')
# => [1999, 8, 28, 21, 45, 9, nil, 6]
こんなんじゃ不足?
ちなみにcalコマンドのようにカレンダーのデータを作り整形して表示するクラスは今のところない
…というかそれ要るか?
そのカレンダーは既にアプリケーションだと思うんだが…
0534デフォルトの名無しさん
2007/04/24(火) 13:15:030535デフォルトの名無しさん
2007/04/24(火) 14:09:010536デフォルトの名無しさん
2007/04/24(火) 17:24:250537デフォルトの名無しさん
2007/04/24(火) 22:16:37days=['日','月','火','水','木','金','土'] # カレンダーの上の曜日
width=3 # 数字を含めた幅
endday=6 # 週の終わりの曜日(日曜:0、月曜:1、…、土曜:6)
t=Date.today
day_1st=Date.new(t.year,t.month,1) # 今月の第1日
day_last=Date.new(t.year,t.month,-1) # 今月の最終日
puts "#{t.month}月 #{t.year}".center(width*7) # cal風に中心に月と年
days.each{|w| print w.ljust(width)} # 曜日を表示
puts
print ' '*day_1st.wday*width # 1日までを空白で埋める
day_1st.upto(day_last) do |d|
print d.day.to_s.ljust(width)
print "\n" if d.wday == endday # 週の終わりなら改行
end
puts
--------------
ここまでならできた
変数変えただけで月曜始まりにも対応するようにしようと思ったが面倒なのでパス
0538デフォルトの名無しさん
2007/04/25(水) 08:01:150539デフォルトの名無しさん
2007/04/25(水) 09:41:37require 'date'
class RubyCalendar
def calendar(y, m)
ostr = sprintf("%04d / %s\n", y, Date::MONTHNAMES[m]);
dt = Date.new(y, m, 1)
wd = dt.wday
(0..6).each {|dc|
ostr += sprintf("%4s", Date::ABBR_DAYNAMES[dc]);
}
(0..34).each {|dc|
d = dc - wd + 1
y2, m2, d2 = y, m, d
if(dc < wd || !Date::valid_date?(y, m, d))
dt2 = dt + d - 1
y2, m2, d2 = dt2.year, dt2.month, dt2.day
ds = d2.to_s
else
ds = d2;
end
ostr += (dc % 7 == 0 ? "\n" : '') + sprintf("%4s", ds);
}
return ostr
end
end
rc = RubyCalendar.new
print rc.calendar(2007, 5)
0540腹減った
2007/04/25(水) 13:02:37require 'date'
### 改行制限で書ききれなかったのできちんと cal.rb MM YYYY の形式で指定すること(無指定は今月)
class Calender
def initialize(args)
(args.empty?) ? (t = Date.today) : (t = Date.new(args[1].to_i, args[0].to_i, 1))
case ENV['LANG'] #+ENV['LANGUAGE']
when /ja/i
(@monthnames,@abbr_daynames)=[nil,'1月','2月','3月','4月','5月','6月','7月','8月','9月','10月','11月','12月'], ['日','\
月','火','水','木','金','土']
else
(@monthnames,@abbr_daynames)=Date::MONTHNAMES, Date::ABBR_DAYNAMES.map{|day| day.chop!}
end
(@d_one,@d_last) = Date.new(t.year,t.month,1), Date.new(t.year,t.month,-1)
@width=1
end
attr_writer :width, :monthnames, :abbr_daynames
def to_a
a=Array.new; (@d_one-@d_one.wday).upto(@d_last+6-@d_last.wday){|d| a.push(d)}; return a
end
def to_s
spacer=' '*@width
cal = "#{@monthnames[@d_one.month]} #{@d_one.year}".center(3*7) << "\n"
cal << @abbr_daynames.inject(''){|days,name| days << name.rjust(2) << spacer} << "\n"
to_a.each do |d|
(cal << ' ' << spacer; next) unless d.month == @d_one.month
cal << d.day.to_s.rjust(2) << spacer << "\n"*(d.wday / 6)
end
return cal << "\n"
end
end
Calender.new(ARGV).display
0541デフォルトの名無しさん
2007/04/25(水) 13:31:13この配列を配列として取り出すメリット何もないな
Calender.new(4,2007).to_a で2007年4月の1日から末日までの
Dateオブジェクトの配列が返ってきたら便利だなと思ったんだけど
っていうか、どんな授業で出たカレンダーの宿題なのか早く言ってくれないと
提出に絶対適さないプログラム構造のカレンダーをめいめい趣味で作っちゃうよこのスレ
0542デフォルトの名無しさん
2007/04/25(水) 13:39:24だけじゃなく
cal 2007
にも対応汁
0543デフォルトの名無しさん
2007/04/25(水) 15:24:31require 'date'
class Date
def to_a
a=Array.new; Date.new(self.year,self.month,1).upto(Date.new(self.year,self.month,-1)){|d| a.push(d)}; return a
end
def calender
arr = self.to_a
cal = "#{MONTHNAMES[self.month]} #{self.year}".center(4*7) << "\n"
cal << ABBR_DAYNAMES.inject(''){|days,name| days << name.rjust(3) << ' '} << "\n"
cal << ' '*arr[0].wday
arr.each do |d|
cal << d.day.to_s.rjust(3) << ' '
cal << "\n" if d.wday == 6
end
return cal
end
end
if ARGV.size == 0 then
d=Date.today
else
d=Date.new(ARGV[1].to_i,ARGV[0].to_i,1)
end
puts d.calender
-------------
Dateのメソッドにすると楽しそうなのでくっつけてみた(書き方はこんなんでいいの?)
to_aがきちんとselfの月の配列になるよ
calenderはDateのプリティな表示ということでcalコマンド互換性を廃して独自に
0544デフォルトの名無しさん
2007/04/25(水) 16:48:03他人のソース見るのって勉強に成るし、いろんな解釈から面白いものが出てくれば良いと思う。
0545デフォルトの名無しさん
2007/04/25(水) 16:57:24### Date#calenderのwideはtrueだと>>543のように表示、falseだとcalコマンドのように表示
#!/usr/bin/ruby
require 'date'
class Date
def to_a
a=Array.new; Date.new(self.year,self.month,1).upto(Date.new(self.year,self.month,-1)){|d| a.push(d)}; return a
end
def calender(wide=true)
wide ? width=3 : width=2
arr = self.to_a
cal = "#{MONTHNAMES[self.month]} #{self.year if wide}".center((width+1)*7) << "\n"
cal << ABBR_DAYNAMES.inject(''){|days,name| days << (wide ? name.rjust(width) : name.chop.rjust(width)) << ' '} << "\n"
cal << ' '*(width+1)*arr[0].wday
arr.each do |d|
cal << d.day.to_s.rjust(width) << ' '
cal << "\n" if d.wday == 6
end
return cal
end
### 続く
0546デフォルトの名無しさん
2007/04/25(水) 16:58:51def calender_yearly
cals=Array.new
(1..12).each do |month|
d=Date.new(self.year,month,1)
cals.push(d.calender(false).to_a)
end
calender = "#{self.year.to_s.center(63)}\n\n"
(0..3).each do |i|
calender << seasonal(cals[i*3],cals[i*3+1],cals[i*3+2])
end
return calender
end
def seasonal(m1,m2,m3)
str = " #{m1[0].chomp}#{m2[0].chomp}#{m3[0]}"
(1..7).each do |i|
str << "#{putline(m1[i])}#{putline(m2[i])}#{putline(m3[i])}\n"
end
return str
end
def putline(week)
return "#{week.nil? ? ' '*22 : week.chomp.ljust(22)}"
end
end
if ARGV.size == 0 then
d=Date.today
else
d=Date.new(ARGV[1].to_i,ARGV[0].to_i,1)
end
puts d.calender_yearly
0547デフォルトの名無しさん
2007/04/25(水) 17:14:29ソースが勉強になるかどうかって話になると書く人減りそうだ
スレは改行制限があるからヘンな書き方になるし
三項演算子なんて今年初めて使ったぞ
えー解説、calender_yearlyでは12か月分のカレンダー作って配列calsに入れてます
(コンセプト段階では意味があったんだが今考えると意図不明)
seasonal では
1月1行目+2月1行目+3月1行目\n
1月2行目+2月2行目+3月2行目\n
1月3行目+2月3行目+3月3行目\n
要はこんなことしてます
22文字で固定するためにputlineを作ったんだと思います
なんかもうちょっと繰り返しとかのとこを全体的にどうにかすると
思いっきり綺麗に書けそうですが思いつかないので放置します次の方どうぞ
0548デフォルトの名無しさん
2007/04/25(水) 18:39:50このセリフどっかで聞いたことあるなぁ
Matzが良く使うよなぁ
0549デフォルトの名無しさん
2007/04/25(水) 18:54:46その台詞、仕事で使わせてもらう ( ・`ω・´)ノ
0550デフォルトの名無しさん
2007/04/25(水) 19:09:23require 'date' # >>545-546 のを改悪
require 'enumerator'
class Date
def to_a
(Date.new(self.year,self.month,1)..Date.new(self.year,self.month,-1)).to_a
end
def calender(wide = true)
width = wide ? 3 : 2
cal = "#{MONTHNAMES[self.month]} #{self.year if wide}".center((width+1)*7) << "\n"
cal << ABBR_DAYNAMES.map{|n| n[0..width-1]}.join(' ') << "\n"
cal << ' ' * (width+1) * Date.new(self.year, self.month, 1).wday
self.to_a.each do |d|
cal << d.day.to_s.rjust(width) << ' ' << (d.wday == 6 ? "\n" : "")
end; cal
end
def calender_yearly
cals = (1..12).map do |month|
a = Date.new(self.year, month, 1).calender(false).split(/\n/)
a[7] ||= ''; a
end
ret = "#{self.year.to_s.center(63)}\n\n"
cals.each_slice(3) do |a|
ret << a.transpose.map{|b|b.map{|c|c.ljust(22)}.to_s}.join("\n") << "\n"
end; ret
end
end
case ARGV.size
when 0; puts Date.today.calender
when 1; puts Date.new(ARGV[0].to_i, 1, 1).calender_yearly
when 2; puts Date.new(ARGV[1].to_i, ARGV[0].to_i, 1).calender
end
0551デフォルトの名無しさん
2007/04/25(水) 19:37:37きゃー短い
…やっぱこれ行列か
やっぱこれ行列だよな…
行列操作でMatrixしか思いつかなくてA4の紙にでっかい図書いて茹で上がって諦めたよ
Rangeオブジェクトは昇順の数字限定のいけ好かない奴だと思ってたのでこれからはなにやら便利に使うよ
enumeratorはなんて読むかもわかんないくらいなのでこれからがんばってべんきょうするよ
case文は書き慣れた感じがしてやらしいよ
0552デフォルトの名無しさん
2007/04/25(水) 20:07:10a[6] ||= ''; a[7] ||= ''; a にすりゃいいけど、ここ汚くて嫌い。
0553デフォルトの名無しさん
2007/04/25(水) 21:00:020554デフォルトの名無しさん
2007/04/26(木) 19:17:28どうやって日本語覚えた?
0555デフォルトの名無しさん
2007/04/27(金) 03:33:050556デフォルトの名無しさん
2007/04/27(金) 11:27:170557デフォルトの名無しさん
2007/04/27(金) 12:09:35つ 国語
0558デフォルトの名無しさん
2007/05/01(火) 16:56:170559デフォルトの名無しさん
2007/05/02(水) 06:52:06ただしDateは使わないこと
0560デフォルトの名無しさん
2007/05/02(水) 09:31:02((Time.local(y,m,d) - Time.local(y)) / (3600*24) + 1).to_i
end
どうでもいいけど八十八夜ってのは年初からの日数じゃないぞ。
dates(2007,5,2) # => 122
0561デフォルトの名無しさん
2007/05/02(水) 09:39:58そんなことも知らないのか
0562デフォルトの名無しさん
2007/05/02(水) 11:24:200563デフォルトの名無しさん
2007/05/02(水) 11:32:540564デフォルトの名無しさん
2007/05/02(水) 12:00:56うまく出来てるな
0565デフォルトの名無しさん
2007/05/02(水) 20:44:10旧正月でもないぞ。
立春から数えて八十八日目。節分もまぁ似たようなものだが。
0566デフォルトの名無しさん
2007/05/02(水) 21:28:28dates(2007,9,1) # => 244
0567デフォルトの名無しさん
2007/05/02(水) 21:43:41できたとしても、なんていうかRubyの練習にはならないと思う
0568デフォルトの名無しさん
2007/05/03(木) 23:07:14>できたとしても、なんていうかRubyの練習にはならないと思う
適当なサイトにアクセスして日付を取ってくるとかはどうだ?
0569デフォルトの名無しさん
2007/05/04(金) 02:07:210570デフォルトの名無しさん
2007/05/04(金) 12:34:350571デフォルトの名無しさん
2007/05/04(金) 12:45:20何かウィンドウシステムのようなもん使ってるならそれ併記しろ
あとなにかRuby/Tkとかのアプリケーション上での話ならそれもきちんと書け
0572デフォルトの名無しさん
2007/05/04(金) 13:06:16なんか文字と同じサイズで四角いマウスカーソル
らしきものが出て来て動くんです
0573デフォルトの名無しさん
2007/05/04(金) 13:09:270574デフォルトの名無しさん
2007/05/04(金) 13:11:530575デフォルトの名無しさん
2007/05/04(金) 13:24:01ttp://freebsd4-jman.kandk.co.jp/1/vidcontrol.1.html
0576デフォルトの名無しさん
2007/05/04(金) 22:20:22机の横に落ちてるだろ。ちゃんと探せよ。
0577デフォルトの名無しさん
2007/05/05(土) 11:55:340578デフォルトの名無しさん
2007/05/08(火) 16:32:25ただし3の倍数のときは数の代わりに「Fizz」と、5の倍数のときは「Buzz」とプリントし、
3と5両方の倍数の場合には「FizzBuzz」とプリントすること。
0579デフォルトの名無しさん
2007/05/08(火) 16:39:04と付け加えないとつまらんな
0580デフォルトの名無しさん
2007/05/08(火) 17:17:030581デフォルトの名無しさん
2007/05/08(火) 20:58:45http://www.aoky.net/articles/jeff_atwood/why_cant_programmers_program.htm
0582デフォルトの名無しさん
2007/05/08(火) 22:10:41おれ再帰つかったことねぇや
0583デフォルトの名無しさん
2007/05/09(水) 00:35:12必要なければ使わなくていい
使えないのは問題
0584デフォルトの名無しさん
2007/05/09(水) 01:06:50きちんと概念学んで理解すると時々使うようになると思う
0585デフォルトの名無しさん
2007/05/09(水) 02:14:09誰か再帰の便利なとこ教えてくれ
0586デフォルトの名無しさん
2007/05/09(水) 02:18:41というか再帰こそ自然で直観的なものだと思えるようになる。
0587デフォルトの名無しさん
2007/05/09(水) 02:28:01そうでもないか
0588デフォルトの名無しさん
2007/05/09(水) 02:59:41フツーの言語で説明されても「こんなんループで書いたほうが早いってはい終了」と思って
即忘れてしまうのは無理もないと思う
0589デフォルトの名無しさん
2007/05/09(水) 05:48:310590デフォルトの名無しさん
2007/05/09(水) 08:59:390591デフォルトの名無しさん
2007/05/09(水) 09:03:17Rubyスクリプトだとfact(n)を書くのに
(1..n).each do |i| 以下略
とか
1.upto(n) do |i| 以下略
とか
そういう便利な繰り返しが真っ先に出てきちゃうからな
いや、Rubyに限ったことじゃないけど
0592デフォルトの名無しさん
2007/05/09(水) 12:42:172分もあれば書けるだろうとか言われてるし
モニタの前でコーヒーとか飲みながらキーボードをパチパチやって答える問題ではない
0593デフォルトの名無しさん
2007/05/09(水) 13:11:19まずほとんどの場面で、
単純なソートで大丈夫だぜ
0594デフォルトの名無しさん
2007/05/09(水) 13:43:510595デフォルトの名無しさん
2007/05/09(水) 13:54:24ソートの実装はそれこそ勉強用だ
絶対に自力で経験しないといけないが、絶対に実地で使ってはイカン(趣味でもな)
0596デフォルトの名無しさん
2007/05/09(水) 14:31:45ただし、たいがいはコードが美しくなるだけであって動作速度は普通に書くよりも遅い
ただでさえワンテンポ遅いRubyが再帰でさらに遅くなるのでトレードオフの見極めに注意
込み入ったプログラムでは使うと便利なこともあるけれど、初心者には無理かも
0597デフォルトの名無しさん
2007/05/10(木) 11:26:26自作の速度クリティカルじゃないスクリプトでどんどん使って慣れておいたほうがいいぞ。
0598デフォルトの名無しさん
2007/05/12(土) 12:44:58130bytes orz
0599デフォルトの名無しさん
2007/05/12(土) 13:55:39ramen.rb 180
ってやると残り時間を秒単位でカウントしていって
時間過ぎたら今度は経過時間を表示していくようなやつ
0600デフォルトの名無しさん
2007/05/12(土) 15:22:30# バックスペース文字の連打で描画領域を確保するのは横着なので真似しないこと
time = Integer(ARGV[0])
$stdout.sync = true
time.downto(time*-1) do |t|
print "\a\a" if t < 1
print t.to_s.rjust(4)
sleep 1
print "\b\b\b\b \b\b\b\b"
end
0601デフォルトの名無しさん
2007/05/12(土) 16:08:51# 5秒につき * が1個減ります
time = Integer(ARGV[0])
$stdout.sync=true
0.upto(time) do |i|
(print i / 60; next) if i % 60 == 0
(print '*') if i % 5 == 0
end
time.downto(time*-1) do |t|
print "\a" if t < 0
print "\b \b" if t % 5 == 0 && t >= 0
sleep 1
end
0602デフォルトの名無しさん
2007/05/12(土) 16:25:52更新履歴兼雑記 - FizzBuzz アゲイン 15:51
http://d.hatena.ne.jp/shinichiro_h/20070509#1178693484
1.upto(?d){|n|puts ["Fizz#{s=[:Buzz][n%5]}"][n%3]||s||n}
1.upto(?d){|n|s=[:Buzz][n%5];puts n%3<1?"Fizz#{s}":s||n}
1.upto(?d){|n|n%3<1&&s=:Fizz;puts n%5<1?"#{s}Buzz":s||n}
1.upto(?d){|n|puts ["Fizz%s"%s=[:Buzz][n%5]][n%3]||s||n}
0603デフォルトの名無しさん
2007/05/17(木) 20:58:14いろんな言語で書いてあるのをみてみると
ふりわけするのにこういうパターン(ケース型?)がすごく多い。
if n % 15 == 0 then
puts "FizzBuzz"
elsif n % 3 == 0 then
puts "Fizz"
elsif n % 5 == 0 then
puts "Buzz"
else
puts n
end
15を先に調べるとなにかいいことある?
式の評価回数がふえるだけのような気がするんだけど。
ふつうにifの入れ子では駄目なのかなあ。
あ、短くする競争のものは、なんでもやってください。
そうじゃないものの話ね。
0604デフォルトの名無しさん
2007/05/17(木) 21:01:060605デフォルトの名無しさん
2007/05/17(木) 21:26:13「3の倍数の場合」「5の倍数の場合」「3の倍数でもあり、5の倍数でもある場合」
のみっつのケースを特別視しないといけないから、素直にコードに落とすと
そうなるんじゃないか?
0606sage
2007/05/17(木) 21:43:12if n % 3 == 0 then
if n % 5 == 0 then
puts "FizzBuzz"
else
puts "Fizz"
end
else
if n % 5 == 0 then
puts "Buzz"
else
puts n
end
end
0607デフォルトの名無しさん
2007/05/17(木) 22:13:42>>603
コードによってthen以下の処理内容は違うから一概には言えない
ただ、たとえば3や5を先にすると、15で割り切れるはずの30が先に3や5の処理に入ることがある
短くしたいとか奇を衒おうとかいうコードの場合、そういうのに対する余分な迂回処理は避けたいんだろう
だから分岐の時点で15を先に持ってくると
0608デフォルトの名無しさん
2007/05/17(木) 23:17:02n % 5 == 0 という条件式が繰り返されているので、仕様変更に弱い。
TABLE = [nil, "Fizz", "Buzz", "FizzBuzz"]
index = 0
index += 1 if n % 3 == 0
index += 2 if n % 5 == 0
word = TABLE[index]
puts word ? word : n
0609デフォルトの名無しさん
2007/05/18(金) 00:44:30そんなこと言ったら再利用に便利なようにメソッド化しモジュール化すべきだと言うぞ俺は
0610デフォルトの名無しさん
2007/05/18(金) 01:19:00p (1..100).to_a.map {|i|
if i % 15 == 0 then "FizzBuzz"
elsif i % 3 == 0 then "Fizz"
elsif i % 5 == 0 then "Buzz"
else i
end
}
0611デフォルトの名無しさん
2007/05/18(金) 02:21:25実際、どれぐらい式の評価回数が違うか数えてみると
1から100の数字の場合、3でも5でも割り切れる場合が7個
3で割り切れる場合が27個、5で割り切れる場合が13個
それ以外が53個、ケース型の式の評価回数は、
7*1+27*2+(13+53)*3=259回
入れ子型の場合、2*100=200回
ケース型はデータによって変動するわけですが、
最良の場合は100回、最悪で300回。
0612デフォルトの名無しさん
2007/05/18(金) 10:10:490613デフォルトの名無しさん
2007/05/19(土) 17:39:561.upto(100) {|i|
s = ""
s << 'Fizz' if i % 3 == 0
s << 'Buzz' if i % 5 == 0
s << i.to_s if s == ""
puts s
}
0614デフォルトの名無しさん
2007/05/20(日) 00:25:390615デフォルトの名無しさん
2007/05/20(日) 08:31:31http://pc11.2ch.net/test/read.cgi/prog/1178626960/
0616デフォルトの名無しさん
2007/05/21(月) 11:40:06(1..100).each{ |n|
s = n.to_s
s='Fizz' if n % 3 == 0
s='Buzz' if n % 5 == 0
s='FizzBuzz' if n % 15 == 0
puts s
}
0617デフォルトの名無しさん
2007/05/21(月) 12:33:07別に何かトリッキーな短くしようという書き方してるわけでもないだろ
今のままだと n が 15のとき
s #=> "15"
s #=> "Fizz"
s #=> "Buzz"
s #=> "FizzBuzz"
と 4回切り替わってるぞ
(1..100).each do |n|
if n % 15 == 0 then
s = 'FizzBuzz'
elsif n % 3 == 0 then
s = 'Fizz'
elsif n % 5 == 0 then
s = 'Buzz'
else
s = n.to_s
end
puts s
end
んで「 nが何回も評価されててうぜえ」と感じるなら case 文とか
そして、もしも「こんなん1から100まで入った配列をFizzやBuzz入りの配列に変換すりゃいいんだろ」と思えるのなら
0618デフォルトの名無しさん
2007/05/21(月) 12:58:33class Fixnum
def fizzbuzz
(ret = "#{["Fizz"][self % 3]}#{["Buzz"][self % 5]}").empty? and ret = to_s
ret
end
end
1.upto(100){|n|
puts n.fizzbuzz
}
0619デフォルトの名無しさん
2007/05/21(月) 13:05:48>>618を使うなら
puts (1..100).to_a.map{|i| i.fizzbuzz}
ってとこか?
どこぞで不評だったputsの特別機能(配列は改行つきで表示)がこんなとこでなにやら便利に
0620デフォルトの名無しさん
2007/05/21(月) 13:07:42切り替わるとやばいかな。のちのち値を追いかけるときやばくなるとかですか。
理由をもうちっと教えてください。
0621デフォルトの名無しさん
2007/05/21(月) 13:41:35str = String.new
str = "hoge"
と同じような無駄(1行目で作られたStringオブジェクトは2行目で破棄される)
何か「まずい」ことがおきることはないはずだよ
0622デフォルトの名無しさん
2007/05/21(月) 16:10:10map使うならto_aは不要。
0623デフォルトの名無しさん
2007/05/21(月) 16:39:590624デフォルトの名無しさん
2007/05/21(月) 16:52:02お前ら人生の効率をもう少し重視したほうがいい
0625デフォルトの名無しさん
2007/05/22(火) 04:48:050626デフォルトの名無しさん
2007/05/24(木) 16:35:08puts "2"
puts "Fizz"
・
・
・
じゃダメなのか?
と基本的なボケをしてみる。
0627デフォルトの名無しさん
2007/05/24(木) 19:04:310628デフォルトの名無しさん
2007/05/28(月) 01:00:12FizzBuzz.rb
1.upto(?d){|i|puts""==(a=$0[i*i%3*4-11..-4--i**4%5])?i:a}
0629デフォルトの名無しさん
2007/05/28(月) 18:03:52def FizzBuzz(x)
r = "Fizz" if x % 3 == 0
r = (r||"") + "Buzz" if x % 5 ==0
return r || x
end
1.upto(100) {|x| puts FizzBuzz(x)}
0630デフォルトの名無しさん
2007/05/28(月) 18:41:31うちだと、nil nil nil nil ...にしかならなかった
0631デフォルトの名無しさん
2007/05/28(月) 21:42:070632デフォルトの名無しさん
2007/05/28(月) 21:50:44>> $0 = 'FizzBuzz.rb'
>> 1.upto(?d){|i|puts""==(a=$0[i*i%3*4-11..-4--i**4%5])?i:a}
動作確認には十分。
0633デフォルトの名無しさん
2007/05/28(月) 22:09:330634デフォルトの名無しさん
2007/05/29(火) 20:36:530635デフォルトの名無しさん
2007/05/30(水) 17:02:25そういうことかww
やっときづいた
0636デフォルトの名無しさん
2007/06/06(水) 15:42:44配列の一番後ろを得たいときは、
a.last
だよな?
後ろから2番目、3番目を得たいときは、どうするんだ?
a[a.size - 2]
しかない?
a.last(2)
は違うし・・・
0637デフォルトの名無しさん
2007/06/06(水) 15:49:18=> [1, 2, 3, 4, 5]
irb> a[-2]
=> 4
0638デフォルトの名無しさん
2007/06/06(水) 15:59:27last一つ前は-2
0639デフォルトの名無しさん
2007/06/06(水) 16:03:16インデックス、マイナスにできたのか。しらなかた
reverseしてから、アクセスとかやってた。
サンクスでう。
0640デフォルトの名無しさん
2007/06/11(月) 02:35:33やりたいことは、arrayにして、sortしたいのですが・・・
s.to_aは行ごとだし・・・
0641デフォルトの名無しさん
2007/06/11(月) 02:38:56s = "hogemoge"
a = []; s.each_byte {|l| a << l.chr}
pp a.sort_by{ rand }.to_s
実際書いてみると、以外に短かかったw
0642デフォルトの名無しさん
2007/06/11(月) 03:43:290643デフォルトの名無しさん
2007/06/11(月) 07:53:281文字ずつぶった切って配列にしてるんだなと読み下してもくれるし
0644デフォルトの名無しさん
2007/06/11(月) 16:10:21s.split(//)
同じ長さだったか。
0645デフォルトの名無しさん
2007/07/08(日) 19:59:06作りたいのだが以下のプログラムで作るにはどうしたらいいのでしょうか?
教えてください。
print("Enter n: "); n = gets.chomp.to_i
if( n>30 || n<0 ) then
n = 10
end
a = Array.new( n )
a[0] = [1] # 要素が1 の長さ1の配列
# ここでパスカルの3角形を作る
# このとき、a[i]ごとに配列を作る
# そして、印字
for i in (0..a.length-1) do
for j in (0..a[i].length-1) do
print( " ", a[i][j] )
end
print( "\n" )
end
0646デフォルトの名無しさん
2007/07/09(月) 06:58:160647デフォルトの名無しさん
2007/07/09(月) 08:18:090648デフォルトの名無しさん
2007/07/09(月) 14:54:25これはひどい
0649デフォルトの名無しさん
2007/07/09(月) 16:07:040650デフォルトの名無しさん
2007/07/09(月) 16:25:33マルチと誤解されないためには、前スレに移動する由を書いとけばいい
0651デフォルトの名無しさん
2007/07/09(月) 16:39:33移動した旨は移動時に既にあっちに書いてあるし、イジられる以上の非難を受ける謂れは無いと思われ
0652デフォルトの名無しさん
2007/07/09(月) 18:09:50class Array
def next_pascal
next_pascal = Array.new
next_pascal << self[0]
self[0..-2].each_index do |i|
next_pascal << self[i] + self[i + 1]
end
next_pascal << self[-1]
end
end
p = [1]
10.times do
puts p.join(' ')
p = p.next_pascal
end
0653デフォルトの名無しさん
2007/07/11(水) 03:44:53class Array
def next_pascal
enum_for(:each_cons,2).inject([self[0]]){|a,(i,j)|a<<(i+j)}<<self[-1]
end
end
0654デフォルトの名無しさん
2007/07/11(水) 12:28:17勉強になった
0655デフォルトの名無しさん
2007/07/12(木) 08:00:41それぞれ時間順に表示するものを作りたいんです。
ホスト別に分け、さらにそれを時間順に並べ直すって所が分かりません
・・・要するに全く出来て無いんですが
これはどう考えればいいんでしょうか?
0656デフォルトの名無しさん
2007/07/12(木) 10:27:36String(文字列)とArray(配列)とHash(ハッシュ)とEnumerable(配列とハッシュに共通)の4つのとこだけでいい
「そういえば何かあったな」とか「何か使えそうなのないかな」と思いながら眺めるだけでいいから
Enumerableのgで始まるとことかsで始まるとことか超お勧め
0657デフォルトの名無しさん
2007/07/12(木) 10:39:53なるほど、勉強になった。
0658デフォルトの名無しさん
2007/07/12(木) 12:02:32書いてみたけどメガなファイルを読み込ませるとしばらく固まるので注意
#!/usr/bin/ruby -Ke
require 'time'
path_to_log = './access_log_20070712' # ログファイルのパス
re_apache_log = /^(.*) (.*) (.*) \[(.*)\] "(.*)" (.*) (.*) "(.*)" "(.*)"/
def convert_time(str)
# Apacheのログ時刻表記をTimeオブジェクトにして返す
# (っていうかParseDateで対応して欲しい)
if /(\d\d)\/(...)\/(\d\d\d\d):(\d\d):(\d\d):(\d\d)/ =~ str then
return Time.mktime($3,$2,$1,$4,$5,$6)
end
end
# ログファイルを行単位で配列にしたものの要素をさらにログ内容で区切る
# => [ ["%h1,%l1,%u1,%t1,...], ["%h2,%l2,%u2,%t2,...], ... ]
data = File.readlines(path_to_log).map{ |l|
l.scan(re_apache_log).flatten
}
# 0番目のリモホでソートした後、3番目の時刻をTimeオブジェクトにした値でもソートする
# sort_by{|a| [a1,a2,a3]} と書くと実質上a1でソート後a2でソートされa3でソートされる
data.sort_by{|a| [a[0], convert_time(a[3])]}.each do |line|
puts line.join(',')
end
0659デフォルトの名無しさん
2007/07/12(木) 13:49:29リファレンスも、もっとしっかり読んで勉強しておくことにします
0660デフォルトの名無しさん
2007/07/18(水) 01:38:04puts %w(a b c).inject(""){|r,i|r+i+","}.chop
もっと短くならんかね
0661デフォルトの名無しさん
2007/07/18(水) 08:10:27puts ['a','b','c'] * ','
0662デフォルトの名無しさん
2007/07/18(水) 09:00:22それお前の完全な自己満足じゃねーか素直にjoin使えバカみたいな
0663デフォルトの名無しさん
2007/07/18(水) 09:25:350664デフォルトの名無しさん
2007/07/18(水) 11:22:53>663 の言う通り、FizzBuzzスレで出た話題。要は言語問わず
お前ら join のアルゴリズムぐらいは自前で書ける能力持ってるよな?
って話。だから別に短くする必要はどこにも無いと思うのだが…
>660ですら既にワンライナーし過ぎで気になるくらいだ
0665デフォルトの名無しさん
2007/07/18(水) 20:45:50ゆかり(笑)
紫蘇人
0666デフォルトの名無しさん
2007/07/30(月) 19:02:32夏休みにRubyの宿題…なんて無いか
0667デフォルトの名無しさん
2007/07/30(月) 20:13:28MLではどっかの学校で使ってるという人がいたけど
0668デフォルトの名無しさん
2007/07/30(月) 20:18:48あっても「来週までに作るように」とか「これまでの授業を踏まえて最後に課題をやるように」程度か
0669デフォルトの名無しさん
2007/08/05(日) 00:51:48http://www.sankei.co.jp/seikatsu/kenko/070804/knk070804000.htm
「自殺は突然」など自殺者の心理、半数が誤解
http://www.yomiuri.co.jp/politics/news/20070804it11.htm
0670デフォルトの名無しさん
2007/09/09(日) 04:04:10初級シスアドが廃止らしい
http://www.atmarkit.co.jp/news/200709/07/ipa.html
0671デフォルトの名無しさん
2007/09/20(木) 21:24:310672デフォルトの名無しさん
2007/09/24(月) 04:41:56もの凄い亀レスだけど、この流れワロタw
こんな堂々とした丸投げはある意味、すっきりするかもしれん。
0673デフォルトの名無しさん
2007/09/25(火) 00:58:510674デフォルトの名無しさん
2007/10/05(金) 10:49:57それに続く内角がその前の角より5度ずつ大きい多角形を作る時、
その図形は何角形になるかを求め、図示せよ。
丸投げで申し訳ないですがよろしくお願いします。
0675デフォルトの名無しさん
2007/10/06(土) 21:05:28起点(基底辺)から何度なのかを考える
pre_angle : 前の内角
pre_absolute_angle : 前の辺の起点からの角度
cur_angle : 今の辺の内角
cur_absolute_angle : 今の辺の起点からの角度
n : 辺の番号
cur_absolute_angle が360となった時、辺は閉じる
問題の定義から
cur_angle=pre_angle +5
cur_absolute_angle=pre_absolute_angle + ( 180-cur_angle)
となる
n=1
のとき、
pre_angle=120
pre_absolute_angle=60
あるので後はこれをnを増やしていけばわかるはず
0676674
2007/10/06(土) 23:38:27答えそのものを書いて下さい。
0677デフォルトの名無しさん
2007/10/06(土) 23:43:10ふざけるな。
つーか、これRubyと何の関係があるの?
0678デフォルトの名無しさん
2007/10/06(土) 23:49:12と思ったけど、図示しろと書いてあるし、違うのかな?
0679デフォルトの名無しさん
2007/10/06(土) 23:50:34スレタイよく嫁
0680デフォルトの名無しさん
2007/10/06(土) 23:50:50180(n-2) = Σ 120 + 5(k-1) [k=1...n]
を解けば何角形かわかるんじゃね?
0681デフォルトの名無しさん
2007/10/08(月) 00:41:32いくらなんでも、ヒデエ態度w
0682デフォルトの名無しさん
2007/10/08(月) 01:28:27>>図示せよ。
2chで図示ってAA職人の出番ですか?
0683デフォルトの名無しさん
2007/10/08(月) 01:29:330684デフォルトの名無しさん
2007/10/08(月) 03:06:03180nになるな。で、中心の360を除けばいいだろ。
あとは好きにしろ。
0685デフォルトの名無しさん
2007/10/08(月) 03:45:20例)三角形(180度)→四角形(360度)→五角形(540度)
内角度が120,125,130,135,…と5度ずつ増える総和が180の倍数(180で割り切れる)になるのが答えの多角形では?
Ruby勉強始めたばかりなので下手ですまない
--------------------------------
angle_sum,angle_no = 0,0
now_angle = 120
flag = true
while flag do
angle_no += 1
angle_sum += now_angle
puts "#{angle_no}: #{now_angle} sum=#{angle_sum}"
flag = false if angle_sum % 180 == 0
now_angle += 5
end
puts "result=#{angle_no}"
---------------------------------
1: 120 sum=120
2: 125 sum=245
3: 130 sum=375
4: 135 sum=510
5: 140 sum=650
6: 145 sum=795
7: 150 sum=945
8: 155 sum=1100
9: 160 sum=1260
result=9
---------------------------------
検証:180 * (9 - 2) = 1260
答え: 9角形
0686デフォルトの名無しさん
2007/10/08(月) 04:02:470687デフォルトの名無しさん
2007/10/08(月) 04:15:310688デフォルトの名無しさん
2007/10/08(月) 04:39:21辺の長さは決まらないだろう? 基準の長さが決められてないんだから。
形は決まるかもしれないが。
0689デフォルトの名無しさん
2007/10/08(月) 09:11:350690デフォルトの名無しさん
2007/10/08(月) 13:23:11http://pc11.2ch.net/test/read.cgi/tech/1191108260/14
0691デフォルトの名無しさん
2007/10/08(月) 13:28:04675の答えってまんまJavaスレの18のコピペやん
0692デフォルトの名無しさん
2007/10/08(月) 14:10:390693デフォルトの名無しさん
2007/10/08(月) 14:37:330694デフォルトの名無しさん
2007/10/08(月) 20:36:46そういう俺も円周率求める課題にモンテカルロ法使ったりした訳だがw
0695デフォルトの名無しさん
2007/10/10(水) 10:14:120696デフォルトの名無しさん
2007/10/11(木) 07:02:41つーかプログラミングの宿題なのか?
>>689で出てる通り、中学生レベルの数学だろ。
手計算で終わりじゃん。
0697デフォルトの名無しさん
2007/10/11(木) 12:00:320698デフォルトの名無しさん
2007/10/11(木) 12:08:48>>674
>> (中略)
>>その図形は何角形になるかを求め、図示せよ。
この問題のキモは、プログラムで「図示」させる所にあるのだ
0699デフォルトの名無しさん
2007/10/11(木) 22:19:23最初の辺の長さを維持して図形を作れば、最後の辺でどうにでも調整が利くんじゃね?
開いていく図形になるんだから。
全ての辺の長さを同じにしろっていう制限をつけたほうが良さげ。
0700デフォルトの名無しさん
2007/10/11(木) 23:45:59不可能にならんか?
0701デフォルトの名無しさん
2007/10/11(木) 23:54:25L(cos(120)+cos(125)+....) = 0
だからLの長さ固定じゃどうにもならんな。
0702デフォルトの名無しさん
2007/10/11(木) 23:58:59意味はかわらんけど。
0703デフォルトの名無しさん
2007/10/12(金) 00:07:13一つの平面内という暗黙の制限をなくせばなんとかなる?
ちょっと難しすぎて考える気にならんのだけど。
0704デフォルトの名無しさん
2007/10/12(金) 07:14:13逗子は難しいな
0705デフォルトの名無しさん
2007/10/14(日) 19:38:26どなたか教えていただけませんか?
http://www.geocities.jp/sugachu_kbb/suucccccccccccccc.JPG
0706705
2007/10/14(日) 19:39:030707デフォルトの名無しさん
2007/10/14(日) 19:46:160708デフォルトの名無しさん
2007/10/18(木) 06:30:36関数型やった事ないんで、激しく勘違いしているかも
しれないが、一応雰囲気はそれらしくしてみたつもり。
算術演算子3つ(加減算、大なり)と即値2つ(1,4243)
だけで解いてみた。
ループのやり方さえ分からないところから始めたので、
自分にとってはかなりの力作。
greater = lambda { |a,b| a > b }
add = lambda { |a,b| a + b }
sub = lambda { |a,b| a - b }
ONE = 1
ZERO = sub[ONE,ONE]
N = 4243
shift_l = lambda { |n| add[n,n] }
shift_r = lambda { |n|
ret = lambda { |m,i|
k = add[m,i]
greater[shift_l[k], n] \
? m \
: k
}
(rec = lambda { |i|
greater[n, i] \
? ret[ rec[ shift_l[i] ], i] \
: ZERO
})[ONE]
}
0709デフォルトの名無しさん
2007/10/18(木) 06:36:11d =
(rec = lambda { |d|
greater[d, shift_l[n]] \
? d \
: rec[ add[d, shift_r[ add[d,ONE] ] ] ]
})[ONE]
sub[ add[ add [ shift_l[n], n], ONE], d]
}
print J3[N]
ここでやるような事じゃないかも知れないけど、
誰か気が向いたら添削してくれると嬉しいな。
0710デフォルトの名無しさん
2007/10/18(木) 12:36:200711デフォルトの名無しさん
2007/10/18(木) 13:35:33条件分岐にはガード "|" というのを使うそうなんだ。
| [condition] = [expression] // 真
| otherwise = [exprassion] // 偽
これに似たような感じにしたかったんで、一文字の記号 : と ? で
縦に揃えてみたけど、あんまり似てはいないな。
上の式を素直に真似するなら本来こうなるはずなんだが、
[condition] ? [expression]
: [expression]
インデントが深すぎるような気がして3行にしてしまった。
今は反省している。
0712デフォルトの名無しさん
2007/10/18(木) 14:42:32なんでこれをrubyで真似しようと思うのかがわからん。
0713デフォルトの名無しさん
2007/10/18(木) 15:13:52処理系を準備するのが面倒だったので、手持ちのRubyで
擬似コードでも書いてみることにしたんだよ。
LispでもOcamlでも何でも良かったんだが、最初に見つけた
簡単そうな日本語の解説がcleanだったというだけのことで、
青木さんのHaskel本を入手できてればそっちだったかもね。
0714デフォルトの名無しさん
2007/10/19(金) 14:51:46RubyをCOBOLやFORTRANのように記述されてピキッと来たことはないのか?
関数型言語でないものに関数型言語の論理を持ち込むな
0715デフォルトの名無しさん
2007/10/19(金) 17:35:30すまん、>>705みたいなやる気の欠片もないマルチ野郎には
相応の解答をしてやろうと思って、勉強ついでにやっただけなんだ。
ネタがスベったにせよ、スルーできずに文句が飛んでくる程とは
思ってなかった。
それについては申し訳ない。
それから、形だけというか、文法とか見た目だけ他言語チックに
されても不愉快という点には、まぁ同意なんだが……
(一応それも含めてネタの一環なんで、敢えてやってる)
関数型囓り始めたばかりの自分が言うのもなんだけどさ、
>関数型言語でないものに関数型言語の論理を持ち込むな
というのはどうかとおもうよ。
Rubyは一言で言えばオブジェクト指向言語なのだろうけど、
別に手続き型の書き方を否定してるわけじゃない。
手続き型の方がいい場合にはそれを支援する仕組みさえある。
Kernelに定義された”関数”とか、Math を includeするとかね。
毎度毎度 stdout.print "string" なんてやりたくないだろ?
Rubyは関数型言語譲りのλ式があって高階関数とかも
簡単に扱えるようにできてるんだから、関数型の方が適した
問題領域にはそれを使ったらいいじゃない。
0716デフォルトの名無しさん
2007/10/19(金) 17:48:02びっくりするほど簡潔でわかりやすい。
def qsort(xs)
if xs.size <= 1
xs
else
x = xs.shift
qsort(xs.select { |v| x >= v }) + [x] + qsort(xs.select { |v| x < v })
end
end
WikipediaのHaskellの項からほぼ丸写ししたquicksortだけど
shiftで破壊的操作してるのは…まぁ、ご愛敬ということで。
引数に比較関数を受けて Enumerable#partisonで分割すると
もうちょっと気の利いた形になるかな。
あと、いまさらだけど、ついでなので >>708 追記。
加算演算子要らなかった。
minus = lambda { |a| sub[ZERO, a] }
add = lambda { |a,b| sub[a, minus[b]] }
0717デフォルトの名無しさん
2007/10/20(土) 17:46:18多重代入すれば(・∀・)イイ!!
x, *xs = args
0718デフォルトの名無しさん
2007/10/22(月) 17:45:34ttp://itpro.nikkeibp.co.jp/article/NEWS/20071022/285089/?ST=oss
ttp://itpro.nikkeibp.co.jp/99/ruby/index.html
0719デフォルトの名無しさん
2007/10/24(水) 13:58:22学校で宿題が出たのでソースは書いたのですが
このままだと同じクラスのみんなにコピペされて
みんな同じソースを提出という事態になりそうです
そのなかで自分のソースだけは本物(オリジナル)
であることを証明出来るような何かを同じソースに
埋め込むような方法はどんなのがあるでしょうか?
0720デフォルトの名無しさん
2007/10/24(水) 14:19:29コメント
0721デフォルトの名無しさん
2007/10/24(水) 16:38:43昔の俺は結局バレた
0722デフォルトの名無しさん
2007/10/24(水) 17:21:47crypt関数かなんかで暗号化した文字列を、こっそりとコメントに埋め込む
で行けるかも。試したことないから分からんけど
0723デフォルトの名無しさん
2007/10/24(水) 20:09:55気にするな
今は笑っちゃうほど簡単だが次の次くらいで自力で書ける人間と書けない人間の差が出る
次の次とか無いんです、というのなら諦めとけ
授業で習ってない使い方をしておくというのもあるが
0724デフォルトの名無しさん
2007/10/24(水) 20:53:300725デフォルトの名無しさん
2007/10/24(水) 23:47:030726デフォルトの名無しさん
2007/10/24(水) 23:50:33普通は誰もプログラミングなんてしたくない
コピーするだけで校内マラソンがクリアできるならたいていの奴はそうする
0727デフォルトの名無しさん
2007/10/25(木) 00:01:30俺が始めた頃は下手なゲームよりBASICでプログラム作る方が楽しかったなぁ。
0728デフォルトの名無しさん
2007/10/25(木) 00:03:340729デフォルトの名無しさん
2007/10/25(木) 02:08:26先生が理解してくれるかどうか
0730デフォルトの名無しさん
2007/10/25(木) 02:09:53Rubyで
0731デフォルトの名無しさん
2007/10/25(木) 02:14:43ソースに入れておいて実行時は比較してから動作を変えるとか
0732デフォルトの名無しさん
2007/10/25(木) 02:45:20授業で説明してない書き方を組み入れるのが一番
まあ、これは書いた人がRubyを気に入ってくれたという前提だけど
0733デフォルトの名無しさん
2007/10/25(木) 03:00:25それを阻止するソースを他人に聞きに来る。
たかだか宿題でコピーなんて気にするな。
0734デフォルトの名無しさん
2007/10/25(木) 06:22:15これどうやってやるんだろう
MD5計算したあとにソース書き換えたら
またMD5計算しなおさないと合わないよね
0735デフォルトの名無しさん
2007/10/25(木) 10:29:560736デフォルトの名無しさん
2007/10/25(木) 15:44:090737デフォルトの名無しさん
2007/10/25(木) 15:48:330738デフォルトの名無しさん
2007/10/25(木) 21:52:540739デフォルトの名無しさん
2007/10/25(木) 22:29:170740デフォルトの名無しさん
2007/10/26(金) 00:20:210741デフォルトの名無しさん
2007/10/26(金) 01:26:15>>736
ファイル名は課題番号なのでだめなんです
0742デフォルトの名無しさん
2007/10/26(金) 07:16:290743デフォルトの名無しさん
2007/10/26(金) 16:48:19コピーではないことを証明するにはどうすりゃいいんだろう・・・
0744デフォルトの名無しさん
2007/10/26(金) 18:26:350745デフォルトの名無しさん
2007/10/26(金) 23:33:42結構気づかれないんじゃない?
0746デフォルトの名無しさん
2007/10/27(土) 00:30:05きつつなれにし
つましあれば
はるばるきぬる
たびをしぞおもふ
在原業平
0747デフォルトの名無しさん
2007/10/27(土) 01:00:42俺のときは、アルゴリズムの演習の課題を、言語指定がなかったので、Delphiで出した。
当時、大学のメインマシンは、UNIXだったので、誰も真似できなかったな。
間違ってなかったので、無論、通った。
C言語の講義のときは、課題をC++(OOP)で書いて出した。
C++じゃねーか!って言われたが、結局通った。
はっきりいって、圧倒的にわかっていると思わせる書き方をして出すと、OK。
コピペされても、コピペした奴は、教師の質問やツッコミに答えられないので。
0748デフォルトの名無しさん
2007/10/27(土) 01:01:340749デフォルトの名無しさん
2007/10/27(土) 01:13:41昔ベーマガで何度か見かけた手法。
0750デフォルトの名無しさん
2007/10/27(土) 02:22:140751デフォルトの名無しさん
2007/10/27(土) 02:55:38なつかしいw
ベーマガなのに、なんで、機械語みたいなBASIC打ち込まされるのか、当時腹たってた
0752デフォルトの名無しさん
2007/10/27(土) 06:13:30句読点の場所が変だってつっこまれたことない?
0753デフォルトの名無しさん
2007/10/27(土) 06:48:090754デフォルトの名無しさん
2007/10/27(土) 08:38:190755デフォルトの名無しさん
2007/10/27(土) 08:56:490756デフォルトの名無しさん
2007/10/27(土) 09:24:110757デフォルトの名無しさん
2007/10/27(土) 09:34:52Cの課題を採点するチューターが業務のCプログラムを読み解けるとは限らないし非難される謂れもねー
技巧つきでRubyの課題を提出する奴はDelphiやPerlの課題をJavaで書いてくるアホと一緒だ
「動くんだからいいでしょ」ってそれは「課題の」要件満たしてねえぞ
小学校の平行四辺形の面積求める理解力テストで積分使って面積求めてたらやっぱバツだろ
0758デフォルトの名無しさん
2007/10/27(土) 10:00:110759デフォルトの名無しさん
2007/10/27(土) 12:00:33日本語でおk
0760デフォルトの名無しさん
2007/10/27(土) 13:31:42・学生は、学生らしくコード書いてろ
・ハッカーは必要ない
0761デフォルトの名無しさん
2007/10/27(土) 18:20:230762デフォルトの名無しさん
2007/11/21(水) 09:34:41院生がよく言うグチ
「フォーマットに従えよチェックめんどクセェんだよカス」
「課題にオリジナリティなんて要らねぇんだよ」
「まーたオナレポか!」
「講義の趣旨に沿えよだりぃ・・・」
0763デフォルトの名無しさん
2007/11/26(月) 21:09:320764デフォルトの名無しさん
2007/11/26(月) 21:13:210765デフォルトの名無しさん
2007/11/26(月) 21:30:250766デフォルトの名無しさん
2007/11/26(月) 21:55:27http://www.uploda.net/cgi/uploader4/index.php?file_id=0000022859.zip
まずこのファイルを 解凍してもらうと
comb.rb,ディレクトリdataA,dataBとdataCがでてきます。
dataAとdataBには3つずつファイルがはいってます。
dataCは出力用のディレクトリです。
今このプログラムは標準入力から3つ引数あたえて処理します。
1つめ、2つめが入力のファイルをあたえると3つめの引数ででてきます。
わからないのがファイル操作で、dataAにはいっているファイルを
1つめの入力、dataBにはいってるファイルを2つめの入力とします。
1つめの入力(1ファイル)に対して2つめの入力(3ファイル)をあたえ
3つめの入力でファイル名をあたえてそのファイルをdataCにいれてほしいんで
す。
つまり1つのファイル(dataA)にたいして3つのファイル(dataB)で処理を行い
dataCディレクトリにファイルを出力してほしいんです。それを3回ということ
でdataCには9個できるわけです。Cにできるファイル名は適当でいいです。
お願いします。最近ruby全然やってなくて素人なみに忘れてしまったんで。
わかりにくければ質問してください
0767デフォルトの名無しさん
2007/11/26(月) 22:08:30ruby の前に日本語を勉強し直してくれ
0768デフォルトの名無しさん
2007/11/26(月) 22:12:31で1.16kというファイルができるとおもうんですよ。
でdataAの3つのファイルとdataBの3つのファイルかけあわせて9このファイル
をつくってほしいんです。
0769デフォルトの名無しさん
2007/11/26(月) 22:16:31Dir.glob("dataB/*").each do |data_b|
system "ruby comb.rb #
0770デフォルトの名無しさん
2007/11/26(月) 22:17:38Dir.glob("dataA/*").each do |data_a|
Dir.glob("dataB/*").each do |data_b|
system "ruby comb.rb #{data_a} #{data_b} #{data_a}___xxx___#{data_b}"
end
end
0771デフォルトの名無しさん
2007/11/26(月) 22:21:130772デフォルトの名無しさん
2007/11/26(月) 22:24:11>>770を hetare.rb という名前で保存して
以下の内容を
--ここから--
@echo off
ruby hetare.rb
copy * outputC
--ここまで--
hetare.bat という名前で保存して、hetare.batを実行する
0773デフォルトの名無しさん
2007/11/26(月) 22:28:28見事ななげやりっぷりにワラタ
0774デフォルトの名無しさん
2007/11/26(月) 22:32:240775デフォルトの名無しさん
2007/11/26(月) 22:44:03#!/bin/sh
ruby hetare.rb
cp * outputC
これでいいだろ。
0776やばす
2007/11/26(月) 22:44:57かなりぐぐったがむりぽ。。
だれか教えてくだされ。Array#maxを使うと良いらしいですが、
スーパーツンデレFラン大なので、以下が限界っす。
a = Array.new
10.times do
a.push(rand(10))
end
a.each_with_index {|x, idx|
print "[#{idx}]:#{x}\n"
}
print "最大値は#{a.max}です♪\n"
誰か丸投げ用のテンプレ作れや。
0777デフォルトの名無しさん
2007/11/26(月) 22:48:52それのどこに不満がある?
0778デフォルトの名無しさん
2007/11/26(月) 22:50:580779デフォルトの名無しさん
2007/11/26(月) 22:52:37i = 0
で三つ目の引数を
outputC/#{(i+=1).to_s}
とでもすればいいよ
0780デフォルトの名無しさん
2007/11/26(月) 22:58:070781デフォルトの名無しさん
2007/11/26(月) 22:58:11ほらよ
http://www.uploda.org/uporg1131424.txt
>f1 = File.new(file1,"rb")
>a1 = f1.read.unpack("s*")
>f1.close
a1 = File.open(file1,"rb"){|io| io.read.unpack("s*")}.map{|i| i.to_f}
ブロックで囲めばファイルクローズまでしてくれる
ややこしいので読み込んだらすぐに配列に対してmapを使って全部Floatに変えてしまえ
あとでもめる
>for i in [email protected] do @big[i] += @small[i] end
@small.length-1だろ。nil参照して落ちるぞ
>gou = Gousei.new
>gou.set(arga[0],arga[1])
>gou.gousei(arga[2])
Gousei.set(file1,file2).gousei(file2)
めんどくせぇのでメソッドチェーンで一気にやっちまえるようにクラス書き直し
0782デフォルトの名無しさん
2007/11/29(木) 19:12:43例えば、([8,5,2,3,1,4,6,7,9,0],4)という引数を与えると
[[8,5,2],[3,1,4],[6,7],[9,0]] が返るようなものです。
0783デフォルトの名無しさん
2007/11/29(木) 20:17:03無駄多いかな?
def hoge(ary, x)
ary = ary.dup
kosuu = Array.new(x,0)
i = 0
ary.each{
kosuu[i] += 1
i == (x-1) ? i=0 : i+=1
}
result = Array.new(x){Array.new}
x.times{|i|
kosuu[i].times{|j| result[i] << ary.shift }
}
result
end
0784デフォルトの名無しさん
2007/11/29(木) 21:08:12def balance_split(src, n)
dst = Array.new(n)
i = src.size%n
s = src.size/n
n.times do |m|
s.times do
dst[m] = Array.new unless dst[m]
dst[m].push src.shift
end
if i > 0
dst[m].push src.shift
i -= 1
end
end
return dst
end
p balance_split([8,5,2,3,1,4,6,7,9,0], 4) #=> [[8, 5, 2], [3, 1, 4], [6, 7, 9], [0, 33]]
0785デフォルトの名無しさん
2007/11/29(木) 21:21:25array = Array.new
10000.times{|i| array.push i}
Benchmark.bm do |x|
x.report do
balance_split(array, 4)
# hoge(array, 4)
end
end
---------------------------------------
balance_split
user system total real
0.016000 0.000000 0.016000 ( 0.016000)
hoge
user system total real
0.031000 0.000000 0.031000 ( 0.031000)
hogeはループ2回まわしてるからな・・・
0786デフォルトの名無しさん
2007/11/29(木) 21:48:390787デフォルトの名無しさん
2007/11/29(木) 21:49:30(8 5 2 3 1 4 6 7 9 0) . 4
(8) () () ()
(8) (5) () ()
(8) (5) (2) ()
(8) (5) (2) (3)
(8 5) (2) (3) (1)
(8 5) (2 3) (1) (4)
(8 5) (2 3) (1 4) (6)
(8 5) (2 3) (1 4) (6 7)
(8 5 2) (3 1) (4 6) (7 9)
(8 5 2) (3 1 4) (6 7) (9 0)
0788デフォルトの名無しさん
2007/11/29(木) 21:55:22(8 5 2 3 1 4 6 7 9 0) . 4
8 | | | <- (1,3,5)
8 | 5 | | <- (1,3,5)
8 | 5 | 2 | <- (1,3,5)
8 | 5 | 2 | 3 <- (1,3,5)
8 5 | 2 | 3 | 1 <- (2,4,6)
8 5 | 2 3 | 1 | 4 <- (2,5,7)
8 5 | 2 3 | 1 4 | 6 <- (2,5,8)
8 5 | 2 3 | 1 4 | 6 7 <- (2,5,8)
8 5 2 | 3 1 | 4 6 | 7 9 <- (3,6,9)
8 5 2 | 3 1 4 | 6 7 | 9 0 <- (3,7,10)
0789デフォルトの名無しさん
2007/11/29(木) 21:58:54それはデータ構造に無理があるか、あるいはそもそもRubyでやるべきではない事象
それを考慮する処理を考えるくらいなら内職でダイレクトメールにシール貼ってたほうが有意義
0790デフォルトの名無しさん
2007/11/29(木) 22:09:038 | 5 | | <- (1,2,2)
8 | 5 | 2 | <- (1,2,3)
8 | 5 | 2 | 3 <- (1,2,3)
8 5 | 2 | 3 | 1 <- (2,3,4)
8 5 | 2 3 | 1 | 4 <- (2,4,5)
8 5 | 2 3 | 1 4 | 6 <- (2,4,6)
8 5 | 2 3 | 1 4 | 6 7 <- (2,4,6)
8 5 2 | 3 1 | 4 6 | 7 9 <- (3,5,7)
8 5 2 | 3 1 4 | 6 7 | 9 0 <- (3,6,8)
0791デフォルトの名無しさん
2007/11/29(木) 22:18:05a = a.dup
r = []
until a.empty? do
r << a.slice!(0, a.size.quo(x).ceil)
x -= 1
end
r
end
0792デフォルトの名無しさん
2007/11/30(金) 00:09:37やればどうにでも出来るもんだな
0793782
2007/11/30(金) 03:44:01よく考えたらこれ、要は10と4が与えられた時
(3 3 2 2)を求めるアルゴリズム?
ただ分ける対象が配列になってるだけで…
既に名のあるアルゴリズムだったりして…?
0794デフォルトの名無しさん
2007/11/30(金) 03:47:030795デフォルトの名無しさん
2007/11/30(金) 06:34:140796デフォルトの名無しさん
2007/12/01(土) 03:24:16どなたか助けてください!
【以下が課題】
・単語の出現頻度(TF値)を求めるプログラムを書け。
なお、抽出元はテキストファイルとする。(a.txt)
・上記の"a.txt"の中身は何でも良い。
・データベースへの登録は特に必要としない。
単純にテキストファイルから単語の出現頻度を求めるという問題です(×_×)
テキストファイルを読み込んで頻度を求めれば良いと思うんですがよくわからず困っています。。
この際、形態素解析を行う方がbetterなんですが、時間もないので無理かと。。
とりあえず、テキストファイルの中のTF値を求めるプログラム、教えてください!お願いします!
0797デフォルトの名無しさん
2007/12/01(土) 05:13:22単語ごとに累計を求める
0798デフォルトの名無しさん
2007/12/01(土) 06:28:51面倒だし数え上げデータベースは単語をキーとするハッシュで代用しよう
data = {'単語1' => 回数1, '単語2' => 回数2, ...} みたいな感じで
ハッシュなら適当に新規作成も上書きもできるから、単語が出現したときにdata['単語1'] = data['単語1'] + 1 とすればいい
あーでもこれだとdataに'単語1'が登録されてないときは「nilは足せません例外」で止まるから何かフォローしとかないと駄目だなー
たいていテキストファイルの中身は英文でよいということになってるはずなんだが、もし日本語文が前提ということなら鬼だ
英文なら単語区切りはスペースとタブ文字とコンマとピリオドと!と?と改行とクォーテーションマーク類(の連続)でよかんべ
ハイフンの直後が改行だった場合はハイフンと改行を取り去って連結してひとつの単語とみなさなければならないが面倒だしパスするか
とかいうことを思った
0799デフォルトの名無しさん
2007/12/01(土) 07:01:42なんでもいいということだから
都合よく英語のみと解釈してプログラム書いてさっさと提出するのもよし
日本語突っ込んで一生を棒に振るのもよし
0800デフォルトの名無しさん
2007/12/01(土) 07:14:19単語「と」みなさなければならない
と
タブ文字「と」コンマ「と」ピリオド「と」
は違う単語だよな
別々に数えるべきだよな?
0801デフォルトの名無しさん
2007/12/01(土) 07:22:48形態素解析や構文解析でぐぐれ
スレの範疇を超えている
0802デフォルトの名無しさん
2007/12/01(土) 07:24:21単にString#splitを使ってやれば良いだけでは.
tf = Hash.new
File.open("a.txt"){|io| io.read}.split(/\s/).each do |word|
if tf[word]
tf[word] += 1
else
tf[word] = 1
end
end
p tf
0803デフォルトの名無しさん
2007/12/01(土) 07:25:05いや、単語に分ける話というより
ハッシュで数えちゃだめだろっていう話
0804デフォルトの名無しさん
2007/12/01(土) 07:27:180805デフォルトの名無しさん
2007/12/01(土) 07:30:32単語の品詞付けはしなくてもいいかと.
0806デフォルトの名無しさん
2007/12/01(土) 07:34:16File.open("a.txt"){|io| io.read}.split(/\s/).each {|w| tf[w] = tf[w] ? tf[w] + 1 : 1}
p tf
0807デフォルトの名無しさん
2007/12/01(土) 07:38:19は一語なんかな三語なんかな
ハイフンとって tictactoe とすると別の単語になるから困るな
0808デフォルトの名無しさん
2007/12/01(土) 10:11:37前述した課題なんですが、おれは私個人的に解きたい問題であって、決して大学の課題とかではありません。。
Rubyのプログラムを勉強しているところなので。。
議題にあがっているんですが、出来れば日本語の出現頻度をとりたいっす。
やっぱり日本語だと形態素解析は必要ですかね??
「ファイルを読み込み、日本語文書の出現頻度を調べる」、これがやりたいんです!!
0809デフォルトの名無しさん
2007/12/01(土) 10:50:15まず日本語をやりなおせ
0810デフォルトの名無しさん
2007/12/01(土) 12:47:09単語分割する一つの方法としては,漢字とひらがなとカタカナの境界を利用するのが有効だ.
実際,前述の文章を分割してみれば,
/単語分割/する/一/つの/方法/としては/,/漢字/とひらがなと/カタカナ/の/境界/を/利用/するのが/有効/だろうね/./
となってそれらしくなる.ただしこれは,仮名漢字混じり文の場合だけだ.
ちゃっともんちーのえっちゃんとちゅっちゅしたいよう
なんて文章は無理.これを分割するには,膨大な読みがなの辞書が必要だ.
ちゃっともんちー 固有名詞
えっちゃん 人名
ちゅっちゅ 擬音語
って感じのやつな.
だから1人では出来ない.
しかも時間とお金がかかる.読みの辞書は手作業で作らざるをえないからだ.
だから君のしたい事はアルゴリズムだけでは無理.
そしてここはアルゴリズムを考える場所でも辞書を作る場所でもない.
知りたかったら以下の本の1章だけでも立ち読みするのだ.
『自然言語処理−基礎と応用−』'電子情報通信学会
『自然言語処理』 岩波書店
0811デフォルトの名無しさん
2007/12/01(土) 13:09:41↑ここの ruby-chasen とか ruby-kakasi とか
ttp://mecab.sourceforge.net/bindings.html
MeCab あたりでも使っておけば?
0812デフォルトの名無しさん
2007/12/01(土) 13:14:200813デフォルトの名無しさん
2007/12/02(日) 00:58:12そしてMSの糞IMEを置き換えてくれ
0814デフォルトの名無しさん
2007/12/02(日) 16:06:310815デフォルトの名無しさん
2007/12/05(水) 11:13:58Webで以下の通り動作する住所録プログラムを組め。
・氏名、住所、郵便番号、電話番号、Eメールアドレスのデータを管理する。
・データの追加、削除、変更、表示ができる機能を持っている。
・表示には出力ボタンをセットし、クリックするとcvs形式で出力される。
Rubyのバージョンは1.8です。期限は12月7日です。よろしくお願いします。
0816デフォルトの名無しさん
2007/12/05(水) 11:45:35http://www.death-note.biz/up/img/8852.htm
0817デフォルトの名無しさん
2007/12/05(水) 11:50:090818デフォルトの名無しさん
2007/12/05(水) 22:06:50LoadError: no such file to load -- himajin
from (irb):1:in `require'
from (irb):1
from :0
と出ました。どうすればよろしいでしょうか?
0819デフォルトの名無しさん
2007/12/05(水) 22:15:33require "himajin.rb"
でできました!
ありがとうございます!
0820デフォルトの名無しさん
2007/12/07(金) 12:45:250821デフォルトの名無しさん
2007/12/14(金) 15:45:24でも、どうせ総合まとめ問題としての課題なんだろ?
こういうのは「積み上げたベースになると期待されてる既存のプログラム」も出してもらわないと、
課題の流れを完全無視したヘンなのしか作ってやれんぞ
極端な話だがRoRでゼロから作って提出しても0点だと思うし
とか期限1週間後にアドバイスしてみる
0822デフォルトの名無しさん
2007/12/14(金) 16:04:52普通これくらいは課題で出されるぞ
0823デフォルトの名無しさん
2007/12/14(金) 16:17:59今までFile#openとFile#readしか習ってないならPStoreもSQLiteも使ったら駄目だろうし
CGI.rbを習ってないならnet/httpしか使えないかもしれないし、下手したらコマンドラインでruby ./hoge.rbと実行する方法しか習ってなくて
登録と削除とファイル出力はひとつのCGIに引数で区別させるのではなく別cgiを単体のコマンドとみなして叩かないと駄目かもしれない
自作クラスの概念を習ってないなら関数的にダラダラ書かないとやっぱマズいとも思うし
0824デフォルトの名無しさん
2007/12/14(金) 16:30:00そういうのは期限内に当人に問いただせよ
相変わらずRubyの宿題募集中だが
「どんなことを習った上での課題なのか」は
こっちから聞き返す可能性があるのでそこんとこはよろしく
中学生の数学の宿題に高校の微分積分使った解答書いたら変だろ?
0825デフォルトの名無しさん
2007/12/14(金) 16:45:380826デフォルトの名無しさん
2007/12/14(金) 22:09:48フォームつきのHTMLを行き当たりばったりで書くのがめんどくさいな
設計とかきちんと考えてから作ったほうが面倒がないかもしれない
0827デフォルトの名無しさん
2007/12/15(土) 18:35:50JavaやC/C++みたいにテンプレ作るか?
[1] 課題文(含コード&リンク):()
[2] Rubyバージョン
[3] 期限: ([yyyy年mm月dd日hh:mmまで] )
[4] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
0828デフォルトの名無しさん
2007/12/15(土) 21:47:53件のは期限に対して明らかにめんどくさそうだからスルーされただけかと
0829デフォルトの名無しさん
2007/12/20(木) 01:08:19・プロンプト画面にて(プログラム実行中)複数あるテキストファイルを指定し,
ファイルの中身を出力しなさい.
この問題,教えてください!!
プロンプト画面でテキストファイルのファイル名を入力したいです.
テキストファイルは複数ある過程でお願いします.
0830デフォルトの名無しさん
2007/12/20(木) 01:12:000831デフォルトの名無しさん
2007/12/20(木) 01:20:43質問の日本語がふわふわしすぎてて萎えた。
require 'readline'
require 'shellwords'
while buf = Readline.readline('>', true)
inputs = Shellwords.shellwords(buf)
begin
break if /quit/i =~ inputs.first
while path = inputs.shift
puts File.read(path)
end
rescue => ex
puts ex.message
retry
end
end
0832デフォルトの名無しさん
2007/12/21(金) 11:54:500833デフォルトの名無しさん
2007/12/21(金) 15:32:090834デフォルトの名無しさん
2007/12/21(金) 17:46:28かわいそうに
0835デフォルトの名無しさん
2007/12/21(金) 18:02:420836デフォルトの名無しさん
2007/12/22(土) 12:14:58・1文字の変数、2項演算子+、−、*、/、()を含む式を読み込み、これを逆ポーランド記法に変換し、出力するスクリプトを作成せよ。
ただし、入力される式の構文は正しいものと仮定する(すなわち、構文チェックはしなくてよい)
この問題お願いします。
0837デフォルトの名無しさん
2007/12/22(土) 13:04:20step2. 構文木を後順走査でなぞると逆ポーランド記法になる
0838デフォルトの名無しさん
2007/12/22(土) 13:08:29…アドバイスとしては正しいな
それのひとつ前の問題でどんなことを習ったのかが気になる
0839デフォルトの名無しさん
2007/12/22(土) 13:31:47「構文解析せず」に逆ポ記に「変換」するのか・・・?
うーむ・・・
0840デフォルトの名無しさん
2007/12/22(土) 13:33:040841デフォルトの名無しさん
2007/12/22(土) 13:35:07a * / b 演算子だけが続けて現れてる
のような変な入力のことは想定しなくていい、ということだろうね。
0842デフォルトの名無しさん
2007/12/22(土) 13:35:16構文解析に失敗した場合に、綺麗にエラーを出さないで変な挙動をしても良い、ってことじゃないだろうか。
0843デフォルトの名無しさん
2007/12/22(土) 13:36:310844デフォルトの名無しさん
2007/12/22(土) 13:39:380845デフォルトの名無しさん
2007/12/22(土) 14:15:21(例)
>(a+b*c)+d/(e-f)
abc*+def-/+
0846デフォルトの名無しさん
2007/12/22(土) 14:49:42このフローチャート見て適当にやったらできた
0847デフォルトの名無しさん
2007/12/22(土) 14:51:06おもしろそうだから
0848デフォルトの名無しさん
2007/12/22(土) 15:18:470849デフォルトの名無しさん
2007/12/22(土) 22:00:52Rubyist Magazine - 0015 号 編集後記
http://jp.rubyist.net/magazine/?0015-EditorsNote
これか
golferのみんな頑張りすぎだろw
0850デフォルトの名無しさん
2007/12/22(土) 22:03:59http://d.hatena.ne.jp/nitoyon/20071207/ruby_abc2
↑
UTF-8で、"笑" は、笑にして、変数にする。
問題は、.0だ。
method_missingあたりで、できないものか?
構文解析ではじかれる?(試せよ
0851デフォルトの名無しさん
2007/12/22(土) 22:27:220852デフォルトの名無しさん
2007/12/24(月) 03:03:44何かのライブラリ::(str)
ってゆーソースがあるんですけど、(ちゃんとstrに対して処理してくれました。)
このstrに対する処理をファイル(abc.txtとかのテキストファイル)
にさせたいのですが、どう書けばいいでしょうか?
ちなみに
ruby ファイル名
で実行したら、読みこませたいファイル名を入力したら読み込んでライブラリの処理を行わせるようにしたいです。
0853デフォルトの名無しさん
2007/12/24(月) 03:09:06Fileオブジェクトのopenメソッドとreadメソッドかな
あと、実行時の引数に指定された文字列をどうにかしたい場合はARGVという組み込み定数に関する知識が必要
宿題スレなのでそれっぽくアドバイスしてみた
0854デフォルトの名無しさん
2007/12/24(月) 03:14:10puts s
end
n(ARGF.gets)
0855852
2007/12/25(火) 14:09:06みなさんありがとうございました。
0856デフォルトの名無しさん
2007/12/26(水) 17:20:200857デフォルトの名無しさん
2007/12/26(水) 18:22:41「Rubyで簡単なデータベースを作れ」という宿題です。ハッシュを利用して作れとのことでした。.txtを読み込んで表示までは簡単だったのですが、.txtに書き込むことが出来なくて悩んでます。クラスを使うのかなと思って色々試してますが、出来ません。
何かいい方法ないでしょうか。よろしくお願いします。
0858デフォルトの名無しさん
2007/12/26(水) 18:29:00きっと、テキストファイルに書き込むときにも同じように書き込まないといけないはずだから
0859デフォルトの名無しさん
2007/12/26(水) 21:31:06イメージでは…
人間 22 A 文章
犬 10 A 文章
虫 1 B 文章
と書いたテキストから、検索してマッチした行をとりだす。または、テキストに新しく加える。
検索して取り出すか、テキストに書き込むか、プログラムを使う人が決められるように作ろうとしてます。
実行すると
検索するときは"a"、データに加えるときは"b"を入力してください。…
という感じです。
検索だけ、加えるだけで上手く行ったのですが、二つを合わせると上手くいきません…アドバイス、またはプログラムの例をお願いします。よろしくお願いします。
0860デフォルトの名無しさん
2007/12/26(水) 21:47:410861デフォルトの名無しさん
2007/12/26(水) 22:09:46「氏名で検索して血液型と年齢と住所を表示あるいは追加訂正できること」とかそういう
どんなデータを格納するかも宿題として指定されてないの?
今までRubyでどこまで勉強したのかも気にはなるが
0862デフォルトの名無しさん
2007/12/26(水) 23:10:04課題に沿わないのを目見当で作って提出したらバレると思う
0863デフォルトの名無しさん
2007/12/27(木) 01:11:220864デフォルトの名無しさん
2007/12/27(木) 12:08:23…自由です。例とかはありません。ハッシュを勉強して、クラスも勉強して…自由課題。使用言語はRuby。なんでもいいからデータベース。検索、追加できるように。とだけ言われました。
なのでどうすればいいのか…。イメージするので精一杯で…本当にすみません。
よろしくお願いします。
0865デフォルトの名無しさん
2007/12/27(木) 12:38:38「Rubyは学びやすいから独学でデータベースもどき作って見せてみて」みたいな
いや、Hashを勉強しろと言われるレベル(つまり基本的なHashをロクに学んでない)と
「データベースっぽいもの作れ」との間にはかなり習熟レベル上の溝があるようにも思うんだが
とりあえず、ファイル読み込みや保存のことはひとまず忘れろ。面倒だから。
スクリプトの最初で3つくらい自前で詳細データをデータベース変数に入れとくようにして作り始めるのが吉。
で、もしそれはできている(データベース用変数への追加や削除や変更はできている)のなら、ファイルへの保存はPStoreを使うといい。
変数を「そのまんま」保存して「そのまんま」読み込めるから。
以下のスクリプトを連続で実行すると前回実行時の結果の配列の末尾に現在時刻がどんどん追加されていく
require 'pstore'
NOW = Time.now.to_s # 今の時刻
DB_PATH = 'timelog.pstore' # 保存用ファイルのパス
timelog = Array.new # データベース用変数
if FileTest.exist?(DB_PATH) then
PStore.new(DB_PATH).transaction{|db|
timelog.replace(db['timelog']) # 保存用ファイルが存在した場合ファイルのデータベース内容で置き換える
}
end
timelog.push(NOW) # データベース用変数に末尾に今の時刻を追加
puts timelog # データベース内容を表示してみる
PStore.new(DB_PATH).transaction{|db|
db['timelog'] = timelog # 「timelog」という名前でtimelogを保存
}
0866デフォルトの名無しさん
2007/12/27(木) 20:33:51ある学生の全履修科目の成績から評定平均を求める関数的メソッドを定義せよ。また、この関数的メソッドを利用して
全学年の成績ファイル(出席番号順)を読み込み、各学生の評定平均を求め、成績順位リスト(評定平均順)を出力するスクリプトを作成せよ。
ただし、成績ファイルの各行は次のような形式とする。
出席番号 氏名 科目名1:評価1 , 科目名2:評価2 ......
申し訳ありませんがこれもお願いできないでしょうか
0867デフォルトの名無しさん
2007/12/27(木) 20:38:210868デフォルトの名無しさん
2007/12/27(木) 20:44:22例えば
英語3 数学 4国語 5理科 5社会3
のときは(3+4+2+5+3)/5で4.0となります。小数点第1位まで求めます
こんな説明でいいでしょうか
0869デフォルトの名無しさん
2007/12/27(木) 20:47:16質問者には何書いてるかわからないスクリプトが返ってくるぞ
評定平均は学校用語だけど、一人の学生の全科目の5段階評価の算術平均(足して科目数で割る)でいいよね
あと、具体的な成績ファイルってないの?
出席番号は数字なのかどうかとか全角なのかどうかとか
氏名は空白で姓名を区切ってはいないことが確定なのかとか
科目と評価の繋ぎは全角の:で間違いないのかとか
出席番号や氏名を区切ってるものは全角空白1個でいいのかとか
科目を羅列するのに使われてるのは半角コンマだけどこれでいいのかとか
評価は全角整数なのか半角整数なのかとか
そういうことが気になって仕方がない(というかわからないとファイル内容から読み取れない)んだけど
そのへんはどうよ
0870デフォルトの名無しさん
2007/12/27(木) 20:50:29成績ファイルは見栄えが似てさえいれば自前で勝手に作っていいのかな?
0871デフォルトの名無しさん
2007/12/27(木) 20:56:52評定平均はそれでいいです。
すいません、具体的な成績ファイルはありません
成績ファイルも自分で作成です。
よろしかったら全部半角でお願いします。
0872デフォルトの名無しさん
2007/12/27(木) 20:57:52まさにそのとおりです。
0873デフォルトの名無しさん
2007/12/27(木) 21:00:460874デフォルトの名無しさん
2007/12/27(木) 21:03:08以下から授業で見たことのある書き方を全て選べ
File.open
File.read
open
each_line
if /何か/ =~ 変数
配列変数[数字]
scan
split
push
sort
sort_by
puts
>>873
暇潰しに丸投げしてくれってスレでもあるわけだしお互い様かと
0875デフォルトの名無しさん
2007/12/27(木) 21:05:57File.open
File.read
open
each_line
if /何か/ =~ 変数
配列変数[数字]
scan
split
push
sort
sort_by
puts
全部見たことあります。
0876デフォルトの名無しさん
2007/12/27(木) 21:47:330001 相田健介 国語:3 , 数学:3 , 理科:5 , 社会:2 , 英語:3
0002 飯山健吾 国語:2 , 数学:5 , 理科:4 , 社会:2 , 英語:2
0003 宇井修 国語:5 , 数学:3 , 理科:3 , 社会:4 , 英語:4
0004 江川太助 国語:4 , 数学:4 , 理科:3 , 社会:2 , 英語:3
0005 大井川泰幸 国語:5 , 数学:5 , 理科:5 , 社会:5 , 英語:5
# kadai.rb
def heikin(seiseki)
sum = 0.0
seiseki.each{|i|
sum = sum + i.to_f
}
return (sum / 5)
end
data = Hash.new
File.open('seiseki.txt').each_line{|line|
line.scan(/(.+?)\s+(.+?)\s+(.+)/){
no = $1
seiseki = $3.scan(/:(\d)/).flatten
data[no] = [line,seiseki]
}
}
list = data.sort_by{|a| heikin(a[1][1]) }.reverse
list.each{|e|
puts e[1][0]
}
0877デフォルトの名無しさん
2007/12/27(木) 21:57:44実行すると
0005 大井川泰幸 国語:5 , 数学:5 , 理科:5 , 社会:5 , 英語:5
0003 宇井修 国語:5 , 数学:3 , 理科:3 , 社会:4 , 英語:4
0004 江川太助 国語:4 , 数学:4 , 理科:3 , 社会:2 , 英語:3
0001 相田健介 国語:3 , 数学:3 , 理科:5 , 社会:2 , 英語:3
0002 飯山健吾 国語:2 , 数学:5 , 理科:4 , 社会:2 , 英語:2
ってなって出席番号 氏名 の後に評定平均がでません
0878デフォルトの名無しさん
2007/12/27(木) 22:02:42そりゃ問題に評定平均も出力しろなんてことは一言も書いてなかったからな
最初のリストを並べ変えるだけだと思ってプログラム作ったもの
あーじゃあひとまずパス
他の人か気紛れに期待しとけ
期限はいつまで?
0879デフォルトの名無しさん
2007/12/27(木) 22:04:18期限は1月10日までです
0880デフォルトの名無しさん
2007/12/28(金) 15:44:12書いてみたよ。
名前のあとに、()付きで平均をいれた。
そのままでもよさそうだが、一応小数点第一位までに。
def heikin (l)
l.inject(0.0) {|r, v| r + v } / l.size
end
num_name = /\A(\w+\s+\w+)/
ARGF.readlines.map do
|line|
next unless hyouka = line.match(/#{num_name}\s+(.+)\Z/).to_a[2]
[heikin(hyouka.scan(/\w+:(\d+)/).map {|it,| it.to_i }), line]
end.
sort_by {|v,| v } .
map {|h, l| l.sub(num_name, "\\1 (#{(h * 10).floor / 10.0 })") } . # <<
reverse .
display
0881デフォルトの名無しさん
2007/12/28(金) 16:54:130882デフォルトの名無しさん
2007/12/28(金) 21:13:47実は大学の課題です。
あまりRubyについて勉強してないんですが、単位が欲しいならやってこいと。
Hashについては、格納の仕方と正規表現での取り出し方しか学んでません。
1000以上のデータを格納し、追加出来て、取り出せるものに。
データは3つ以上の要素を含むものに。
んで、できたらCGIにしてね^^とのことでした。
期限は1月10日までです。
大学のPCを使用しているので、29〜1月3日まで使用できないです。
自宅PCはwindowsXPなので、rubyとRDEを入れて自宅でやろうとしましたが、
大学の環境(unix,emacs,kterm)と違いすぎるので断念しました。
教えていただいた内容を元に、やってみますありがとうございます。
0883デフォルトの名無しさん
2007/12/28(金) 21:33:100884デフォルトの名無しさん
2007/12/28(金) 21:44:030885デフォルトの名無しさん
2007/12/28(金) 21:53:11きっと
0886デフォルトの名無しさん
2007/12/28(金) 21:57:08やってみたんですが、XPでruby使う環境を勉強して時間をかけるより、
大学に行ってハッシュとかクラスを使ったプログラムを書いたほうが、
いいのかなと思いました。
0887デフォルトの名無しさん
2007/12/28(金) 22:12:57これダウンロードして実行するだけでRuby環境が入るぞ(もちろん他の方法もあるが)
http://rubyforge.org/frs/download.php/29263/ruby186-26.exe
0888デフォルトの名無しさん
2007/12/28(金) 22:58:07ありがとうございます。
上記をダウンロードして、はろーわーど表示させたのですが、
ファイル保存やろうとして上手くいかなかったのでやめました。
emacsとktermに近い感じでプログラミングすることはできるのでしょうか。
すみませんが、教えてください。
ぐぐッて出た、RDEとメモ帳でどちらもやってみました。
一番使いやすいと感じたものを教えてください。
お手数ですが、よろしくお願いします。
0889デフォルトの名無しさん
2007/12/28(金) 23:49:03コマンドプロンプトを開いて ruby -v は打てるのか?
0890デフォルトの名無しさん
2007/12/28(金) 23:50:54すいません、実行しても何も反応が返ってこないんですけど
どうすればいいでしょうか?
0891デフォルトの名無しさん
2007/12/28(金) 23:54:19あちこちにあるピリオドは画面の汚れじゃないぞ。
0892デフォルトの名無しさん
2007/12/29(土) 00:01:27実行時に成績データの入ったファイル指定すればいいんじゃね
ruby kadai.rb seiseki.txt
0893デフォルトの名無しさん
2007/12/29(土) 00:07:00コピー&ペーストで実行したんで写し間違いとかはないとおもうんですけど
0894デフォルトの名無しさん
2007/12/29(土) 00:29:530895デフォルトの名無しさん
2007/12/29(土) 00:48:09たびたびすいません。今度は
kadai.rb:7:in `sort_by': undefined method `<=>' for nil:NilClass (NoMethodError)
from kadai3rb:7
となってしまいます
0896デフォルトの名無しさん
2007/12/29(土) 03:41:34すまん。
文字コード指定するっていうのを書くの忘れてた。
ruby -Ku kadai.rb seiseki.txt
として動かしてくれ。
-Ku のところは成績ファイルの文字コードで、
UTF-8 なら -Ku
SJIS なら -Ks
EUC なら -Ke
ね。
少し変なとこあったので1行追加しといた。
def heikin (l)
l.inject(0.0) {|r, v| r + v } / l.size
end
num_name = /\A(\w+\s+\w+)/
ARGF.readlines.map do
|line|
next unless hyouka = line.match(/#{num_name}\s+(.+)\Z/).to_a[2]
[heikin(hyouka.scan(/\w+:(\d+)/).map {|it,| it.to_i }), line]
end.
compact .
sort_by {|v,| v } .
map {|h, l| l.sub(num_name, "\\1 (#{(h * 10).floor / 10.0 })") } . # <<
reverse .
display
0897デフォルトの名無しさん
2007/12/29(土) 03:48:20cygwinと、Poderosa(もしくは、putty)いれれば解決
emacsは、どうせ、使いこなしてないだろうから、
xyzzyと、ruby-modeで代用(ならんかw
0898デフォルトの名無しさん
2007/12/29(土) 05:33:480899デフォルトの名無しさん
2007/12/29(土) 06:37:34というかオナニーだw
0900デフォルトの名無しさん
2007/12/29(土) 12:11:52本当にありがとうございました
0901デフォルトの名無しさん
2007/12/29(土) 12:15:050902デフォルトの名無しさん
2007/12/29(土) 13:47:08cygwinとputtyをどりあえずダウンロードして使ってみます。
助言ありがとうございます。
0903デフォルトの名無しさん
2007/12/29(土) 13:57:530904デフォルトの名無しさん
2007/12/29(土) 14:02:18ここ難しいと思う
というかじっくり本腰入れて読み解かないと何やってんだかさっぱりわからん(w
0905デフォルトの名無しさん
2007/12/29(土) 16:16:400906デフォルトの名無しさん
2007/12/29(土) 23:57:06多分大丈夫です
0907デフォルトの名無しさん
2007/12/30(日) 00:00:42その先生がRubyを多少なりとも理解していれば理解しているほど、このスクリプトは奇妙だと感じるはず
君がこれに何も感じないのは単に君がRubyを知らないからに過ぎない
0908デフォルトの名無しさん
2007/12/30(日) 00:06:29>>1「チェーンコンボです」
0909デフォルトの名無しさん
2007/12/30(日) 00:24:48>>906「コンボです。」
先生「え、コンボ?」
>>906「はい。コンボです。読みにくさでプログラマに大ダメージを与えます。」
先生「・・・で、そのコンボは習熟度を測る課題提出で何のメリットがあると考えたのですか」
>>906「はい。エディタが破壊されてもコマンドラインから1行で書けます。」
先生「いや、エディタを使わない授業はありません。それに課題はファイルで提出するのですよね」
>>906「でも、Perlにも勝てますよ。」
先生「いや、勝つとかそういう問題じゃなくてですね・・・」
0910デフォルトの名無しさん
2007/12/30(日) 01:25:22質問者関係ないのだが、
seiseki,txt入れると、妙な出力になるんだが、仕様?
0005 大井川泰幸 (5.0) 国語:5 , 数学:5 , 理科:5 , 社会:5 , 英語:50003 宇井修 (3.8) 国語:5 , 数学:3 , 理科:3 , 社会:4 , 英語:4
0004 江川太助 (3.2) 国語:4 , 数学:4 , 理科:3 , 社会:2 , 英語:3
0001 相田健介 (3.2) 国語:3 , 数学:3 , 理科:5 , 社会:2 , 英語:3
0002 飯山健吾 (3.0) 国語:2 , 数学:5 , 理科:4 , 社会:2 , 英語:2
reverse時に、おかしくなってるっぽいんだが・・・
> ruby -v
ruby 1.8.6 (2007-09-24 patchlevel 111) [i386-mswin32]
0911デフォルトの名無しさん
2007/12/30(日) 01:27:17seiseki.txtに最後改行いれてなかたwwww
0912デフォルトの名無しさん
2007/12/30(日) 01:52:13def heikin (l)
l.inject(0.0) {|r, v| r + v } / l.size
end
num_name = /\A(\w+\s+\w+)/
ARGF.readlines.map do
|line|
next unless hyouka = line.match(/#{num_name}\s+(.+)\Z/).to_a[2]
a = [heikin(hyouka.scan(/\w+:(\d+)/).map {|it,| it.to_i }), line]
end.
compact .
sort_by {|v,| v } .
map {|h, l| l.sub(num_name, "\\1 (#{(h * 10).floor / 10.0 })") } . # <<
reverse .
each { require 'enumerator' } .
enum_for(:each_with_index).map {|v, i| v } .
display
0913デフォルトの名無しさん
2007/12/30(日) 01:56:520914デフォルトの名無しさん
2007/12/30(日) 02:02:18てか問題出した人は自分で実際に作ってないんじゃねーかと思えるアンバランスさだ
0915デフォルトの名無しさん
2007/12/30(日) 02:37:18添削希望
def heikin (l)
l.inject(0.0) {|r, v| r + v } / l.size
end
num_name = /\A(\w+\s+\w+)/
ARGF.readlines.map do
|line|
next unless hyouka = line.match(/#{num_name}\s+(.+)\Z/).to_a[2]
a = [heikin(hyouka.scan(/\w+:(\d+)/).map {|it,| it.to_i }), line]
end.
compact .
sort_by {|v,| v } .
map {|h, l| l.sub(num_name, "\\1 (#{(h * 10).floor / 10.0 })") } . # <<
reverse .
each { require 'enumerator' } .
enum_for(:each_with_index).map {|v, i| [i, v] } .
flatten .
select {|s| s.class.to_s.hex <= 0 } .
display
0916デフォルトの名無しさん
2007/12/30(日) 02:51:35本人か? 本人なら目を覚ませ
0917デフォルトの名無しさん
2007/12/30(日) 03:11:58お前の発言の意味のがわからない
0918デフォルトの名無しさん
2007/12/30(日) 03:56:48sum = 0.0
seiseki.each{|s|
sum = sum + s.to_f
}
return (sum / seiseki.size)
end
list = Hash.new
File.open('seiseki.txt').each_line{|line|
line.scan(/\A(\d+?)\s+(.+?)\s+国語:(\d).+?数学:(\d).+?理科:(\d).+?社会:(\d).+?英語:(\d)\s.?\Z/e){
seiseki = [$3, $4, $5, $6, $7]
list[no] = {'出席番号' => $1, '氏名' => $2, '成績' => seiseki, '評定平均' => heikin(seiseki)}
}
}
ranking = list.keys.sort_by{|no| list[no]['評定平均']}.reverse
ranking.each{|no|
data = list[no]
a = data['成績']
puts "#{data['出席番号']}\t#{data['氏名']}\t評定平均:#{data['評定平均']}\t国語:#{a[0]} , 数学:#{a[1]} , 理科:#{a[2]} , 社会:#{a[3]} , 英語:#{a[4]}"
}
0919918
2007/12/30(日) 04:09:32おそらく現行で一番素直な解法だと思う…というかまともなのの1つ目ってだけか
もしコメント求められたら
「大きくなりうるデータリスト自体は最後の表示に使うだけで一切並べないのがポイントです」
とか発表しとけ
スクリプトと同じディレクトリに seiseki.txt というファイルが必要なので用意すること
0920デフォルトの名無しさん
2007/12/30(日) 04:11:570921デフォルトの名無しさん
2007/12/30(日) 04:14:500922デフォルトの名無しさん
2007/12/30(日) 06:45:250923デフォルトの名無しさん
2007/12/30(日) 11:25:09どなたかこれお願いできないでしょうか
問題
配列とハッシュを利用して、英文ファイルを読み込み、単語の頻度表を出力するスクリプトを作成せよ
ただし、必要ならば、1行のテキストを単語の配列に分解するのに、split()メソッドを使ってもよい。
また、単語を出現回数順に並べ替えるのに、sort()メソッドを使ってもよい
お願いします
0924デフォルトの名無しさん
2007/12/30(日) 11:30:29おたくの学校は「宿題は2ちゃんねるで聞きなさい」って教育してんのか・・・w?
0925デフォルトの名無しさん
2007/12/30(日) 11:44:48ARGF.readlines.each do |line|
words = line.split
words.each do |word|
count[word] = count[word] + 1
end
end
sortlist = count.sort{|a, b| a[1] <=> b[1]}
sortlist.each do |key, value|
puts "#{key}: #{value}"
end
0926デフォルトの名無しさん
2007/12/30(日) 11:53:150927デフォルトの名無しさん
2007/12/30(日) 12:13:59tf = Hash.new
words = ARGF.read.scan(/[a-z]+/i)
words.each{ |word| tf[word] = tf[word] ? tf[word] + 1 : 1 }
p tf.to_a.sort{|a, b| b[1] <=> a[1]}
0928デフォルトの名無しさん
2007/12/30(日) 12:56:55その追加分ってなんの意味があるの?
0929デフォルトの名無しさん
2007/12/30(日) 18:54:200930デフォルトの名無しさん
2007/12/31(月) 07:32:36なんか、デジャブwww
定期的にこの課題でてくるな
0931デフォルトの名無しさん
2007/12/31(月) 07:35:44なんかの本に例題として載ってるのかな?
0932デフォルトの名無しさん
2007/12/31(月) 07:36:20この発想はなかったわw
0933デフォルトの名無しさん
2007/12/31(月) 07:39:33たのしいRuby
0934デフォルトの名無しさん
2007/12/31(月) 07:53:56このスレ内では>>806が発出なんだけど面白いので参考にさせてもらった
ハッシュつかって数えるってのは結構ありがちなんで使いどころは多そう
0935デフォルトの名無しさん
2007/12/31(月) 15:16:31ハッシュ使うなら、初期値を設定してやるとシンプルになると思う。
tf = Hash.new(0)
words.each {|word| tf[word] += 1 }
0936デフォルトの名無しさん
2007/12/31(月) 15:20:30words = ARGF.read.scan(/[a-z]+/i)
words.each {|word| tf[word] += 1 }
p tf.to_a.sort{|a, b| b[1] <=> a[1]}
どんどんコンパクトになるな
RubyかわいいよRuby
よい御年を
0937デフォルトの名無しさん
2007/12/31(月) 15:26:13デフォルト値が [] みたいな場合はHash.new {|h,k| h[k] = [] } と
しないといかんのよね。
0938デフォルトの名無しさん
2007/12/31(月) 22:02:22sortの所は
tf.sort_by{|k, v| -v }
で行けるな
0939デフォルトの名無しさん
2007/12/31(月) 22:21:11tf, w = Hash(0), 0
ARGF.read.scan(/[a-z]/i){|m| tf[m] += 1 }
puts tf.sort_by{|h, k|
w = k.length if k.length > w
-v
}.map{|h, k| "#{k.ljust(w)}\t#{v}" }
0940デフォルトの名無しさん
2008/01/01(火) 23:29:53#! /usr/bin/goruby
t=H.ne(w=0)
A.re.sc(/[a-z]+/i){|m|t[m]+=1}
puts t.s_b{|k,v|w=[k.le,w].max;[-v,k]}.m{|k,v|"#{k.lj(w)}\t#{v}"}
0941デフォルトの名無しさん
2008/01/01(火) 23:33:580942デフォルトの名無しさん
2008/01/02(水) 02:09:290943デフォルトの名無しさん
2008/01/03(木) 13:23:22問題
英文ファイルを読み込み、60文字の行(ただし、単語が2行にまたがってはならない)に分割して出力するスクリプトを作成せよ。
このとき、もし余裕があれば(最後の行を除く)各行の単語の感覚を調整して右端を整えるようにせよ。
お願いします
0944デフォルトの名無しさん
2008/01/03(木) 13:53:28授業で使ったことのあるメソッドとか事前に明示しないと提出に耐えないようなの出てくるぞ
奴らはこのスレを理解せずに自分のオナニーにしか使ってない
0945デフォルトの名無しさん
2008/01/03(木) 14:03:230946デフォルトの名無しさん
2008/01/03(木) 14:30:010947デフォルトの名無しさん
2008/01/03(木) 15:10:050948デフォルトの名無しさん
2008/01/03(木) 17:30:550949デフォルトの名無しさん
2008/01/03(木) 17:31:260950デフォルトの名無しさん
2008/01/03(木) 21:18:41バカ発見
0951943
2008/01/03(木) 23:30:30Stringクラスやsprintfメソッドといったあたりです
0952デフォルトの名無しさん
2008/01/05(土) 03:33:39もともと、Golfするスレだからなw
>>945
ってそうそうそれかいwww
0953デフォルトの名無しさん
2008/01/05(土) 11:03:18違う
0954デフォルトの名無しさん
2008/01/06(日) 12:51:14同じスクリプトが2つとしてできない
>>943
まだ作ってなくて提出期限がまだならどこまで考えたのか言ってみ
それにあわせて作る(人が出るかもしれない)から
英文から単語単位でどうにかするためにはまずどう考えた?
60文字を超すってどういうことだろう?
単語が切れてはならない場合どうするのが妥当だと思う?
単語の間隔を調整するためにはどういう風に処理すればうまくいきそう?
0955デフォルトの名無しさん
2008/01/07(月) 12:34:55あくまで、ある意味で、だが
0956デフォルトの名無しさん
2008/01/13(日) 01:42:00氏名で検索して血液型と年齢と体重と身長を表示し、追加訂正でき、
身長と体重からBMI値も表示されるようにしなさい。
という課題です。
テキストは自分で作ってかまわないです。
よろしくお願いします。
0957デフォルトの名無しさん
2008/01/13(日) 01:53:42>>956
この手の課題はうんこするほど見てきたので疑問がある
> 検索して
どうやって検索することを課題では期待してる?(それ以前の課題では何をやった?)
コマンドライン引数から?
「氏名を入力してください」っていうプロンプトを自前で出して入力?
> 追加訂正でき
追加ってどうやるんだ?
データベース追加用のスクリプトを別途作って起動? コマンドライン引数で指定?
それともメニューを作って「1:検索 2:追加 3:削除」とか表示して最初に1文字選ぶ?
訂正って簡単に言うが訂正って何よ?
項目を選んで訂正? それとも全欄再入力させて上書きしてもいい?
あと、データは外部ファイルに保存することを期待されてると思ってよい?
その外部ファイルはテキストファイルでなければならないという制約はある?
0958デフォルトの名無しさん
2008/01/13(日) 01:58:580959957
2008/01/13(日) 02:02:17それはありえないから
語弊はあるけど、プログラムは小難しく書こうと思えばどこまでも小難しくできる
君が明らかに書けそうにないシロモノを提出しても不審がられるだけだろ?
これまでの授業聞いてもやもやーっとでも思いついたものがあって欲しい
それを伝えてくれればだいたいそんな感じで作る人が現れるかもしれない
本当はこれまで習ったメソッドやモジュールを教えてくれれば一発なんだけど
>>958
どうせ一人しかアクセスしないだろうしPStoreでも30分くらいでなんとかなりそう
0960デフォルトの名無しさん
2008/01/13(日) 02:52:190961デフォルトの名無しさん
2008/01/13(日) 03:43:42同じ事やってそうなexifの見たけど、さっぱり。
0962デフォルトの名無しさん
2008/01/13(日) 04:24:51MENU = '1:search 2:add 3:edit 0:save&exit 9:quit'
TABLE = ['name','age','height','weight','blood']
DBFILE = './data.csv'
def bmi(datum)
return datum[3].to_f / (datum[2].to_f/100) / (datum[2].to_f/100)
end
def search
puts 'name? (just enter: view all)'
name = Regexp.new(gets.chomp)
name = /.+/ if name == //
@data.each do |id,datum|
if datum[0] =~ name then
datum.each_with_index{|e,i| puts "#{TABLE[i]}:#{e}"}
puts "BMI:#{"%0.1f" % bmi(datum)}"
end
end
end
def add
new = []
TABLE.each_with_index do |label,i|
puts "#{label}?"
new[i] = gets.chomp
end
@data[@data.size + 1] = new
end
# 続く
0963デフォルトの名無しさん
2008/01/13(日) 04:25:55def edit
id = get_id_prompt
old = @data[id]
new = []
TABLE.each_with_index do |label,i|
puts "new #{label}? (default: #{old[i]})"
input = gets.chomp
if input.empty? then
new[i] = old[i]
else
new[i] = input
end
end
@data[id] = new
end
def save
File.open(DBFILE,'w'){|f|
@data.each do |id,datum|
f.puts datum.join(',')
end
}
end
# 続く
0964デフォルトの名無しさん
2008/01/13(日) 04:28:19@data = {}
File.open(DBFILE).readlines.each_with_index do |line,i|
a = line.chomp.split(',')
@data[i] = [a[0],a[1],a[2],a[3],a[4]]
end
puts MENU
while choise = gets.chomp do
case choise.to_i
when 0; save; exit
when 1; search
when 2; add
when 3; edit
when 9; exit
else
# do nothing
end
puts MENU
end
# ===== 終了 =====
# 以下 同ディレクトリに置く data.csv
山田太郎,23,171,81,A
山田次郎,22,164,68,O
佐藤大助,31,160,77,A
山下花子,25,162,51,AB
西表ウメ,77,135,43,O
0965デフォルトの名無しさん
2008/01/13(日) 04:33:26ら作るのえらい長くなって俺涙目
あまり妙なことはしてないので授業次第では提出に堪えるものではあると思う
あ、入力する文字コードとスクリプトの文字コードとcsvの文字コードは統一しておかないと化けるよ
0966デフォルトの名無しさん
2008/01/13(日) 05:27:47# 追加訂正 : update.rb 山田太郎 A 25 65 175
require 'pstore'
PStore.new('person.db').transaction {|db| db[ARGV[0]] = ARGV }
# 検索表示 : display.rb 山田太郎
require 'pstore'
Columns = ['氏名','血液型','年齢','体重','身長']
PStore.new('person.db').transaction do |db|
param = db[ARGV[0]]
Columns.each_with_index {|c,i| puts c + ' : ' + param[i] }
w,h = (param[3].to_f),(param[4].to_f/100)
puts 'BMI : %0.1f'%[w/(h*h)]
end
0967デフォルトの名無しさん
2008/01/13(日) 06:46:420968デフォルトの名無しさん
2008/01/13(日) 06:49:480969デフォルトの名無しさん
2008/01/13(日) 07:03:28http://pc11.2ch.net/test/read.cgi/tech/1200175247/
0970デフォルトの名無しさん
2008/01/13(日) 11:07:150971デフォルトの名無しさん
2008/01/13(日) 11:13:34複数人が同時にアクセスするようになると早晩破綻するが
>>966はこれはこれでマルもらえそうないろいろ問題ありそうな微妙な立ち位置だけどな
0972デフォルトの名無しさん
2008/01/13(日) 20:17:43言葉が足りなくてすみません。
検索はコマンドライン引数から「氏名を入力してください」っていうプロンプトを自前で出して入力。
追加訂正はメニューを作って「1:検索 2:追加 3:削除」とか表示して最初に1文字選ぶ。
訂正内容は全欄再入力させて上書きでお願いします。
データは外部ファイルに保存。で、テキストファイルという制約ありです。
>>959
見たことあるメソッドとモジュールは
File.open
File.read
open
if /何か/ =~ 変数
配列変数[数字]
scan
size
sort
sort_by
puts
hash です。
kojin.txt
山田太郎 A 35 177 75
鈴木花子 B 29 152 48
佐藤次郎 O 13 149 42
斉藤裕子 AB 21 167 65
橘 祐一郎 O 40 181 72
テキストはこんな感じでおねがいします。
よろしくお願い致します。
0973デフォルトの名無しさん
2008/01/13(日) 20:39:350974デフォルトの名無しさん
2008/01/13(日) 21:01:26>テキストはこんな感じでおねがいします。
区切り文字(セパレータ)は全角スペースでいいのか?
「橘 祐一郎」なんかこれも姓名で区切られちゃうぞ?
ほんとにいいのか?
0975デフォルトの名無しさん
2008/01/13(日) 21:06:15しっぽから処理して残りを名前にすればOK
0976デフォルトの名無しさん
2008/01/13(日) 21:13:05全角英字の前までマッチさせれば桶
ってかタブ区切りのつもりでいいのかね
ってかそれこそ既存のコンマ区切りでじゅうぶん用が足りるんじゃ
0977デフォルトの名無しさん
2008/01/13(日) 21:47:390978デフォルトの名無しさん
2008/01/13(日) 21:48:440979デフォルトの名無しさん
2008/01/13(日) 21:52:53まあねえ
小数がありえるくらいは自然に対応していいよね
>>978
無限のバリエーションに対応しないといけなくなって破綻するぞ
課題でそうと指定されてない限りはこういうのは決め打ちでいい
0980デフォルトの名無しさん
2008/01/13(日) 21:55:390981デフォルトの名無しさん
2008/01/13(日) 21:58:39その次は「空エントリーの扱いどうしよう」
0982デフォルトの名無しさん
2008/01/14(月) 00:30:080983デフォルトの名無しさん
2008/01/14(月) 03:01:17f.seek(188)
buf = f.read(4)
p buf
ちゃんとファイルぐらい自力で開いてくれ(w
0984デフォルトの名無しさん
2008/01/14(月) 05:12:50> テキストはこんな感じでおねがいします。
ってのを最大限好意的に解釈して、以下独自仕様
・氏名以外の値に全角文字使用不可。
・データは氏名、血液型、年齢、身長、体重を空白区切り、一行で入力。
・氏名は氏、名に分割されない。間に空白等あれば、それも氏名に含む。
・血液型は A B O AB のみ入力値として認める。
・年齢、身長、体重は数値のみ入力値として認める。
・入力したデータは自動的には保存されない事に注意。
以上
続いてソース(三分割)
0985デフォルトの名無しさん
2008/01/14(月) 05:14:02DATAFILE = 'kojin.txt'
def initialize ; load ; end
def insert(datastr)
data = parse(datastr)
self[data[0]] = data
end
def save
open(DATAFILE,'w') do |f|
self.each {|k,v| f.puts(v.join(' ')) }
end
end
def load
return unless File.exist?(DATAFILE)
open(DATAFILE) do |f|
f.each {|l| self.insert(l.chomp) }
end
end
def parse(datastr)
if datastr =~ /^(.*)\s+(A|B|O|AB)\s+(\d+)\s+(\d+)\s+(\d+)\s*$/
return [$1,$2,$3,$4,$5]
else
raise 'データエラー'
end
end
end
0986デフォルトの名無しさん
2008/01/14(月) 05:14:44def display(param)
if param.nil?
puts '未登録'
else
Columns.each_with_index {|c,i| puts c + ' : ' + param[i] }
h,w = (param[3].to_f/100),(param[4].to_f)
puts 'BMI : %0.1f'%[w/(h*h)]
end
end
def input(msg=nil)
puts msg unless msg.nil?
print '> '
$stdout.flush
return $stdin.gets.chomp
end
0987デフォルトの名無しさん
2008/01/14(月) 05:15:58mode = nil
while true
begin
case mode
when nil
mode = input('1:検索 2:追加(訂正) 3:削除 S:保存 Q:終了')
next
when '1' then display(db[input('氏名を入力してください')])
when '2' then db.insert(input('追加(訂正)するデータを入力してください'))
when '3' then db.delete(input('削除する氏名を入力してください'))
when 'S','s' then db.save
when 'Q','q' then exit
when 'l' then puts db.keys
end
rescue
puts $!
end
mode = nil
end
0988デフォルトの名無しさん
2008/01/14(月) 05:23:52% ruby kojin.rb
1:検索 2:追加(訂正) 3:削除 S:保存 Q:終了
> 2
追加(訂正)するデータを入力してください
> 山田太郎 A 35 177 75
1:検索 2:追加(訂正) 3:削除 S:保存 Q:終了
> 1
氏名を入力してください
> 山田太郎
氏名 : 山田太郎
血液型 : A
年齢 : 35
身長 : 177
体重 : 75
BMI : 23.9
1:検索 2:追加(訂正) 3:削除 S:保存 Q:終了
> q # 終了
0989デフォルトの名無しさん
2008/01/14(月) 11:36:000990デフォルトの名無しさん
2008/01/15(火) 13:20:19ありがとうございます。
0991デフォルトの名無しさん
2008/01/15(火) 13:58:24さらにinjectを使うとHashを変数に持つ必要が無くなるな
ARGF.read.scan(/[a-z]+/i).inject(Hash.new(0)){|h, e| h[e]+=1; h }.sort_by{|k, v| -v } (以下略
0992デフォルトの名無しさん
2008/01/16(水) 19:57:330993デフォルトの名無しさん
2008/01/16(水) 20:05:160994デフォルトの名無しさん
2008/01/19(土) 14:03:150995デフォルトの名無しさん
2008/01/19(土) 14:04:040996デフォルトの名無しさん
2008/01/19(土) 14:04:320997デフォルトの名無しさん
2008/01/19(土) 14:06:280998デフォルトの名無しさん
2008/01/19(土) 17:26:330999デフォルトの名無しさん
2008/01/19(土) 17:30:411000デフォルトの名無しさん
2008/01/19(土) 17:31:06∧('ω')∧ <1
(* ‘ω‘ * ) <0
つ_('ω')_⊂ <0
ノ./ ・ω・ヽ <0
Ol l
`'ー---‐´
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。