バイナリ時計
今日、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においてみました。