プログラミングの準備運動
プログラミングにも準備運動が必要かもしない。
こんな感じのものができればいい。
- コマンド一つで手軽に呼び出せる
- 表示される練習メニューのようなものは予測できない方が良い
- これからやるメニューが1行程度で表示される。
(5分グライでできるようなものがちょうど良いかも--こういうのとか)
イメージ
$ quiz.rb >>#ここに何かが表示される(今日の練習メニューのような感じのもの)
とりあえず、こんな感じで充分かもしれない。
メニュー出題用のコード
#!/usr/bin/env ruby class Array def shuffle each_index{ |i| j = rand(i+1); self[i], self[j] = self[j], self[i]} self end end target = ENV["HOME"] + ".quiz/quiz.list" #練習メニューのようなものが書いてあるファイルのpath puts ">> " + File.readlines(target).select{ |e| e =~ /^[\#]+/}.shuffle.first
練習メニューの書いてあるファイル(quiz.list)
ここに良さそうだと想ったものを書いていく。 コメントされている行だけが出力対象。 例えば #九九表をつくる (途中で問題の説明などを加えてみてもいいかも) 九九表は面倒。とくに楽しくない #今日からある日までの一行カレンダー 嫌になったものとか出力対象から外したいものは !#<嫌になったメニュー> などのように行頭を"#"じゃなくしてしまえば良い。
上に書いてあるような内容だと下のどれかが出力される
- 九九表をつくる
- 今日からある日までの一行カレンダー
使い方
$ chmod +x quiz.rb #実行可能に変更。(一回したらもうしなくてもいい。) $ quiz.rb #上のコードのファイル名。 >> #今日からある日までの一行カレンダー #パスの通ってないディレクトリに保存したなら、 #そのディレクトリに"cd"などで行ってから"./quiz.rb"
「今日からある日までの一行カレンダー」が今回の課題。
さっそく作ってみる(今日からある日までの一行カレンダー)
require 'date' a = ARGV[0,3].map{ |e| e.to_i} last_day = Date.new(*a) week = %w(日 月 火 水 木 金 土) Date.today.upto(last_day) do |d| puts d.strftime("%Y年%m月%d日") + "(#{week[d.wday]})" end
実行結果(名前も適当に"a"です><)
$ ruby a 2008 1 10 2008年01月06日(日) 2008年01月07日(月) 2008年01月08日(火) 2008年01月09日(水) 2008年01月10日(木)
良さそうなメニューを集めよう。
良さそうなメニューがあったらおしえてください><