RubyでACM/ICPC vol. 0
Rubyの勉強を始めたので,ACM/ICPC国内予選の問題を解いてみました。問題は,2004年愛媛大会のProblem Aです。
#ACM/ICPC 2004 Domestic, Ehime while line = gets line =~ /(\d+) (\d+)/ n, r = $1.to_i, $2.to_i break if n == 0 arr = (1..n).to_a r.times{ buf = [] line = gets line =~ /(\d+) (\d+)/ p, c = $1.to_i, $2.to_i (n + 1 - p - c).upto(n - p){|i| buf << arr[i] arr[i] = nil } arr.compact! arr.concat(buf) } p arr.pop end
まだまだRubyの実力の一部しか利用できていませんが,それでも,多重代入やArray#compact!,Integer#timesへのブロック付き呼び出しなど,単純にCで書くのに比べて,プログラマの労力が節約できるように設計されているというのは実感できました。ほかにも,
arr = (1..n).to_a
と書いて配列を初期化してあるところなど,はじめは
arr = [] n.times{|i| arr << (i + 1) }
と書いていました。すでに,この段階でもC言語より楽に書けていると思いますが,Range#to_aメソッドを使って,たった1行で配列を連続整数値で初期化できてしまうのには感心しました。これだけをもってして言語の優劣を語ったりするのは愚かなことなのでしませんが,たしかに便利。
とりあえず,「たのしいRuby」を読み終わったところなので,これからもポツポツとプログラムを書いていって,使いこなせるようにしたいと思います。
この本ですが,コンパクトにまとまっていて読みやすかったと思います。完全なプログラミング初心者の勉強に適しているかどうかは分かりませんが,別の言語でループや構造化プログラミングといった基礎的な考え方を知っていて,なおかつクラスやオブジェクトという言葉も聞いたことがあるという程度の知識/経験を持った人であれば,難なく読み進められるのではないかと思いました。
たのしいRuby 第2版 Rubyではじめる気軽なプログラミング
- 作者: 高橋征義,後藤裕蔵
- 出版社/メーカー: ソフトバンククリエイティブ
- 発売日: 2006/08/05
- メディア: 単行本
- 購入: 11人 クリック: 350回
- この商品を含むブログ (259件) を見る