今日、11月11日はポッキー&プリッツの日!!

じゃなくて

バイナリデーですね!!!!

(参照: スラッシュドット・ジャパン|Happy Binary Day!

バイナリデーにちなんでバイナリ時計をRuby書いてみました。

ネタでチャチャチャと書いたので、超適当です。
たぶん、できてます。

左からHH:MM:SSです。

ruby>>
#/usr/bin/env ruby

require 'curses'

class BinaryClock

def initialize
@clock = {}
@clock[:hour] = Array.new(2)
@clock[:min] = Array.new(2)
@clock[:sec] = Array.new(2)
end

def run
curses_screen = Curses.init_screen

loop do
  Curses.clear
  get_time
  curses_screen.addstr(bin_clock_str)
  Curses.refresh
  sleep(1)
end

end

private
def get_time
time = Time.now
hour = split_integer(time.hour, 2)
min = split_integer(time.min, 2)
sec = split_integer(time.sec, 2)

0.upto(1) do |i|
  @clock[:hour][i] = to_bin_array(hour[i])
  @clock[:min][i] = to_bin_array(min[i])
  @clock[:sec][i] = to_bin_array(sec[i])
end

end

def split_integer(n, k=0)
int_array = n.to_s.split(//).map{|i| i.to_i}.reverse
int_array_size = int_array.size
int_array += Array.new(k - int_array_size){0} if int_array_size < k
return int_array
end

def to_bin_array(n)
binary = []

3.downto(0) do |i|
  if n >= 2**i
    binary[i] = '*'
    n -= 2**i
  else 
    binary[i] = '-'
  end
end

return binary

end

def bin_clock_str
str = ""

3.downto(0) do |i|
  str << "#{@clock[:hour][1][i]}\t" + 
         "#{@clock[:hour][0][i]}\t" + 
         "#{@clock[:min][1][i]}\t" +
         "#{@clock[:min][0][i]}\t" + 
         "#{@clock[:sec][1][i]}\t" +
         "#{@clock[:sec][0][i]}\n"
end

return str

end

end

bin_clock = BinaryClock.new
bin_clock.run
<<ruby

追記: 2008/11/11 17:30

今気づいたら、URLが
http://blog.s21g.com/articles/**1024**
でした。
バイナリ的にきれいな数字ですね!

追記: 2008/11/26 00:25

Githubにおいてみました。

posted by y_tsuda y_tsuda on Tue 11 Nov 2008 at 17:11 with 0 comments
Contents rssrss
Xperiaにインストールして1週間生き残ったアプリたち
gem serverをIE8から見るとヒドイことになる現象を解決
gem serverをIE8から見るとヒドイことに
Twitter, Account Suspended
GentooにRuby1.9をインストールした
GentooにScalaをインストールしてみた
多面ディスプレイ環境を手作りしてみた
lower-camel caseな文字列とアンダースコア区切りな文字列の相互変換をRubyで
topコマンドでのCPUコア毎の表示
Fedora11 (on VirtualBox) 速効レビュー
Tags
ruby
Comments rssrss
Aleksey Aleksey: The uname check is only due to a somewhat sloppy t... 02/02 07:03
Yu Tsuda Yu Tsuda: あぁ、そうですね、、syncすると戻ってしまいますね・・・。 ご指摘ありがとうございます!! 07/11 15:38
ursm ursm: /usr/portage 以下のファイルは更新のたび元に戻ってしまうので、/etc/portage/... 07/11 13:46
Yu Tsuda Yu Tsuda: 見た目だけでも、わざわざGentooをこういうリストに入れてるのがすごいなぁと思ったりしたのです(笑... 03/31 19:49
Leonard Chin (レオ) Leonard Chin (レオ): ただし、VirtualBoxで「Gentoo」などを選択しても、別にどのOSを入れても大丈夫だ。あく... 03/31 13:00
Yu Tsuda Yu Tsuda: この機能、結構便利なんですよねー。 またEmacsで便利な機能を見つけたらブログに書きまーす。 11/27 23:46
satoko satoko: 知らんかった!emacs派なのでうれしい。thanks! 11/27 12:08
satoko satoko: 他の記事も御苦労さまです!大変だけど、後で報われる(はず!)のでがんばってくださいませっ あとあと... 10/23 00:18