プログラミングの準備運動

プログラミングにも準備運動が必要かもしない。
こんな感じのものができればいい。

  • コマンド一つで手軽に呼び出せる
  • 表示される練習メニューのようなものは予測できない方が良い
  • これからやるメニューが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日(木)

良さそうなメニューを集めよう。

良さそうなメニューがあったらおしえてください><